Name: series-workflow4d2vj Phase: Succeeded StartedAt: 2026-07-01 02:14:28 +0000 UTC FinishedAt: 2026-07-01 06:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[0] Phase: Succeeded StartedAt: 2026-07-01 02:14:28 +0000 UTC FinishedAt: 2026-07-01 02:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 02:14:28 +0000 UTC FinishedAt: 2026-07-01 02:30:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "b260c97930bc62713d246670677ade2190f0ff87", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "b260c97930bc62713d246670677ade2190f0ff87", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "d1bc74bc-0c61-40df-8988-a9400375cd73" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_conn_change_fwd_mask", "ip_vs_bind_dest", "ip_vs_conn_fill_cport" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdlMjAxZTNlOGZiMzVhYmU2ZGIzYmY0MDQwMzA1OGZmMGNlN2U2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDI6Mjk6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IGU3NmE3M2QxODNkNTMxLi41M2E3ZGUzYTlmMmJmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSAmIzQzOzcwLDQ3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4mIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXG4mIzQzOyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4mIzQzOy8qKlxuJiM0MzsgICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcbiYjNDM7ICAqIEB0Olx0XHRoYXNoIHRhYmxlIGZvciBobjBcbiYjNDM7ICAqIEB0MjpcdGhhc2ggdGFibGUgZm9yIGhuMVxuJiM0MzsgICogQGNwOlx0Y29ubmVjdGlvblxuJiM0MzsgICogQGhhc2hfa2V5Olx0aGFzaCBrZXkgZm9yIGhuMFxuJiM0MzsgICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbiYjNDM7ICAqIEB1c2UyOlx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXG4mIzQzOyAgKiBAbmV3X2hhc2g6XHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBoZWFkX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxuJiM0MzsgICogQGhlYWQyX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxuJiM0MzsgICpcbiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczpcbiYjNDM7ICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcbiYjNDM7ICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4mIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcbiYjNDM7ICAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxuLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4tXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4tXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbiYjNDM7Y29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuJiM0MztcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuJiM0MztcdCAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LFxuJiM0MztcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuIHtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XG4gXHR1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyO1xuLVx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xuIFx0dTMyIGlkeCwgaWR4MjtcbiBcbiBcdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRpZiAodXNlMilcbi1cdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0ZWxzZVxuLVx0XHRpZHgyID0gaWR4O1xuJiM0MztcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQtXHUwMDNlbWFzaztcbiYjNDM7XHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcbiYjNDM7XHQgKiBpcyBmb3IgbmV3IHRhYmxlXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ld19oYXNoMiBcdTAwMjZcdTAwMjYgdXNlMiBcdTAwMjZcdTAwMjYgdCAhPSB0MilcbiYjNDM7XHRcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4mIzQzO1xuIFx0aWYgKCFuZXdfaGFzaCkge1xuIFx0XHQvKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGJ1Y2tldCBpbiB0aGUgcmlnaHQgdGFibGUgKi9cbiBcbkBAIC0xMDMsMjQgJiM0MzsxMjUsMTkgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuIFx0XHRcdGlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbiBcdFx0fVxuLVx0XHRpZiAodXNlMikge1xuLVx0XHRcdGlmICghaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbi1cdFx0XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4tXHRcdFx0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbi1cdFx0XHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2s7XG4tXHRcdFx0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZHgyID0gaWR4O1xuLVx0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyIFx1MDAyNlx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbiYjNDM7XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbiYjNDM7XHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2s7XG4mIzQzO1x0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuIFx0fVxuIFxuJiM0MztcdGlmICghdXNlMilcbiYjNDM7XHRcdGlkeDIgPSBpZHg7XG4gXHRoZWFkID0gdC1cdTAwM2VidWNrZXRzICYjNDM7IChoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrKTtcbiBcdGhlYWQyID0gdXNlMiA/IHQyLVx1MDAzZWJ1Y2tldHMgJiM0MzsgKGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaykgOiBoZWFkO1xuIFxuLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0LyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi9cbi1cbiBcdGlmIChpZHggXHUwMDNjPSBpZHgyKSB7XG4gXHRcdGhsaXN0X2JsX2xvY2soaGVhZCk7XG4gXHRcdGlmIChoZWFkICE9IGhlYWQyKVxuQEAgLTEzMCwxNiAmIzQzOzE0NywyMiBAQCBjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuIFx0fVxuIFx0aWYgKCFuZXdfaGFzaCkge1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VkO1xuJiM0MztcbiBcdFx0LyogRW5zdXJlIGhhc2hfa2V5IGlzIHJlYWQgdW5kZXIgbG9jayAqL1xuIFx0XHRoYXNoX2tleV9uZXcgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbi1cdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcdFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcbiYjNDM7XHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFx0Y2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XG4mIzQzO1x0XHR9XG4gXHRcdC8qIEhhc2ggY2hhbmdlZCA/ICovXG4tXHRcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcbi1cdFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcdTAwMjZcdTAwMjYgdXNlMikpIHtcbiYjNDM7XHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgJiM0MzsxNzgsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLFxuIFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdGhsaXN0X2JsX3VubG9jayhoZWFkMik7XG4gXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XG4tXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuQEAgLTI2OCw4ICYjNDM7MjkwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0dXNlMiA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiBcbiBcdGNwLVx1MDAzZWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xuQEAgLTI4MCw2ICYjNDM7MzAzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmV0ID0gMTtcbiBcbiBcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXG5AQCAtMzA2LDE4ICYjNDM7MzMwLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcbiBcdFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cbi1cdFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuJiM0MztcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuIFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4wLm5vZGUpO1xuIFx0XHRcdGlmICh1c2UyKVxuIFx0XHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG5AQCAtMzI4LDYgJiM0MzszNTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiBcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02ODYsNiAmIzQzOzcxMywxNiBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdC8qIFByb3RlY3QgdGhlIGNwLVx1MDAzZWZsYWdzIG1vZGlmaWNhdGlvbiAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuIFxuJiM0MztcdC8qIFJlY2hlY2sgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2sgKi9cbiYjNDM7XHRpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0dXNlMiA9ICF1c2UyO1xuJiM0MztcdFx0aWYgKGRpcikge1xuJiM0MztcdFx0XHRkaXItLTtcbiYjNDM7XHRcdFx0Z290byBuZXh0X2RpcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXG4gXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxuIFx0ICovXG5AQCAtNzUyLDYgJiM0Mzs3ODksNjAgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovXG4mIzQzO3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gY3AtXHUwMDNlaXB2cztcbiYjNDM7XHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuJiM0MztcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbiYjNDM7XHRzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7XG4mIzQzO1xuJiM0MztcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbiYjNDM7XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XG4mIzQzO1x0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXG4mIzQzO1x0ICAgICEoKGNwLVx1MDAzZWZsYWdzIF4gbmV3X2ZsYWdzKSBcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSkge1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4mIzQzO1x0aWYgKGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuJiM0MztcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XG4mIzQzO1x0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXG4mIzQzO1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZW5ld190YmwpO1xuJiM0MztcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuJiM0MztcdFx0aGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7XG4mIzQzO1xuJiM0MztcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4mIzQzO1x0XHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuJiM0MztcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSwgaGFzaF9rZXkyKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiAmIzQzOzExMDUsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG4gXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xuJiM0MztcdFx0LyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovXG4mIzQzO1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuJiM0MztcbiBcdFx0LyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkXG4gXHRcdCAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLlxuIFx0XHQgKi9cbkBAIC0xMDIxLDkgJiM0MzsxMTE1LDE4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xuIFx0XHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xuIFx0XHRmbGFncyBcdTAwMjY9IH4oSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgSVBfVlNfQ09OTl9GX05PT1VUUFVUKTtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXG4mIzQzO1x0XHQgKiBoYXBwZW4gb25seSB1bmRlciBsb2Nrc1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpXG4mIzQzO1x0XHRcdGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHRjcC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0fVxuLVx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbi1cdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRjcC1cdTAwM2VkZXN0ID0gZGVzdDtcbiBcbiBcdElQX1ZTX0RCR19CVUYoNywgXCYjMzQ7QmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2JpbmRfZGVzdCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjdlMjAxZTNlOGZiMzVhYmU2ZGIzYmY0MDQwMzA1OGZmMGNlN2U2OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMDI6Mjk6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCBlNzZhNzNkMTgzZDUzMS4uNTNhN2RlM2E5ZjJiZjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtNzAsMjUgJiM0Mzs3MCw0NyBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZQogICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlCiAgKiAtIGJpdCBsb2NrIG9uIGJ1Y2tldCBzZXJpYWxpemVzIGFsbCBvcGVyYXRpb25zIHRoYXQgbW9kaWZ5IHRoZSBjaGFpbgomIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlCiYjNDM7ICogbmV3IHRhYmxlCiAgKiAtIGNwLSZndDtsb2NrIHByb3RlY3RzIGNvbm4gZmllbGRzIGxpa2UgY3AtJmd0O2ZsYWdzLCBjcC0mZ3Q7ZGVzdAogICovCiAKLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqLwomIzQzOy8qKgomIzQzOyAgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaAomIzQzOyAgKiBAdDoJCWhhc2ggdGFibGUgZm9yIGhuMAomIzQzOyAgKiBAdDI6CWhhc2ggdGFibGUgZm9yIGhuMQomIzQzOyAgKiBAY3A6CWNvbm5lY3Rpb24KJiM0MzsgICogQGhhc2hfa2V5OgloYXNoIGtleSBmb3IgaG4wCiYjNDM7ICAqIEBoYXNoX2tleTI6CWhhc2gga2V5IGZvciBobjEKJiM0MzsgICogQHVzZTI6CXVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZAomIzQzOyAgKiBAbmV3X2hhc2g6CW1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKQomIzQzOyAgKiBAbmV3X2hhc2gyOgltb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgICogQGhlYWRfcmV0OglyZXR1cm5lZCBoZWFkIGZvciBobjAKJiM0MzsgICogQGhlYWQyX3JldDoJcmV0dXJuZWQgaGVhZCBmb3IgaG4xCiYjNDM7ICAqCiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczoKJiM0MzsgICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZwomIzQzOyAgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZwomIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWQKJiM0MzsgICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksCi0JICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLAotCSAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KQomIzQzO2Nvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX3JodCAqdDIsIHN0cnVjdCBpcF92c19jb25uICpjcCwKJiM0MzsJICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsCiYjNDM7CSAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LAomIzQzOwkgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldCkKIHsKIAlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyOwogCXUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7Ci0Jc3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0OwogCXUzMiBpZHgsIGlkeDI7CiAKIAlpZHggPSBoYXNoX2tleSAmYW1wOyB0LSZndDttYXNrOwotCWlmICh1c2UyKQotCQlpZHgyID0gaGFzaF9rZXkyICZhbXA7IHQtJmd0O21hc2s7Ci0JZWxzZQotCQlpZHgyID0gaWR4OwomIzQzOwlpZHgyID0gaGFzaF9rZXkyICZhbXA7IHQtJmd0O21hc2s7CiYjNDM7CS8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MgomIzQzOwkgKiBpcyBmb3IgbmV3IHRhYmxlCiYjNDM7CSAqLwomIzQzOwlpZiAobmV3X2hhc2gyICZhbXA7JmFtcDsgdXNlMiAmYW1wOyZhbXA7IHQgIT0gdDIpCiYjNDM7CQlpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLOwomIzQzOwogCWlmICghbmV3X2hhc2gpIHsKIAkJLyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovCiAKQEAgLTEwMywyNCAmIzQzOzEyNSwxOSBAQCBjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LAogCQkJaWR4ID0gaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzazsKIAkJCWlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKIAkJfQotCQlpZiAodXNlMikgewotCQkJaWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkgewotCQkJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCi0JCQkJdDIgPSByY3VfZGVyZWZlcmVuY2UodDItJmd0O25ld190YmwpOwotCQkJCWlkeDIgPSBoYXNoX2tleTIgJmFtcDsgdDItJmd0O21hc2s7Ci0JCQkJaWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlkeDIgPSBpZHg7Ci0JCX0KJiM0MzsJfQomIzQzOwlpZiAodXNlMiAmYW1wOyZhbXA7ICFuZXdfaGFzaDIgJmFtcDsmYW1wOyAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHsKJiM0MzsJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCiYjNDM7CQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi0mZ3Q7bmV3X3RibCk7CiYjNDM7CQlpZHgyID0gaGFzaF9rZXkyICZhbXA7IHQyLSZndDttYXNrOwomIzQzOwkJaWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKIAl9CiAKJiM0MzsJaWYgKCF1c2UyKQomIzQzOwkJaWR4MiA9IGlkeDsKIAloZWFkID0gdC0mZ3Q7YnVja2V0cyAmIzQzOyAoaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzayk7CiAJaGVhZDIgPSB1c2UyID8gdDItJmd0O2J1Y2tldHMgJiM0MzsgKGhhc2hfa2V5MiAmYW1wOyB0Mi0mZ3Q7bWFzaykgOiBoZWFkOwogCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCS8qIERvIG5vdCB0b3VjaCBzZXFjb3VudCwgdGhpcyBpcyBhIHNhZmUgb3BlcmF0aW9uICovCi0KIAlpZiAoaWR4ICZsdDs9IGlkeDIpIHsKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKIAkJaWYgKGhlYWQgIT0gaGVhZDIpCkBAIC0xMzAsMTYgJiM0MzsxNDcsMjIgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSwKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKIAl9CiAJaWYgKCFuZXdfaGFzaCkgewomIzQzOwkJYm9vbCBjaGFuZ2VkOwomIzQzOwogCQkvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovCiAJCWhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKLQkJaGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKJiM0MzsJCWNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7CiYjNDM7CQlpZiAodXNlMiAmYW1wOyZhbXA7ICFuZXdfaGFzaDIpIHsKJiM0MzsJCQloYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwomIzQzOwkJCWNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7CiYjNDM7CQl9CiAJCS8qIEhhc2ggY2hhbmdlZCA/ICovCi0JCWlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHwKLQkJICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiAmYW1wOyZhbXA7IHVzZTIpKSB7CiYjNDM7CQlpZiAoY2hhbmdlZCkgewogCQkJaWYgKGhlYWQgIT0gaGVhZDIpCiAJCQkJaGxpc3RfYmxfdW5sb2NrKGhlYWQyKTsKIAkJCWhsaXN0X2JsX3VubG9jayhoZWFkKTsKLQkJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQkJaGFzaF9rZXkgPSBoYXNoX2tleV9uZXc7CiAJCQloYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyOwogCQkJZ290byByZXRyeTsKQEAgLTE1NSw3ICYjNDM7MTc4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbm5fdGFiX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwKIAlpZiAoaGVhZCAhPSBoZWFkMikKIAkJaGxpc3RfYmxfdW5sb2NrKGhlYWQyKTsKIAlobGlzdF9ibF91bmxvY2soaGVhZCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKQEAgLTI2OCw4ICYjNDM7MjkwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJdXNlMiA9IGZhbHNlOwogCX0KIAotCWNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sCi0JCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJY29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLywKJiM0MzsJCSAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwogCiAJY3AtJmd0O2ZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7CiAJV1JJVEVfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5LCBoYXNoX2tleSk7CkBAIC0yODAsNiAmIzQzOzMwMyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAJCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSwgaGVhZDIpOwogCiAJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmV0ID0gMTsKIAogCS8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovCkBAIC0zMDYsMTggJiM0MzszMzAsMjAgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJcmV0dXJuIHJlZmNvdW50X2RlY19pZl9vbmUoJmFtcDtjcC0mZ3Q7cmVmY250KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwogCiAJdCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLSZndDtjb25uX3RhYik7CiAJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiAJaGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwogCXVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7CiAKLQljb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLywKLQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsJY29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sCiYjNDM7CQkgICAgICBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiAKIAlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHsKIAkJLyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi8KLQkJaWYgKHJlZmNvdW50X2RlY19pZl9vbmUoJmFtcDtjcC0mZ3Q7cmVmY250KSkgewomIzQzOwkJaWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApICZhbXA7JmFtcDsKJiM0MzsJCSAgICByZWZjb3VudF9kZWNfaWZfb25lKCZhbXA7Y3AtJmd0O3JlZmNudCkpIHsKIAkJCWhsaXN0X2JsX2RlbF9yY3UoJmFtcDtjcC0mZ3Q7aG4wLm5vZGUpOwogCQkJaWYgKHVzZTIpCiAJCQkJaGxpc3RfYmxfZGVsX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSk7CkBAIC0zMjgsNiAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAKIAljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwogCiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKQEAgLTY4Niw2ICYjNDM7NzEzLDE2IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KQogCS8qIFByb3RlY3QgdGhlIGNwLSZndDtmbGFncyBtb2RpZmljYXRpb24gKi8KIAlzcGluX2xvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiAKJiM0MzsJLyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqLwomIzQzOwlpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3AtJmd0O2xvY2spOwomIzQzOwkJdXNlMiA9ICF1c2UyOwomIzQzOwkJaWYgKGRpcikgewomIzQzOwkJCWRpci0tOwomIzQzOwkJCWdvdG8gbmV4dF9kaXI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAkvKiBMb2NrIHNlcWNvdW50IG9ubHkgZm9yIHRoZSBvbGQgYnVja2V0LCBldmVuIGlmIHdlIGFyZSBvbiBuZXcgdGFibGUKIAkgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLgogCSAqLwpAQCAtNzUyLDYgJiM0Mzs3ODksNjAgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpCiAJCWdvdG8gbmV4dF9kaXI7CiB9CiAKJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovCiYjNDM7c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC0mZ3Q7aXB2czsKJiM0MzsJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjsKJiM0MzsJdTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyOwomIzQzOwlzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7CiYjNDM7CiYjNDM7CS8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi8KJiM0MzsJaWYgKChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fAomIzQzOwkgICAgLyogTm8gY2hhbmdlIGluIGRvdWJsZSBoYXNoaW5nID8gKi8KJiM0MzsJICAgICEoKGNwLSZndDtmbGFncyBeIG5ld19mbGFncykgJmFtcDsgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSkgewomIzQzOwkJY3AtJmd0O2ZsYWdzID0gbmV3X2ZsYWdzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CXQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy0mZ3Q7Y29ubl90YWIpOwomIzQzOwlpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7CiYjNDM7CQkvKiBTdG9wIGRvdWJsZSBoYXNoaW5nICovCiYjNDM7CQloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKJiM0MzsJCWhhc2hfa2V5MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKJiM0MzsKJiM0MzsJCWNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLywKJiM0MzsJCQkgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLAomIzQzOwkJCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CiYjNDM7CQkvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi8KJiM0MzsJCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwomIzQzOwkJV1JJVEVfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7CiYjNDM7CQlobGlzdF9ibF9kZWxfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlKTsKJiM0MzsJCWNwLSZndDtmbGFncyA9IG5ld19mbGFnczsKJiM0MzsKJiM0MzsJCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBTdGFydCBkb3VibGUgaGFzaGluZyAqLwomIzQzOwomIzQzOwkJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiYjNDM7CiYjNDM7CQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LSZndDtuZXdfdGJsKTsKJiM0MzsJCWhhc2gyID0gaXBfdnNfY29ubl9oYXNoa2V5X2Nvbm4odDIsIGNwLCB0cnVlKTsKJiM0MzsJCWhhc2hfa2V5MiA9IGlwX3ZzX3JodF9idWlsZF9oYXNoX2tleSh0MiwgaGFzaDIpOwomIzQzOwomIzQzOwkJLyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovCiYjNDM7CQljb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLAomIzQzOwkJCSAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLywKJiM0MzsJCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpOwomIzQzOwkJY3AtJmd0O2ZsYWdzID0gbmV3X2ZsYWdzOwomIzQzOwkJaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlLCBoZWFkMik7CiYjNDM7CiYjNDM7CQljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC0mZ3Q7c2l6ZSAqLwogc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpCiB7CkBAIC0xMDE0LDYgJiM0MzsxMTA1LDkgQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCiAJZmxhZ3MgPSBjcC0mZ3Q7ZmxhZ3M7CiAJLyogQmluZCB3aXRoIHRoZSBkZXN0aW5hdGlvbiBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgdHJhbnNtaXR0ZXIgKi8KIAlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NZTkMpIHsKJiM0MzsJCS8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqLwomIzQzOwkJY29ubl9mbGFncyAmYW1wOz0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUOwomIzQzOwogCQkvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWQKIAkJICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuCiAJCSAqLwpAQCAtMTAyMSw5ICYjNDM7MTExNSwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJCWNvbm5fZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7CiAJCS8qIGNvbm5lY3Rpb25zIGluaGVyaXQgZm9yd2FyZGluZyBtZXRob2QgZnJvbSBkZXN0ICovCiAJCWZsYWdzICZhbXA7PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7CiYjNDM7CQlmbGFncyB8PSBjb25uX2ZsYWdzOwomIzQzOwkJLyogQ2hhbmdpbmcgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uIGNhbgomIzQzOwkJICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3MKJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfSEFTSEVEKQomIzQzOwkJCWlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJY3AtJmd0O2ZsYWdzID0gZmxhZ3M7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmbGFncyB8PSBjb25uX2ZsYWdzOwomIzQzOwkJY3AtJmd0O2ZsYWdzID0gZmxhZ3M7CiAJfQotCWZsYWdzIHw9IGNvbm5fZmxhZ3M7Ci0JY3AtJmd0O2ZsYWdzID0gZmxhZ3M7CiAJY3AtJmd0O2Rlc3QgPSBkZXN0OwogCiAJSVBfVlNfREJHX0JVRig3LCAmIzM0O0JpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHR3ZWFraW5nIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC4gSXQmIzM5O3MgYSBjb25uZWN0aW9uLXRyYWNraW5nIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlwX3ZzX2Nvbm5gIGhhc2ggdGFibGVzIGFuZCB0aGUgbG9ja2luZyBtZWNoYW5pc20sIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLiBUaGlzIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgaXMgdGhlbiBiZWluZyB1dGlsaXplZCBpbiBgaXBfdnNfYmluZF9kZXN0YCwgd2hlbiBhIGNvbm5lY3Rpb24gaXMgaGFzaGVkLCB0byBhZGp1c3QgdGhlIGZvcndhcmRpbmcgbWV0aG9kLiBTbywgZnVuZGFtZW50YWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVBWUyBzdWJzeXN0ZW0uCgpHaXZlbiB0aGF0IElQVlMgaXMgYSBjb3JlIGNvbXBvbmVudCwgYSBrZXkgcGFydCBvZiB0aGUgTGludXgga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBmcmVxdWVudGx5IGxldmVyYWdlZCBmb3IgbG9hZCBiYWxhbmNpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUsIHR5cGljYWxseSB2aWEgbmV0bGluayBvciBgc2V0c29ja29wdGAsIGFuZCB0aGUgY2hhbmdlcyBhcmUsIGFzIEkgbWVudGlvbmVkLCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY2AuCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBgQ09ORklHYCBvcHRpb25zIHRoYXQgd2lsbCBhbGxvdyBtZSB0byB0YXJnZXQgdGhpcyBjb2RlIGVmZmVjdGl2ZWx5LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gZW5zdXJlIElQVlMgaXMgZW5hYmxlZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBhbmQgbG9vayBmb3IgYElQX1ZTYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCB0byBpZGVudGlmeSB0aGUgY29ycmVjdCBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBDb25maWd1cmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIElQVlMgY29uZmlndXJhdGlvbiBhbmQgY29kZS4gTXkgbWFpbiBwb2ludCBvZiByZWZlcmVuY2UgaXMgdGhlIGBJUF9WU2AgY29uZmlnIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCBvciBhZGRlZCByZWxhdGVkIHRvIHRoaXMuCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBtb2RpZmljYXRpb25zLCBpdCBzZWVtcyB0aGUgZm9jdXMgaXMgb24gY29ubmVjdGlvbiB0YWJsZSBtYW5hZ2VtZW50OiBgY29ubl90YWJfbG9ja2AsIGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLiBUaGVzZSBhcmUgYWxsIGZhaXJseSBsb3ctbGV2ZWwsIGVzc2VudGlhbCBmdW5jdGlvbnMuIFRoZW4sIHRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uIOKAkyBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLiBPa2F5LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBmbGFnIHRoYXQgYXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCBhcmUgYWxzbyB3b3J0aCBjbG9zZXIgaW5zcGVjdGlvbi4KCk5vdywgYmV5b25kIHRoZSBjb3JlIGBJUF9WU2AgY29uZmlnLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWxzbyBpbXBvcnRhbnQ/IEl0IGxvb2tzIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAgYW5kIGBJUF9WU19QUk9UT19VRFBgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gYWRkIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIHRob3NlIHByb3RvY29scywgdGhvdWdoIGBJUF9WU2AgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBvbmUuIFdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGluIHRoZSBrZXJuZWwsIGBJUF9WU2AgaXMgYSBtZW51Y29uZmlnLCBzbyBpdCYjMzk7cyBgQ09ORklHX0lQX1ZTYCB0aGF0IEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yLgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY2AgYmVjYXVzZSBpdCYjMzk7cyBhIG5ldyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDc9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03OTItLyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3OTM6c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03OTQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA5MD1pcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMjItXHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMzpcdFx0XHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTI0LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIElQVlMgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCBob3cgaXQgZGVhbHMgd2l0aCBkb3VibGUgaGFzaGluZyBhbmQgY2hhbmdlcyB0byB0aGUgZm9yd2FyZGluZyBtZXRob2QuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLiBDb25uZWN0aW9uIHRyYWNraW5nIGlzIGEgY29tcGxleCBiZWFzdCwgYW5kIGNoYW5nZXMgdG8gaXRzIGNvcmUgY29tcG9uZW50cyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suCgpNeSBmaXJzdCBpbnN0aW5jdCBpcywgKmRlZmluaXRlbHkqIGZ1enogdGhpcy4gVGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIG9mZi1ieS1vbmUgZXJyb3JzLCBvciBldmVuIG1vcmUgc3VidGxlIGxvZ2ljIGZsYXdzIHdpdGhpbiBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaXMgaGlnaC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgYXNzdW1wdGlvbnMgYnVpbHQgaW50byB0aGUgcHJldmlvdXMgdmVyc2lvbnMgYXJlIG1haW50YWluZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIHRhcmdldC4gVGhlIHN5bWJvbHMgdGhhdCBqdW1wIG91dCBhdCBtZSBhcyBwb3RlbnRpYWwgaG90c3BvdHMgYXJlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGBpcF92c19iaW5kX2Rlc3RgLCBhbmQgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgaGFuZGxlIGNyaXRpY2FsIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBmb3J3YXJkaW5nIHJ1bGVzLCBkZXN0aW5hdGlvbiBiaW5kaW5nLCBhbmQgcG9ydCBpbmZvcm1hdGlvbiDigJMgdGhlIGtpbmQgb2YgcGxhY2VzIHdoZXJlIHRoaW5ncyBjYW4gZ28gc2lkZXdheXMgaWYgaW5wdXQgdmFsaWRhdGlvbiBpc24mIzM5O3Qgcm9jayBzb2xpZC4gSSYjMzk7bGwgbmVlZCB0byBkZXZlbG9wIGZ1enppbmcgc3RyYXRlZ2llcyBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uIGVudHJ5IHBvaW50cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy4KCkxldCBtZSBhbHNvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCB0byBidWlsZCB0aGlzIGZ1bmN0aW9uLiBJIHNlZSBJUF9WUyBpcyBuZWVkZWQuIE9rYXkuIE5vdywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRoYXQgbWlnaHQgYWxzbyBiZSByZWxldmFudCB0byBmdWxseSBlbmFibGUgdGhlIGltcGFjdGVkIGNvZGUgcGF0aHMuIFdlIGNhbiYjMzk7dCBsZXQgYSBjb25maWd1cmF0aW9uIGlzc3VlIGJsb2NrIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgcmVsYXRlZCBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDYKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bGwgc3VtbWFyaXplIHRoZSB0ZXh0LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlNldHRpbmcgdGhlIFN0YWdlIGZvciBBbmFseXNpcyoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgdGFzayBpcyB0byBlc3NlbnRpYWxseSBzdW1tYXJpemUgYSB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUg4oCTIG5vdCBqdXN0IHRvIHByb3ZpZGUgYSBzaW1wbGUgcmVndXJnaXRhdGlvbiBvZiB3aGF0JiMzOTtzICpzYWlkKiwgYnV0IHRvIGNhcHR1cmUgdGhlIHVuZGVybHlpbmcgcmVhc29uaW5nIGFuZCBpbXBsaWNhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIGVzdGFibGlzaCB0aGUgY29udGV4dCBmb3IgZnV0dXJlIHJlc3VsdHMuIFRoaXMgaW5pdGlhbCBzdGVwLCBzZXR0aW5nIHRoZSBwYXJhbWV0ZXJzLCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJZiBJIGRvbuKAmXQgZGVmaW5lIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgSSB3b27igJl0IGdldCB0aGUgY29ycmVjdCByZXN1bHRzIGF0IHRoZSBlbmQuIEkgYW0gZ29pbmcgdG8gbWFrZSBjZXJ0YWluIEkgZG9jdW1lbnQgdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2JpbmRfZGVzdCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjA0LjY3NTYwMDEwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njg2NTQyNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6Mjk6MDQuNjc1NjE2NjI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM2NDkzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2UyMDFlM2U4ZmIzNWFiZTZkYjNiZjQwNDAzMDU4ZmYwY2U3ZTY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMDI6Mjk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcXG5pbmRleCBlNzZhNzNkMTgzZDUzMS4uNTNhN2RlM2E5ZjJiZjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcXG5AQCAtNzAsMjUgKzcwLDQ3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcXG4gICogYnVja2V0IG9yIGhhc2ggdGFibGVcXG4gICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlXFxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXFxuKyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXFxuKyAqIG5ldyB0YWJsZVxcbiAgKiAtIGNwLVxcdTAwM2Vsb2NrIHByb3RlY3RzIGNvbm4gZmllbGRzIGxpa2UgY3AtXFx1MDAzZWZsYWdzLCBjcC1cXHUwMDNlZGVzdFxcbiAgKi9cXG4gXFxuLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqL1xcbisvKipcXG4rICAqIGNvbm5fdGFiX2xvY2sgLSBMb2NrIGNvbm5fdGFiIGJ1Y2tldHMgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoXFxuKyAgKiBAdDpcXHRcXHRoYXNoIHRhYmxlIGZvciBobjBcXG4rICAqIEB0MjpcXHRoYXNoIHRhYmxlIGZvciBobjFcXG4rICAqIEBjcDpcXHRjb25uZWN0aW9uXFxuKyAgKiBAaGFzaF9rZXk6XFx0aGFzaCBrZXkgZm9yIGhuMFxcbisgICogQGhhc2hfa2V5MjpcXHRoYXNoIGtleSBmb3IgaG4xXFxuKyAgKiBAdXNlMjpcXHR1c2luZyBobjEgKGRvdWJsZSBoYXNoaW5nKSBiYXNlZCBvbiB0aGUgZm9yd2FyZGluZyBtZXRob2RcXG4rICAqIEBuZXdfaGFzaDpcXHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICAqIEBuZXdfaGFzaDI6XFx0bW9kZSBmb3IgaG4xLCBoYXNoIG5vZGUgKHRydWUpIG9yIHNlZWsgbm9kZSAoZmFsc2UpXFxuKyAgKiBAaGVhZF9yZXQ6XFx0cmV0dXJuZWQgaGVhZCBmb3IgaG4wXFxuKyAgKiBAaGVhZDJfcmV0OlxcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxcbisgICpcXG4rICAqIFdlIHN1cHBvcnQgMyBtb2RlczpcXG4rICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcXG4rICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXFxuKyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcXG4rICAqL1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWRcXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4tXFx0ICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxcbi1cXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcXG4rY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbitcXHQgICAgICB1MzIgaGFzaF9rZXksIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcXG4rXFx0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXFxuK1xcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XFxuIFxcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XFxuLVxcdHN0cnVjdCBpcF92c19yaHQgKnQyID0gdDtcXG4gXFx0dTMyIGlkeCwgaWR4MjtcXG4gXFxuIFxcdGlkeCA9IGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0aWYgKHVzZTIpXFxuLVxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGlkeDIgPSBpZHg7XFxuK1xcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbitcXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcXG4rXFx0ICogaXMgZm9yIG5ldyB0YWJsZVxcbitcXHQgKi9cXG4rXFx0aWYgKG5ld19oYXNoMiBcXHUwMDI2XFx1MDAyNiB1c2UyIFxcdTAwMjZcXHUwMDI2IHQgIT0gdDIpXFxuK1xcdFxcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuK1xcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuIFxcdFxcdC8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqL1xcbiBcXG5AQCAtMTAzLDI0ICsxMjUsMTkgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4gXFx0XFx0XFx0aWR4ID0gaGFzaF9rZXkgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbiBcXHRcXHRcXHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKHVzZTIpIHtcXG4tXFx0XFx0XFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xcbi1cXHRcXHRcXHRcXHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xcbi1cXHRcXHRcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cXHUwMDNlbmV3X3RibCk7XFxuLVxcdFxcdFxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0Mi1cXHUwMDNlbWFzaztcXG4tXFx0XFx0XFx0XFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRpZHgyID0gaWR4O1xcbi1cXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKHVzZTIgXFx1MDAyNlxcdTAwMjYgIW5ld19oYXNoMiBcXHUwMDI2XFx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcXG4rXFx0XFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cXG4rXFx0XFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXFx1MDAzZW5ld190YmwpO1xcbitcXHRcXHRpZHgyID0gaGFzaF9rZXkyIFxcdTAwMjYgdDItXFx1MDAzZW1hc2s7XFxuK1xcdFxcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghdXNlMilcXG4rXFx0XFx0aWR4MiA9IGlkeDtcXG4gXFx0aGVhZCA9IHQtXFx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkgXFx1MDAyNiB0LVxcdTAwM2VtYXNrKTtcXG4gXFx0aGVhZDIgPSB1c2UyID8gdDItXFx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkyIFxcdTAwMjYgdDItXFx1MDAzZW1hc2spIDogaGVhZDtcXG4gXFxuLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4tXFx0LyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi9cXG4tXFxuIFxcdGlmIChpZHggXFx1MDAzYz0gaWR4Mikge1xcbiBcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQpO1xcbiBcXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG5AQCAtMTMwLDE2ICsxNDcsMjIgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4gXFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcXG4gXFx0fVxcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlZDtcXG4rXFxuIFxcdFxcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cXG4gXFx0XFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbi1cXHRcXHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXHRcXHRjaGFuZ2VkID0gaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3O1xcbitcXHRcXHRpZiAodXNlMiBcXHUwMDI2XFx1MDAyNiAhbmV3X2hhc2gyKSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuK1xcdFxcdFxcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogSGFzaCBjaGFuZ2VkID8gKi9cXG4tXFx0XFx0aWYgKGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldyB8fFxcbi1cXHRcXHQgICAgKGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyIFxcdTAwMjZcXHUwMDI2IHVzZTIpKSB7XFxuK1xcdFxcdGlmIChjaGFuZ2VkKSB7XFxuIFxcdFxcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRcXHRcXHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcXG4gXFx0XFx0XFx0aGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjtcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG5AQCAtMTU1LDcgKzE3OCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXFxuIFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuQEAgLTI2OCw4ICsyOTAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHR1c2UyID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuLVxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuK1xcdFxcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4gXFxuIFxcdGNwLVxcdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xcbiBcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcXG5AQCAtMjgwLDYgKzMwMyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XFxuIFxcbiBcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmV0ID0gMTtcXG4gXFxuIFxcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXFxuQEAgLTMwNiwxOCArMzMwLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXG4gXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuIFxcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbiBcXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuIFxcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XFxuIFxcbi1cXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcXG4tXFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxcbitcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbiBcXG4gXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcXG4gXFx0XFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cXG4tXFx0XFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpKSB7XFxuK1xcdFxcdGlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCkpIHtcXG4gXFx0XFx0XFx0aGxpc3RfYmxfZGVsX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMC5ub2RlKTtcXG4gXFx0XFx0XFx0aWYgKHVzZTIpXFxuIFxcdFxcdFxcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuQEAgLTMyOCw2ICszNTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXG4gXFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcXG4gXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTY4Niw2ICs3MTMsMTYgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdC8qIFByb3RlY3QgdGhlIGNwLVxcdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuIFxcbitcXHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXFxuK1xcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbitcXHRcXHR1c2UyID0gIXVzZTI7XFxuK1xcdFxcdGlmIChkaXIpIHtcXG4rXFx0XFx0XFx0ZGlyLS07XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9kaXI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXFxuIFxcdCAqIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgZGVsIG9wZXJhdGlvbiwgbm90IHRoZSBhZGRpbmcuXFxuIFxcdCAqL1xcbkBAIC03NTIsNiArNzg5LDYwIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxcbiBcXHRcXHRnb3RvIG5leHRfZGlyO1xcbiB9XFxuIFxcbisvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovXFxuK3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLVxcdTAwM2VpcHZzO1xcbitcXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xcbitcXHR1MzIgaGFzaDIsIGhhc2hfa2V5LCBoYXNoX2tleTI7XFxuK1xcdHN0cnVjdCBpcF92c19yaHQgKnQsICp0MjtcXG4rXFxuK1xcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cXG4rXFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XFxuK1xcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xcbitcXHQgICAgISgoY3AtXFx1MDAzZWZsYWdzIF4gbmV3X2ZsYWdzKSBcXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykpIHtcXG4rXFx0XFx0Y3AtXFx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuK1xcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcXG4rXFx0XFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXG4rXFx0XFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxcbitcXHRcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxcbitcXHRcXHRcXHQgICAgICBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4rXFxuK1xcdFxcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XFxuK1xcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXFxuK1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFxuK1xcdFxcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXFx1MDAzZW5ld190YmwpO1xcbitcXHRcXHRoYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7XFxuK1xcdFxcdGhhc2hfa2V5MiA9IGlwX3ZzX3JodF9idWlsZF9oYXNoX2tleSh0MiwgaGFzaDIpO1xcbitcXG4rXFx0XFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXFxuK1xcdFxcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXFxuK1xcdFxcdFxcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFx0XFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cXHUwMDNlc2l6ZSAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4ge1xcbkBAIC0xMDE0LDYgKzExMDUsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0ZmxhZ3MgPSBjcC1cXHUwMDNlZmxhZ3M7XFxuIFxcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XFxuK1xcdFxcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xcbitcXHRcXHRjb25uX2ZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcXG4rXFxuIFxcdFxcdC8qIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB0ZW1wbGF0ZSBhbmQgaXMgY3JlYXRlZFxcbiBcXHRcXHQgKiBieSBzeW5jLCBwcmVzZXJ2ZSB0aGUgYWN0aXZpdHkgZmxhZy5cXG4gXFx0XFx0ICovXFxuQEAgLTEwMjEsOSArMTExNSwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xcbiBcXHRcXHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xcbiBcXHRcXHRmbGFncyBcXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XFxuK1xcdFxcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XFxuK1xcdFxcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cXG4rXFx0XFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxcbitcXHRcXHRcXHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0fVxcbi1cXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbi1cXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0Y3AtXFx1MDAzZWRlc3QgPSBkZXN0O1xcbiBcXG4gXFx0SVBfVlNfREJHX0JVRig3LCBcXFwiQmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjA1LjExMDAzNDAzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkyNTIwOTI0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3ZTIwMWUzZThmYjM1YWJlNmRiM2JmNDA0MDMwNThmZjBjZTdlNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDAyOjI5OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IGU3NmE3M2QxODNkNTMxLi41M2E3ZGUzYTlmMmJmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSArNzAsNDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuICAqIGJ1Y2tldCBvciBoYXNoIHRhYmxlXG4gICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cbisgKiAtIG9uIHJlc2l6ZSwgYnVja2V0IGZyb20gdGhlIG9sZCB0YWJsZSBpcyBsb2NrZWQgYmVmb3JlIGJ1Y2tldCBmcm9tIHRoZVxuKyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4rLyoqXG4rICAqIGNvbm5fdGFiX2xvY2sgLSBMb2NrIGNvbm5fdGFiIGJ1Y2tldHMgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoXG4rICAqIEB0Olx0XHRoYXNoIHRhYmxlIGZvciBobjBcbisgICogQHQyOlx0aGFzaCB0YWJsZSBmb3IgaG4xXG4rICAqIEBjcDpcdGNvbm5lY3Rpb25cbisgICogQGhhc2hfa2V5Olx0aGFzaCBrZXkgZm9yIGhuMFxuKyAgKiBAaGFzaF9rZXkyOlx0aGFzaCBrZXkgZm9yIGhuMVxuKyAgKiBAdXNlMjpcdHVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZFxuKyAgKiBAbmV3X2hhc2g6XHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbisgICogQG5ld19oYXNoMjpcdG1vZGUgZm9yIGhuMSwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxuKyAgKiBAaGVhZF9yZXQ6XHRyZXR1cm5lZCBoZWFkIGZvciBobjBcbisgICogQGhlYWQyX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxuKyAgKlxuKyAgKiBXZSBzdXBwb3J0IDMgbW9kZXM6XG4rICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcbisgICogLSBoYXNoIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIGhhc2hpbmdcbisgICogLSBzZWVrIGhuMCBhbmQgaGFzaCBobjEsIHVzZWQgd2hlbiBmb3J3YXJkaW5nIG1ldGhvZCBpcyBjaGFuZ2VkXG4rICAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxuLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4tXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4tXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbitjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4rXHQgICAgICB1MzIgaGFzaF9rZXksIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcbitcdCAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LFxuK1x0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXG4ge1xuIFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbiBcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XG4tXHRzdHJ1Y3QgaXBfdnNfcmh0ICp0MiA9IHQ7XG4gXHR1MzIgaWR4LCBpZHgyO1xuIFxuIFx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGlmICh1c2UyKVxuLVx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRlbHNlXG4tXHRcdGlkeDIgPSBpZHg7XG4rXHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4rXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcbitcdCAqIGlzIGZvciBuZXcgdGFibGVcbitcdCAqL1xuK1x0aWYgKG5ld19oYXNoMiBcdTAwMjZcdTAwMjYgdXNlMiBcdTAwMjZcdTAwMjYgdCAhPSB0MilcbitcdFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbitcbiBcdGlmICghbmV3X2hhc2gpIHtcbiBcdFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXG4gXG5AQCAtMTAzLDI0ICsxMjUsMTkgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuIFx0XHRcdGlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbiBcdFx0fVxuLVx0XHRpZiAodXNlMikge1xuLVx0XHRcdGlmICghaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbi1cdFx0XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4tXHRcdFx0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbi1cdFx0XHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2s7XG4tXHRcdFx0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZHgyID0gaWR4O1xuLVx0XHR9XG4rXHR9XG4rXHRpZiAodXNlMiBcdTAwMjZcdTAwMjYgIW5ld19oYXNoMiBcdTAwMjZcdTAwMjYgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4rXHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4rXHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVx1MDAzZW5ld190YmwpO1xuK1x0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrO1xuK1x0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuIFx0fVxuIFxuK1x0aWYgKCF1c2UyKVxuK1x0XHRpZHgyID0gaWR4O1xuIFx0aGVhZCA9IHQtXHUwMDNlYnVja2V0cyArIChoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrKTtcbiBcdGhlYWQyID0gdXNlMiA/IHQyLVx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrKSA6IGhlYWQ7XG4gXG4tXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xuLVxuIFx0aWYgKGlkeCBcdTAwM2M9IGlkeDIpIHtcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbiBcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG5AQCAtMTMwLDE2ICsxNDcsMjIgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbiBcdH1cbiBcdGlmICghbmV3X2hhc2gpIHtcbitcdFx0Ym9vbCBjaGFuZ2VkO1xuK1xuIFx0XHQvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovXG4gXHRcdGhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuLVx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXHRcdGNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7XG4rXHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuK1x0XHRcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IGhhc2hfa2V5MjtcbitcdFx0fVxuIFx0XHQvKiBIYXNoIGNoYW5nZWQgPyAqL1xuLVx0XHRpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8XG4tXHRcdCAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgXHUwMDI2XHUwMDI2IHVzZTIpKSB7XG4rXHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgKzE3OCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXG4gXHRpZiAoaGVhZCAhPSBoZWFkMilcbiBcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcbiBcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5AQCAtMjY4LDggKzI5MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHVzZTIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRjcC1cdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xuIFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbkBAIC0yODAsNiArMzAzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyZXQgPSAxO1xuIFxuIFx0LyogU2NoZWR1bGUgcmVzaXppbmcgaWYgbG9hZCBpbmNyZWFzZXMgKi9cbkBAIC0zMDYsMTggKzMzMCwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XG4gXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tXHRcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpKSB7XG4gXHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjAubm9kZSk7XG4gXHRcdFx0aWYgKHVzZTIpXG4gXHRcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbkBAIC0zMjgsNiArMzU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4gXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02ODYsNiArNzEzLDE2IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0LyogUHJvdGVjdCB0aGUgY3AtXHUwMDNlZmxhZ3MgbW9kaWZpY2F0aW9uICovXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4gXG4rXHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXG4rXHRpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdHVzZTIgPSAhdXNlMjtcbitcdFx0aWYgKGRpcikge1xuK1x0XHRcdGRpci0tO1xuK1x0XHRcdGdvdG8gbmV4dF9kaXI7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxuIFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cbiBcdCAqL1xuQEAgLTc1Miw2ICs3ODksNjAgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuKy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cbitzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC1cdTAwM2VpcHZzO1xuK1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbitcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbitcdHN0cnVjdCBpcF92c19yaHQgKnQsICp0MjtcbitcbitcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbitcdGlmICgoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkgfHxcbitcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xuK1x0ICAgICEoKGNwLVx1MDAzZWZsYWdzIF4gbmV3X2ZsYWdzKSBcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSkge1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbitcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbitcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuK1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuK1x0XHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbitcbitcdFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuK1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sXG4rXHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1xuK1x0XHQvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi9cbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5KTtcbitcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1xuK1x0XHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi9cbitcbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcbitcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VuZXdfdGJsKTtcbitcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuK1x0XHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcbitcbitcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4rXHRcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXG4rXHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIHRydWUgLyogbmV3X2hhc2gyICovLFxuK1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1x0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbitcbitcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbitcdH1cbit9XG4rXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiArMTEwNSw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0ZmxhZ3MgPSBjcC1cdTAwM2VmbGFncztcbiBcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XG4rXHRcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xuK1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuK1xuIFx0XHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcbiBcdFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXG4gXHRcdCAqL1xuQEAgLTEwMjEsOSArMTExNSwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcbiBcdFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cbiBcdFx0ZmxhZ3MgXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cbitcdFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcbitcdFx0ICovXG4rXHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbitcdFx0XHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdH0gZWxzZSB7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHR9XG4tXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuLVx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGNwLVx1MDAzZWRlc3QgPSBkZXN0O1xuIFxuIFx0SVBfVlNfREJHX0JVRig3LCBcIkJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjA1LjExMDAzNjk0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODY4NjUzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIENvbm5lY3Rpb24gVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNgLiBJdCdzIGEgY29ubmVjdGlvbi10cmFja2luZyBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpcF92c19jb25uYCBoYXNoIHRhYmxlcyBhbmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYC4gVGhpcyBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIHRoZW4gYmVpbmcgdXRpbGl6ZWQgaW4gYGlwX3ZzX2JpbmRfZGVzdGAsIHdoZW4gYSBjb25uZWN0aW9uIGlzIGhhc2hlZCwgdG8gYWRqdXN0IHRoZSBmb3J3YXJkaW5nIG1ldGhvZC4gU28sIGZ1bmRhbWVudGFsbHksIHdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVBWUyBzdWJzeXN0ZW0uXG5cbkdpdmVuIHRoYXQgSVBWUyBpcyBhIGNvcmUgY29tcG9uZW50LCBhIGtleSBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgZnJlcXVlbnRseSBsZXZlcmFnZWQgZm9yIGxvYWQgYmFsYW5jaW5nLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgdHlwaWNhbGx5IHZpYSBuZXRsaW5rIG9yIGBzZXRzb2Nrb3B0YCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSwgYXMgSSBtZW50aW9uZWQsIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC5cblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgYENPTkZJR2Agb3B0aW9ucyB0aGF0IHdpbGwgYWxsb3cgbWUgdG8gdGFyZ2V0IHRoaXMgY29kZSBlZmZlY3RpdmVseS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gZW5zdXJlIElQVlMgaXMgZW5hYmxlZC4gSSdsbCB1c2UgYGdyZXBwZXJgIGFuZCBsb29rIGZvciBgSVBfVlNgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSBjb3JyZWN0IGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6Mjk6MTAuNzk2OTA2MjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDIxNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToxMC44NjEzMzU2ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzczMzYwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBDb25maWd1cmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBJUFZTIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUuIE15IG1haW4gcG9pbnQgb2YgcmVmZXJlbmNlIGlzIHRoZSBgSVBfVlNgIGNvbmZpZyDigJMgdGhhdCdzIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIG9yIGFkZGVkIHJlbGF0ZWQgdG8gdGhpcy5cblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgbW9kaWZpY2F0aW9ucywgaXQgc2VlbXMgdGhlIGZvY3VzIGlzIG9uIGNvbm5lY3Rpb24gdGFibGUgbWFuYWdlbWVudDogYGNvbm5fdGFiX2xvY2tgLCBgaXBfdnNfY29ubl9oYXNoYCwgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGFuZCBgaXBfdnNfYmluZF9kZXN0YC4gVGhlc2UgYXJlIGFsbCBmYWlybHkgbG93LWxldmVsLCBlc3NlbnRpYWwgZnVuY3Rpb25zLiBUaGVuLCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uIOKAkyBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLiBPa2F5LCB0aGF0J3MgaW50ZXJlc3Rpbmc7IEknbGwgZmxhZyB0aGF0IGFzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBgaXBfdnNfYmluZF9kZXN0YCBhbmQgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAgYXJlIGFsc28gd29ydGggY2xvc2VyIGluc3BlY3Rpb24uXG5cbk5vdywgYmV5b25kIHRoZSBjb3JlIGBJUF9WU2AgY29uZmlnLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWxzbyBpbXBvcnRhbnQ/IEl0IGxvb2tzIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAgYW5kIGBJUF9WU19QUk9UT19VRFBgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gYWRkIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIHRob3NlIHByb3RvY29scywgdGhvdWdoIGBJUF9WU2AgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBvbmUuIFdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGluIHRoZSBrZXJuZWwsIGBJUF9WU2AgaXMgYSBtZW51Y29uZmlnLCBzbyBpdCdzIGBDT05GSUdfSVBfVlNgIHRoYXQgSSBzaG91bGQgYmUgbG9va2luZyBmb3IuXG5cbkknbGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY2AgYmVjYXVzZSBpdCdzIGEgbmV3IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjE2LjIzNDY5OTE2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM5MDMwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Nz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzkyLS8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc5MzpzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03OTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDkwPWlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIyLVxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMzpcXHRcXHRcXHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEyNC1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjE2LjM2ODYxMTQ3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDg5NTQ3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyB0aGUgSVBWUyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIGhvdyBpdCBkZWFscyB3aXRoIGRvdWJsZSBoYXNoaW5nIGFuZCBjaGFuZ2VzIHRvIHRoZSBmb3J3YXJkaW5nIG1ldGhvZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIGZvciB2dWxuZXJhYmlsaXRpZXMuIENvbm5lY3Rpb24gdHJhY2tpbmcgaXMgYSBjb21wbGV4IGJlYXN0LCBhbmQgY2hhbmdlcyB0byBpdHMgY29yZSBjb21wb25lbnRzIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMsICpkZWZpbml0ZWx5KiBmdXp6IHRoaXMuIFRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3dzLCBvZmYtYnktb25lIGVycm9ycywgb3IgZXZlbiBtb3JlIHN1YnRsZSBsb2dpYyBmbGF3cyB3aXRoaW4gY29ubmVjdGlvbiBtYW5hZ2VtZW50IGlzIGhpZ2guIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIGJ1aWx0IGludG8gdGhlIHByZXZpb3VzIHZlcnNpb25zIGFyZSBtYWludGFpbmVkIGFmdGVyIHRoaXMgY2hhbmdlLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgdG8gdGFyZ2V0LiBUaGUgc3ltYm9scyB0aGF0IGp1bXAgb3V0IGF0IG1lIGFzIHBvdGVudGlhbCBob3RzcG90cyBhcmUgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX2JpbmRfZGVzdGAsIGFuZCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YC4gVGhlc2UgZnVuY3Rpb25zIGxpa2VseSBoYW5kbGUgY3JpdGljYWwgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGZvcndhcmRpbmcgcnVsZXMsIGRlc3RpbmF0aW9uIGJpbmRpbmcsIGFuZCBwb3J0IGluZm9ybWF0aW9uIOKAkyB0aGUga2luZCBvZiBwbGFjZXMgd2hlcmUgdGhpbmdzIGNhbiBnbyBzaWRld2F5cyBpZiBpbnB1dCB2YWxpZGF0aW9uIGlzbid0IHJvY2sgc29saWQuIEknbGwgbmVlZCB0byBkZXZlbG9wIGZ1enppbmcgc3RyYXRlZ2llcyBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uIGVudHJ5IHBvaW50cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy5cblxuTGV0IG1lIGFsc28gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbmVlZGVkIHRvIGJ1aWxkIHRoaXMgZnVuY3Rpb24uIEkgc2VlIElQX1ZTIGlzIG5lZWRlZC4gT2theS4gTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlncyB0aGF0IG1pZ2h0IGFsc28gYmUgcmVsZXZhbnQgdG8gZnVsbHkgZW5hYmxlIHRoZSBpbXBhY3RlZCBjb2RlIHBhdGhzLiBXZSBjYW4ndCBsZXQgYSBjb25maWd1cmF0aW9uIGlzc3VlIGJsb2NrIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSByZWxhdGVkIEtjb25maWcgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToyMC42Nzc1Njk3NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDYyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToyMC43ODEwNDA4MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgyODAzNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBob3cgSSdsbCBzdW1tYXJpemUgdGhlIHRleHQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKlNldHRpbmcgdGhlIFN0YWdlIGZvciBBbmFseXNpcyoqXG5cbkFscmlnaHQsIEkgc2VlIHRoZSB0YXNrIGlzIHRvIGVzc2VudGlhbGx5IHN1bW1hcml6ZSBhIHRob3VnaHQgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSDigJMgbm90IGp1c3QgdG8gcHJvdmlkZSBhIHNpbXBsZSByZWd1cmdpdGF0aW9uIG9mIHdoYXQncyAqc2FpZCosIGJ1dCB0byBjYXB0dXJlIHRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBhbmQgaW1wbGljYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbnRleHQgZm9yIGZ1dHVyZSByZXN1bHRzLiBUaGlzIGluaXRpYWwgc3RlcCwgc2V0dGluZyB0aGUgcGFyYW1ldGVycywgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSWYgSSBkb27igJl0IGRlZmluZSB0aGUgaW5pdGlhbCBjb25kaXRpb25zIEkgd29u4oCZdCBnZXQgdGhlIGNvcnJlY3QgcmVzdWx0cyBhdCB0aGUgZW5kLiBJIGFtIGdvaW5nIHRvIG1ha2UgY2VydGFpbiBJIGRvY3VtZW50IHRoZXNlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDYsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToyNC4yNjM4NTA4MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI2NzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 02:14:28 +0000 UTC FinishedAt: 2026-07-01 02:29:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "b260c97930bc62713d246670677ade2190f0ff87", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "b260c97930bc62713d246670677ade2190f0ff87", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "d1bc74bc-0c61-40df-8988-a9400375cd73" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_conn_change_fwd_mask", "ip_vs_bind_dest", "ip_vs_conn_fill_cport" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdlMjAxZTNlOGZiMzVhYmU2ZGIzYmY0MDQwMzA1OGZmMGNlN2U2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDI6Mjk6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IGU3NmE3M2QxODNkNTMxLi41M2E3ZGUzYTlmMmJmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSAmIzQzOzcwLDQ3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcbiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZVxuICAqIC0gaGFzaCB0YWJsZSByZXNpemUgd29ya3MgbGlrZSByZWhhc2ggYnV0IGFsd2F5cyByZWhhc2hlcyBpbnRvIG5ldyB0YWJsZVxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXG4mIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXG4mIzQzOyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4mIzQzOy8qKlxuJiM0MzsgICogY29ubl90YWJfbG9jayAtIExvY2sgY29ubl90YWIgYnVja2V0cyBmb3IgY29ubiBoYXNoL3VuaGFzaCwgbm90IGZvciByZWhhc2hcbiYjNDM7ICAqIEB0Olx0XHRoYXNoIHRhYmxlIGZvciBobjBcbiYjNDM7ICAqIEB0MjpcdGhhc2ggdGFibGUgZm9yIGhuMVxuJiM0MzsgICogQGNwOlx0Y29ubmVjdGlvblxuJiM0MzsgICogQGhhc2hfa2V5Olx0aGFzaCBrZXkgZm9yIGhuMFxuJiM0MzsgICogQGhhc2hfa2V5MjpcdGhhc2gga2V5IGZvciBobjFcbiYjNDM7ICAqIEB1c2UyOlx0dXNpbmcgaG4xIChkb3VibGUgaGFzaGluZykgYmFzZWQgb24gdGhlIGZvcndhcmRpbmcgbWV0aG9kXG4mIzQzOyAgKiBAbmV3X2hhc2g6XHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBuZXdfaGFzaDI6XHRtb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbiYjNDM7ICAqIEBoZWFkX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMFxuJiM0MzsgICogQGhlYWQyX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxuJiM0MzsgICpcbiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczpcbiYjNDM7ICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcbiYjNDM7ICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXG4mIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcbiYjNDM7ICAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxuLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4tXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4tXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbiYjNDM7Y29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuJiM0MztcdCAgICAgIHUzMiBoYXNoX2tleSwgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxuJiM0MztcdCAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LFxuJiM0MztcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxuIHtcbiBcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XG4gXHR1MzIgaGFzaF9rZXlfbmV3LCBoYXNoX2tleV9uZXcyO1xuLVx0c3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0O1xuIFx0dTMyIGlkeCwgaWR4MjtcbiBcbiBcdGlkeCA9IGhhc2hfa2V5IFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRpZiAodXNlMilcbi1cdFx0aWR4MiA9IGhhc2hfa2V5MiBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuLVx0ZWxzZVxuLVx0XHRpZHgyID0gaWR4O1xuJiM0MztcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQtXHUwMDNlbWFzaztcbiYjNDM7XHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcbiYjNDM7XHQgKiBpcyBmb3IgbmV3IHRhYmxlXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ld19oYXNoMiBcdTAwMjZcdTAwMjYgdXNlMiBcdTAwMjZcdTAwMjYgdCAhPSB0MilcbiYjNDM7XHRcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XG4mIzQzO1xuIFx0aWYgKCFuZXdfaGFzaCkge1xuIFx0XHQvKiBXZSBuZWVkIHRvIGxvY2sgdGhlIGJ1Y2tldCBpbiB0aGUgcmlnaHQgdGFibGUgKi9cbiBcbkBAIC0xMDMsMjQgJiM0MzsxMjUsMTkgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuIFx0XHRcdGlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbiBcdFx0fVxuLVx0XHRpZiAodXNlMikge1xuLVx0XHRcdGlmICghaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbi1cdFx0XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4tXHRcdFx0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbi1cdFx0XHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2s7XG4tXHRcdFx0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZHgyID0gaWR4O1xuLVx0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyIFx1MDAyNlx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbiYjNDM7XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbiYjNDM7XHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2s7XG4mIzQzO1x0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuIFx0fVxuIFxuJiM0MztcdGlmICghdXNlMilcbiYjNDM7XHRcdGlkeDIgPSBpZHg7XG4gXHRoZWFkID0gdC1cdTAwM2VidWNrZXRzICYjNDM7IChoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrKTtcbiBcdGhlYWQyID0gdXNlMiA/IHQyLVx1MDAzZWJ1Y2tldHMgJiM0MzsgKGhhc2hfa2V5MiBcdTAwMjYgdDItXHUwMDNlbWFzaykgOiBoZWFkO1xuIFxuLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0LyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi9cbi1cbiBcdGlmIChpZHggXHUwMDNjPSBpZHgyKSB7XG4gXHRcdGhsaXN0X2JsX2xvY2soaGVhZCk7XG4gXHRcdGlmIChoZWFkICE9IGhlYWQyKVxuQEAgLTEzMCwxNiAmIzQzOzE0NywyMiBAQCBjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LFxuIFx0XHRobGlzdF9ibF9sb2NrKGhlYWQpO1xuIFx0fVxuIFx0aWYgKCFuZXdfaGFzaCkge1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VkO1xuJiM0MztcbiBcdFx0LyogRW5zdXJlIGhhc2hfa2V5IGlzIHJlYWQgdW5kZXIgbG9jayAqL1xuIFx0XHRoYXNoX2tleV9uZXcgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbi1cdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcdFx0Y2hhbmdlZCA9IGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldztcbiYjNDM7XHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFx0Y2hhbmdlZCB8PSBoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XG4mIzQzO1x0XHR9XG4gXHRcdC8qIEhhc2ggY2hhbmdlZCA/ICovXG4tXHRcdGlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHxcbi1cdFx0ICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiBcdTAwMjZcdTAwMjYgdXNlMikpIHtcbiYjNDM7XHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgJiM0MzsxNzgsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29ubl90YWJfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLFxuIFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdGhsaXN0X2JsX3VubG9jayhoZWFkMik7XG4gXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XG4tXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBfdnNfY29ubl9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuQEAgLTI2OCw4ICYjNDM7MjkwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0dXNlMiA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y29ubl90YWJfbG9jayh0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiYjNDM7XHRjb25uX3RhYl9sb2NrKHQsIHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCB0cnVlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiBcbiBcdGNwLVx1MDAzZWZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7XG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSwgaGFzaF9rZXkpO1xuQEAgLTI4MCw2ICYjNDM7MzAzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuJiM0MztcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFx0cmV0ID0gMTtcbiBcbiBcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXG5AQCAtMzA2LDE4ICYjNDM7MzMwLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxuJiM0MztcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcbiBcdFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cbi1cdFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuJiM0MztcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHJlZmNvdW50X2RlY19pZl9vbmUoXHUwMDI2Y3AtXHUwMDNlcmVmY250KSkge1xuIFx0XHRcdGhsaXN0X2JsX2RlbF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4wLm5vZGUpO1xuIFx0XHRcdGlmICh1c2UyKVxuIFx0XHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG5AQCAtMzI4LDYgJiM0MzszNTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFxuIFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiBcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02ODYsNiAmIzQzOzcxMywxNiBAQCB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcbiBcdC8qIFByb3RlY3QgdGhlIGNwLVx1MDAzZWZsYWdzIG1vZGlmaWNhdGlvbiAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuIFxuJiM0MztcdC8qIFJlY2hlY2sgdGhlIGZvcndhcmRpbmcgbWV0aG9kIHVuZGVyIGxvY2sgKi9cbiYjNDM7XHRpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0dXNlMiA9ICF1c2UyO1xuJiM0MztcdFx0aWYgKGRpcikge1xuJiM0MztcdFx0XHRkaXItLTtcbiYjNDM7XHRcdFx0Z290byBuZXh0X2RpcjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXG4gXHQgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLlxuIFx0ICovXG5AQCAtNzUyLDYgJiM0Mzs3ODksNjAgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovXG4mIzQzO3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gY3AtXHUwMDNlaXB2cztcbiYjNDM7XHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xuJiM0MztcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbiYjNDM7XHRzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7XG4mIzQzO1xuJiM0MztcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbiYjNDM7XHRpZiAoKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XG4mIzQzO1x0ICAgIC8qIE5vIGNoYW5nZSBpbiBkb3VibGUgaGFzaGluZyA/ICovXG4mIzQzO1x0ICAgICEoKGNwLVx1MDAzZWZsYWdzIF4gbmV3X2ZsYWdzKSBcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSkge1xuJiM0MztcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBuZXdfZmxhZ3M7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy1cdTAwM2Vjb25uX3RhYik7XG4mIzQzO1x0aWYgKGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xuJiM0MztcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdGhhc2hfa2V5MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIGZhbHNlIC8qIG5ld19oYXNoMiAqLyxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XG4mIzQzO1x0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXG4mIzQzO1xuJiM0MztcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbiYjNDM7XG4mIzQzO1x0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LVx1MDAzZW5ld190YmwpO1xuJiM0MztcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuJiM0MztcdFx0aGFzaF9rZXkyID0gaXBfdnNfcmh0X2J1aWxkX2hhc2hfa2V5KHQyLCBoYXNoMik7XG4mIzQzO1xuJiM0MztcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4mIzQzO1x0XHRjb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuJiM0MztcdFx0XHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgdHJ1ZSAvKiBuZXdfaGFzaDIgKi8sXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbiYjNDM7XG4mIzQzO1x0XHRXUklURV9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSwgaGFzaF9rZXkyKTtcbiYjNDM7XHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuJiM0MztcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4mIzQzO1xuJiM0MztcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiAmIzQzOzExMDUsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdGZsYWdzID0gY3AtXHUwMDNlZmxhZ3M7XG4gXHQvKiBCaW5kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFuZCBpdHMgY29ycmVzcG9uZGluZyB0cmFuc21pdHRlciAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU1lOQykge1xuJiM0MztcdFx0LyogU3luY2VkIGNvbm5zIGFyZSBoYXNoZWQsIHNvIHRoZXkgY2FuIG5vdCBnZXQgdGhpcyBmbGFnICovXG4mIzQzO1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuJiM0MztcbiBcdFx0LyogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHRlbXBsYXRlIGFuZCBpcyBjcmVhdGVkXG4gXHRcdCAqIGJ5IHN5bmMsIHByZXNlcnZlIHRoZSBhY3Rpdml0eSBmbGFnLlxuIFx0XHQgKi9cbkBAIC0xMDIxLDkgJiM0MzsxMTE1LDE4IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0XHRcdGNvbm5fZmxhZ3MgXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xuIFx0XHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xuIFx0XHRmbGFncyBcdTAwMjY9IH4oSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgSVBfVlNfQ09OTl9GX05PT1VUUFVUKTtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHQvKiBDaGFuZ2luZyBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gY2FuXG4mIzQzO1x0XHQgKiBoYXBwZW4gb25seSB1bmRlciBsb2Nrc1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpXG4mIzQzO1x0XHRcdGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4mIzQzO1x0XHRjcC1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0fVxuLVx0ZmxhZ3MgfD0gY29ubl9mbGFncztcbi1cdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRjcC1cdTAwM2VkZXN0ID0gZGVzdDtcbiBcbiBcdElQX1ZTX0RCR19CVUYoNywgXCYjMzQ7QmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2JpbmRfZGVzdCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjdlMjAxZTNlOGZiMzVhYmU2ZGIzYmY0MDQwMzA1OGZmMGNlN2U2OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMDI6Mjk6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCBlNzZhNzNkMTgzZDUzMS4uNTNhN2RlM2E5ZjJiZjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtNzAsMjUgJiM0Mzs3MCw0NyBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlwX3ZzX2Nvbm5fY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiAgKiBidWNrZXQgb3IgaGFzaCB0YWJsZQogICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlCiAgKiAtIGJpdCBsb2NrIG9uIGJ1Y2tldCBzZXJpYWxpemVzIGFsbCBvcGVyYXRpb25zIHRoYXQgbW9kaWZ5IHRoZSBjaGFpbgomIzQzOyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlCiYjNDM7ICogbmV3IHRhYmxlCiAgKiAtIGNwLSZndDtsb2NrIHByb3RlY3RzIGNvbm4gZmllbGRzIGxpa2UgY3AtJmd0O2ZsYWdzLCBjcC0mZ3Q7ZGVzdAogICovCiAKLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqLwomIzQzOy8qKgomIzQzOyAgKiBjb25uX3RhYl9sb2NrIC0gTG9jayBjb25uX3RhYiBidWNrZXRzIGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaAomIzQzOyAgKiBAdDoJCWhhc2ggdGFibGUgZm9yIGhuMAomIzQzOyAgKiBAdDI6CWhhc2ggdGFibGUgZm9yIGhuMQomIzQzOyAgKiBAY3A6CWNvbm5lY3Rpb24KJiM0MzsgICogQGhhc2hfa2V5OgloYXNoIGtleSBmb3IgaG4wCiYjNDM7ICAqIEBoYXNoX2tleTI6CWhhc2gga2V5IGZvciBobjEKJiM0MzsgICogQHVzZTI6CXVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZAomIzQzOyAgKiBAbmV3X2hhc2g6CW1vZGUgZm9yIGhuMCwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKQomIzQzOyAgKiBAbmV3X2hhc2gyOgltb2RlIGZvciBobjEsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSkKJiM0MzsgICogQGhlYWRfcmV0OglyZXR1cm5lZCBoZWFkIGZvciBobjAKJiM0MzsgICogQGhlYWQyX3JldDoJcmV0dXJuZWQgaGVhZCBmb3IgaG4xCiYjNDM7ICAqCiYjNDM7ICAqIFdlIHN1cHBvcnQgMyBtb2RlczoKJiM0MzsgICogLSBzZWVrIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIHVuaGFzaGluZwomIzQzOyAgKiAtIGhhc2ggbW9kZSBmb3IgYm90aCBub2RlcywgdXNlZCBmb3IgaGFzaGluZwomIzQzOyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWQKJiM0MzsgICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksCi0JICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLAotCSAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KQomIzQzO2Nvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX3JodCAqdDIsIHN0cnVjdCBpcF92c19jb25uICpjcCwKJiM0MzsJICAgICAgdTMyIGhhc2hfa2V5LCB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsCiYjNDM7CSAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LAomIzQzOwkgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldCkKIHsKIAlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyOwogCXUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7Ci0Jc3RydWN0IGlwX3ZzX3JodCAqdDIgPSB0OwogCXUzMiBpZHgsIGlkeDI7CiAKIAlpZHggPSBoYXNoX2tleSAmYW1wOyB0LSZndDttYXNrOwotCWlmICh1c2UyKQotCQlpZHgyID0gaGFzaF9rZXkyICZhbXA7IHQtJmd0O21hc2s7Ci0JZWxzZQotCQlpZHgyID0gaWR4OwomIzQzOwlpZHgyID0gaGFzaF9rZXkyICZhbXA7IHQtJmd0O21hc2s7CiYjNDM7CS8qIEFkdmFuY2UgaWR4MiB3aGVuIG5ld19oYXNoIGlzIG5vdCBzZXQgYnV0IGhhc2hfa2V5MgomIzQzOwkgKiBpcyBmb3IgbmV3IHRhYmxlCiYjNDM7CSAqLwomIzQzOwlpZiAobmV3X2hhc2gyICZhbXA7JmFtcDsgdXNlMiAmYW1wOyZhbXA7IHQgIT0gdDIpCiYjNDM7CQlpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLOwomIzQzOwogCWlmICghbmV3X2hhc2gpIHsKIAkJLyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovCiAKQEAgLTEwMywyNCAmIzQzOzEyNSwxOSBAQCBjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIGhhc2hfa2V5LAogCQkJaWR4ID0gaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzazsKIAkJCWlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKIAkJfQotCQlpZiAodXNlMikgewotCQkJaWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkgewotCQkJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCi0JCQkJdDIgPSByY3VfZGVyZWZlcmVuY2UodDItJmd0O25ld190YmwpOwotCQkJCWlkeDIgPSBoYXNoX2tleTIgJmFtcDsgdDItJmd0O21hc2s7Ci0JCQkJaWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlkeDIgPSBpZHg7Ci0JCX0KJiM0MzsJfQomIzQzOwlpZiAodXNlMiAmYW1wOyZhbXA7ICFuZXdfaGFzaDIgJmFtcDsmYW1wOyAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHsKJiM0MzsJCS8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovCiYjNDM7CQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi0mZ3Q7bmV3X3RibCk7CiYjNDM7CQlpZHgyID0gaGFzaF9rZXkyICZhbXA7IHQyLSZndDttYXNrOwomIzQzOwkJaWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSzsKIAl9CiAKJiM0MzsJaWYgKCF1c2UyKQomIzQzOwkJaWR4MiA9IGlkeDsKIAloZWFkID0gdC0mZ3Q7YnVja2V0cyAmIzQzOyAoaGFzaF9rZXkgJmFtcDsgdC0mZ3Q7bWFzayk7CiAJaGVhZDIgPSB1c2UyID8gdDItJmd0O2J1Y2tldHMgJiM0MzsgKGhhc2hfa2V5MiAmYW1wOyB0Mi0mZ3Q7bWFzaykgOiBoZWFkOwogCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCS8qIERvIG5vdCB0b3VjaCBzZXFjb3VudCwgdGhpcyBpcyBhIHNhZmUgb3BlcmF0aW9uICovCi0KIAlpZiAoaWR4ICZsdDs9IGlkeDIpIHsKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKIAkJaWYgKGhlYWQgIT0gaGVhZDIpCkBAIC0xMzAsMTYgJiM0MzsxNDcsMjIgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSwKIAkJaGxpc3RfYmxfbG9jayhoZWFkKTsKIAl9CiAJaWYgKCFuZXdfaGFzaCkgewomIzQzOwkJYm9vbCBjaGFuZ2VkOwomIzQzOwogCQkvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovCiAJCWhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKLQkJaGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKJiM0MzsJCWNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7CiYjNDM7CQlpZiAodXNlMiAmYW1wOyZhbXA7ICFuZXdfaGFzaDIpIHsKJiM0MzsJCQloYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwomIzQzOwkJCWNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7CiYjNDM7CQl9CiAJCS8qIEhhc2ggY2hhbmdlZCA/ICovCi0JCWlmIChoYXNoX2tleSAhPSBoYXNoX2tleV9uZXcgfHwKLQkJICAgIChoYXNoX2tleTIgIT0gaGFzaF9rZXlfbmV3MiAmYW1wOyZhbXA7IHVzZTIpKSB7CiYjNDM7CQlpZiAoY2hhbmdlZCkgewogCQkJaWYgKGhlYWQgIT0gaGVhZDIpCiAJCQkJaGxpc3RfYmxfdW5sb2NrKGhlYWQyKTsKIAkJCWhsaXN0X2JsX3VubG9jayhoZWFkKTsKLQkJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQkJaGFzaF9rZXkgPSBoYXNoX2tleV9uZXc7CiAJCQloYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyOwogCQkJZ290byByZXRyeTsKQEAgLTE1NSw3ICYjNDM7MTc4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbm5fdGFiX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwKIAlpZiAoaGVhZCAhPSBoZWFkMikKIAkJaGxpc3RfYmxfdW5sb2NrKGhlYWQyKTsKIAlobGlzdF9ibF91bmxvY2soaGVhZCk7Ci0JbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKQEAgLTI2OCw4ICYjNDM7MjkwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJdXNlMiA9IGZhbHNlOwogCX0KIAotCWNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sCi0JCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJY29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgdHJ1ZSAvKiBuZXdfaGFzaCAqLywKJiM0MzsJCSAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwogCiAJY3AtJmd0O2ZsYWdzIHw9IElQX1ZTX0NPTk5fRl9IQVNIRUQ7CiAJV1JJVEVfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5LCBoYXNoX2tleSk7CkBAIC0yODAsNiAmIzQzOzMwMyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAJCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSwgaGVhZDIpOwogCiAJY29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmV0ID0gMTsKIAogCS8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovCkBAIC0zMDYsMTggJiM0MzszMzAsMjAgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcCkKIAkJcmV0dXJuIHJlZmNvdW50X2RlY19pZl9vbmUoJmFtcDtjcC0mZ3Q7cmVmY250KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbG9jYWxfYmhfZGlzYWJsZSgpOwogCiAJdCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLSZndDtjb25uX3RhYik7CiAJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiAJaGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLSZndDtobjEuaGFzaF9rZXkpOwogCXVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7CiAKLQljb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLywKLQkJICAgICAgJmFtcDtoZWFkLCAmYW1wO2hlYWQyKTsKJiM0MzsJY29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sCiYjNDM7CQkgICAgICBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiAKIAlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHsKIAkJLyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi8KLQkJaWYgKHJlZmNvdW50X2RlY19pZl9vbmUoJmFtcDtjcC0mZ3Q7cmVmY250KSkgewomIzQzOwkJaWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApICZhbXA7JmFtcDsKJiM0MzsJCSAgICByZWZjb3VudF9kZWNfaWZfb25lKCZhbXA7Y3AtJmd0O3JlZmNudCkpIHsKIAkJCWhsaXN0X2JsX2RlbF9yY3UoJmFtcDtjcC0mZ3Q7aG4wLm5vZGUpOwogCQkJaWYgKHVzZTIpCiAJCQkJaGxpc3RfYmxfZGVsX3JjdSgmYW1wO2NwLSZndDtobjEubm9kZSk7CkBAIC0zMjgsNiAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCiAKIAljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwogCiYjNDM7CWxvY2FsX2JoX2VuYWJsZSgpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKQEAgLTY4Niw2ICYjNDM7NzEzLDE2IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KQogCS8qIFByb3RlY3QgdGhlIGNwLSZndDtmbGFncyBtb2RpZmljYXRpb24gKi8KIAlzcGluX2xvY2tfYmgoJmFtcDtjcC0mZ3Q7bG9jayk7CiAKJiM0MzsJLyogUmVjaGVjayB0aGUgZm9yd2FyZGluZyBtZXRob2QgdW5kZXIgbG9jayAqLwomIzQzOwlpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y3AtJmd0O2xvY2spOwomIzQzOwkJdXNlMiA9ICF1c2UyOwomIzQzOwkJaWYgKGRpcikgewomIzQzOwkJCWRpci0tOwomIzQzOwkJCWdvdG8gbmV4dF9kaXI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAkvKiBMb2NrIHNlcWNvdW50IG9ubHkgZm9yIHRoZSBvbGQgYnVja2V0LCBldmVuIGlmIHdlIGFyZSBvbiBuZXcgdGFibGUKIAkgKiBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIGRlbCBvcGVyYXRpb24sIG5vdCB0aGUgYWRkaW5nLgogCSAqLwpAQCAtNzUyLDYgJiM0Mzs3ODksNjAgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpCiAJCWdvdG8gbmV4dF9kaXI7CiB9CiAKJiM0MzsvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovCiYjNDM7c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC0mZ3Q7aXB2czsKJiM0MzsJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjsKJiM0MzsJdTMyIGhhc2gyLCBoYXNoX2tleSwgaGFzaF9rZXkyOwomIzQzOwlzdHJ1Y3QgaXBfdnNfcmh0ICp0LCAqdDI7CiYjNDM7CiYjNDM7CS8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi8KJiM0MzsJaWYgKChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKSB8fAomIzQzOwkgICAgLyogTm8gY2hhbmdlIGluIGRvdWJsZSBoYXNoaW5nID8gKi8KJiM0MzsJICAgICEoKGNwLSZndDtmbGFncyBeIG5ld19mbGFncykgJmFtcDsgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSkgewomIzQzOwkJY3AtJmd0O2ZsYWdzID0gbmV3X2ZsYWdzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CXQgPSByY3VfZGVyZWZlcmVuY2UoaXB2cy0mZ3Q7Y29ubl90YWIpOwomIzQzOwlpZiAoaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApKSB7CiYjNDM7CQkvKiBTdG9wIGRvdWJsZSBoYXNoaW5nICovCiYjNDM7CQloYXNoX2tleSA9IFJFQURfT05DRShjcC0mZ3Q7aG4wLmhhc2hfa2V5KTsKJiM0MzsJCWhhc2hfa2V5MiA9IFJFQURfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5KTsKJiM0MzsKJiM0MzsJCWNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHRydWUgLyogdXNlMiAqLywKJiM0MzsJCQkgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLAomIzQzOwkJCSAgICAgICZhbXA7aGVhZCwgJmFtcDtoZWFkMik7CiYjNDM7CiYjNDM7CQkvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi8KJiM0MzsJCWhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLSZndDtobjAuaGFzaF9rZXkpOwomIzQzOwkJV1JJVEVfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7CiYjNDM7CQlobGlzdF9ibF9kZWxfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlKTsKJiM0MzsJCWNwLSZndDtmbGFncyA9IG5ld19mbGFnczsKJiM0MzsKJiM0MzsJCWNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBTdGFydCBkb3VibGUgaGFzaGluZyAqLwomIzQzOwomIzQzOwkJaGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtJmd0O2huMC5oYXNoX2tleSk7CiYjNDM7CiYjNDM7CQl0MiA9IHJjdV9kZXJlZmVyZW5jZSh0LSZndDtuZXdfdGJsKTsKJiM0MzsJCWhhc2gyID0gaXBfdnNfY29ubl9oYXNoa2V5X2Nvbm4odDIsIGNwLCB0cnVlKTsKJiM0MzsJCWhhc2hfa2V5MiA9IGlwX3ZzX3JodF9idWlsZF9oYXNoX2tleSh0MiwgaGFzaDIpOwomIzQzOwomIzQzOwkJLyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovCiYjNDM7CQljb25uX3RhYl9sb2NrKHQsIHQyLCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLAomIzQzOwkJCSAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLywKJiM0MzsJCQkgICAgICAmYW1wO2hlYWQsICZhbXA7aGVhZDIpOwomIzQzOwomIzQzOwkJV1JJVEVfT05DRShjcC0mZ3Q7aG4xLmhhc2hfa2V5LCBoYXNoX2tleTIpOwomIzQzOwkJY3AtJmd0O2ZsYWdzID0gbmV3X2ZsYWdzOwomIzQzOwkJaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCZhbXA7Y3AtJmd0O2huMS5ub2RlLCBoZWFkMik7CiYjNDM7CiYjNDM7CQljb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC0mZ3Q7c2l6ZSAqLwogc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpCiB7CkBAIC0xMDE0LDYgJiM0MzsxMTA1LDkgQEAgaXBfdnNfYmluZF9kZXN0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCiAJZmxhZ3MgPSBjcC0mZ3Q7ZmxhZ3M7CiAJLyogQmluZCB3aXRoIHRoZSBkZXN0aW5hdGlvbiBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgdHJhbnNtaXR0ZXIgKi8KIAlpZiAoZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NZTkMpIHsKJiM0MzsJCS8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqLwomIzQzOwkJY29ubl9mbGFncyAmYW1wOz0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUOwomIzQzOwogCQkvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWQKIAkJICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuCiAJCSAqLwpAQCAtMTAyMSw5ICYjNDM7MTExNSwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCkKIAkJCWNvbm5fZmxhZ3MgJmFtcDs9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7CiAJCS8qIGNvbm5lY3Rpb25zIGluaGVyaXQgZm9yd2FyZGluZyBtZXRob2QgZnJvbSBkZXN0ICovCiAJCWZsYWdzICZhbXA7PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7CiYjNDM7CQlmbGFncyB8PSBjb25uX2ZsYWdzOwomIzQzOwkJLyogQ2hhbmdpbmcgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uIGNhbgomIzQzOwkJICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3MKJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNwLSZndDtmbGFncyAmYW1wOyBJUF9WU19DT05OX0ZfSEFTSEVEKQomIzQzOwkJCWlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKGNwLCBmbGFncyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJY3AtJmd0O2ZsYWdzID0gZmxhZ3M7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmbGFncyB8PSBjb25uX2ZsYWdzOwomIzQzOwkJY3AtJmd0O2ZsYWdzID0gZmxhZ3M7CiAJfQotCWZsYWdzIHw9IGNvbm5fZmxhZ3M7Ci0JY3AtJmd0O2ZsYWdzID0gZmxhZ3M7CiAJY3AtJmd0O2Rlc3QgPSBkZXN0OwogCiAJSVBfVlNfREJHX0JVRig3LCAmIzM0O0JpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVlMgQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHR3ZWFraW5nIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC4gSXQmIzM5O3MgYSBjb25uZWN0aW9uLXRyYWNraW5nIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGlwX3ZzX2Nvbm5gIGhhc2ggdGFibGVzIGFuZCB0aGUgbG9ja2luZyBtZWNoYW5pc20sIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLiBUaGlzIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AgaXMgdGhlbiBiZWluZyB1dGlsaXplZCBpbiBgaXBfdnNfYmluZF9kZXN0YCwgd2hlbiBhIGNvbm5lY3Rpb24gaXMgaGFzaGVkLCB0byBhZGp1c3QgdGhlIGZvcndhcmRpbmcgbWV0aG9kLiBTbywgZnVuZGFtZW50YWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVBWUyBzdWJzeXN0ZW0uCgpHaXZlbiB0aGF0IElQVlMgaXMgYSBjb3JlIGNvbXBvbmVudCwgYSBrZXkgcGFydCBvZiB0aGUgTGludXgga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBmcmVxdWVudGx5IGxldmVyYWdlZCBmb3IgbG9hZCBiYWxhbmNpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUsIHR5cGljYWxseSB2aWEgbmV0bGluayBvciBgc2V0c29ja29wdGAsIGFuZCB0aGUgY2hhbmdlcyBhcmUsIGFzIEkgbWVudGlvbmVkLCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY2AuCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBgQ09ORklHYCBvcHRpb25zIHRoYXQgd2lsbCBhbGxvdyBtZSB0byB0YXJnZXQgdGhpcyBjb2RlIGVmZmVjdGl2ZWx5LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gZW5zdXJlIElQVlMgaXMgZW5hYmxlZC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBhbmQgbG9vayBmb3IgYElQX1ZTYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnYCB0byBpZGVudGlmeSB0aGUgY29ycmVjdCBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBDb25maWd1cmF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIElQVlMgY29uZmlndXJhdGlvbiBhbmQgY29kZS4gTXkgbWFpbiBwb2ludCBvZiByZWZlcmVuY2UgaXMgdGhlIGBJUF9WU2AgY29uZmlnIOKAkyB0aGF0JiMzOTtzIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCBvciBhZGRlZCByZWxhdGVkIHRvIHRoaXMuCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBtb2RpZmljYXRpb25zLCBpdCBzZWVtcyB0aGUgZm9jdXMgaXMgb24gY29ubmVjdGlvbiB0YWJsZSBtYW5hZ2VtZW50OiBgY29ubl90YWJfbG9ja2AsIGBpcF92c19jb25uX2hhc2hgLCBgaXBfdnNfY29ubl91bmxpbmtgLCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCwgYW5kIGBpcF92c19iaW5kX2Rlc3RgLiBUaGVzZSBhcmUgYWxsIGZhaXJseSBsb3ctbGV2ZWwsIGVzc2VudGlhbCBmdW5jdGlvbnMuIFRoZW4sIHRoZXJlJiMzOTtzIGEgbmV3IGZ1bmN0aW9uIOKAkyBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLiBPa2F5LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBmbGFnIHRoYXQgYXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIGBpcF92c19iaW5kX2Rlc3RgIGFuZCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YCBhcmUgYWxzbyB3b3J0aCBjbG9zZXIgaW5zcGVjdGlvbi4KCk5vdywgYmV5b25kIHRoZSBjb3JlIGBJUF9WU2AgY29uZmlnLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWxzbyBpbXBvcnRhbnQ/IEl0IGxvb2tzIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAgYW5kIGBJUF9WU19QUk9UT19VRFBgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gYWRkIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIHRob3NlIHByb3RvY29scywgdGhvdWdoIGBJUF9WU2AgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBvbmUuIFdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGluIHRoZSBrZXJuZWwsIGBJUF9WU2AgaXMgYSBtZW51Y29uZmlnLCBzbyBpdCYjMzk7cyBgQ09ORklHX0lQX1ZTYCB0aGF0IEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yLgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY2AgYmVjYXVzZSBpdCYjMzk7cyBhIG5ldyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDc9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03OTItLyogQ2hhbmdlIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo3OTM6c3RhdGljIHZvaWQgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2soc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgbmV3X2ZsYWdzKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03OTQte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTA5MD1pcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTExMjItXHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMzpcdFx0XHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTI0LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIElQVlMgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCBob3cgaXQgZGVhbHMgd2l0aCBkb3VibGUgaGFzaGluZyBhbmQgY2hhbmdlcyB0byB0aGUgZm9yd2FyZGluZyBtZXRob2QuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgdnVsbmVyYWJpbGl0aWVzLiBDb25uZWN0aW9uIHRyYWNraW5nIGlzIGEgY29tcGxleCBiZWFzdCwgYW5kIGNoYW5nZXMgdG8gaXRzIGNvcmUgY29tcG9uZW50cyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suCgpNeSBmaXJzdCBpbnN0aW5jdCBpcywgKmRlZmluaXRlbHkqIGZ1enogdGhpcy4gVGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIG9mZi1ieS1vbmUgZXJyb3JzLCBvciBldmVuIG1vcmUgc3VidGxlIGxvZ2ljIGZsYXdzIHdpdGhpbiBjb25uZWN0aW9uIG1hbmFnZW1lbnQgaXMgaGlnaC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgYXNzdW1wdGlvbnMgYnVpbHQgaW50byB0aGUgcHJldmlvdXMgdmVyc2lvbnMgYXJlIG1haW50YWluZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIHRhcmdldC4gVGhlIHN5bWJvbHMgdGhhdCBqdW1wIG91dCBhdCBtZSBhcyBwb3RlbnRpYWwgaG90c3BvdHMgYXJlIGBpcF92c19jb25uX2NoYW5nZV9md2RfbWFza2AsIGBpcF92c19iaW5kX2Rlc3RgLCBhbmQgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgaGFuZGxlIGNyaXRpY2FsIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBmb3J3YXJkaW5nIHJ1bGVzLCBkZXN0aW5hdGlvbiBiaW5kaW5nLCBhbmQgcG9ydCBpbmZvcm1hdGlvbiDigJMgdGhlIGtpbmQgb2YgcGxhY2VzIHdoZXJlIHRoaW5ncyBjYW4gZ28gc2lkZXdheXMgaWYgaW5wdXQgdmFsaWRhdGlvbiBpc24mIzM5O3Qgcm9jayBzb2xpZC4gSSYjMzk7bGwgbmVlZCB0byBkZXZlbG9wIGZ1enppbmcgc3RyYXRlZ2llcyBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uIGVudHJ5IHBvaW50cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy4KCkxldCBtZSBhbHNvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCB0byBidWlsZCB0aGlzIGZ1bmN0aW9uLiBJIHNlZSBJUF9WUyBpcyBuZWVkZWQuIE9rYXkuIE5vdywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRoYXQgbWlnaHQgYWxzbyBiZSByZWxldmFudCB0byBmdWxseSBlbmFibGUgdGhlIGltcGFjdGVkIGNvZGUgcGF0aHMuIFdlIGNhbiYjMzk7dCBsZXQgYSBjb25maWd1cmF0aW9uIGlzc3VlIGJsb2NrIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgcmVsYXRlZCBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNDYKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bGwgc3VtbWFyaXplIHRoZSB0ZXh0LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKlNldHRpbmcgdGhlIFN0YWdlIGZvciBBbmFseXNpcyoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgdGFzayBpcyB0byBlc3NlbnRpYWxseSBzdW1tYXJpemUgYSB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUg4oCTIG5vdCBqdXN0IHRvIHByb3ZpZGUgYSBzaW1wbGUgcmVndXJnaXRhdGlvbiBvZiB3aGF0JiMzOTtzICpzYWlkKiwgYnV0IHRvIGNhcHR1cmUgdGhlIHVuZGVybHlpbmcgcmVhc29uaW5nIGFuZCBpbXBsaWNhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIGVzdGFibGlzaCB0aGUgY29udGV4dCBmb3IgZnV0dXJlIHJlc3VsdHMuIFRoaXMgaW5pdGlhbCBzdGVwLCBzZXR0aW5nIHRoZSBwYXJhbWV0ZXJzLCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJZiBJIGRvbuKAmXQgZGVmaW5lIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgSSB3b27igJl0IGdldCB0aGUgY29ycmVjdCByZXN1bHRzIGF0IHRoZSBlbmQuIEkgYW0gZ29pbmcgdG8gbWFrZSBjZXJ0YWluIEkgZG9jdW1lbnQgdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2smIzM0OywKICAgICYjMzQ7aXBfdnNfYmluZF9kZXN0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2Nvbm5fZmlsbF9jcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2JpbmRfZGVzdCYjMzQ7LAogICAgJiMzNDtpcF92c19jb25uX2ZpbGxfY3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjA0LjY3NTYwMDEwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njg2NTQyNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6Mjk6MDQuNjc1NjE2NjI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM2NDkzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyN2UyMDFlM2U4ZmIzNWFiZTZkYjNiZjQwNDAzMDU4ZmYwY2U3ZTY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMDI6Mjk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcXG5pbmRleCBlNzZhNzNkMTgzZDUzMS4uNTNhN2RlM2E5ZjJiZjkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcXG5AQCAtNzAsMjUgKzcwLDQ3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaXBfdnNfY29ubl9jYWNoZXAgX19yZWFkX21vc3RseTtcXG4gICogYnVja2V0IG9yIGhhc2ggdGFibGVcXG4gICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlXFxuICAqIC0gYml0IGxvY2sgb24gYnVja2V0IHNlcmlhbGl6ZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIGNoYWluXFxuKyAqIC0gb24gcmVzaXplLCBidWNrZXQgZnJvbSB0aGUgb2xkIHRhYmxlIGlzIGxvY2tlZCBiZWZvcmUgYnVja2V0IGZyb20gdGhlXFxuKyAqIG5ldyB0YWJsZVxcbiAgKiAtIGNwLVxcdTAwM2Vsb2NrIHByb3RlY3RzIGNvbm4gZmllbGRzIGxpa2UgY3AtXFx1MDAzZWZsYWdzLCBjcC1cXHUwMDNlZGVzdFxcbiAgKi9cXG4gXFxuLS8qIExvY2sgY29ubl90YWIgYnVja2V0IGZvciBjb25uIGhhc2gvdW5oYXNoLCBub3QgZm9yIHJlaGFzaCAqL1xcbisvKipcXG4rICAqIGNvbm5fdGFiX2xvY2sgLSBMb2NrIGNvbm5fdGFiIGJ1Y2tldHMgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoXFxuKyAgKiBAdDpcXHRcXHRoYXNoIHRhYmxlIGZvciBobjBcXG4rICAqIEB0MjpcXHRoYXNoIHRhYmxlIGZvciBobjFcXG4rICAqIEBjcDpcXHRjb25uZWN0aW9uXFxuKyAgKiBAaGFzaF9rZXk6XFx0aGFzaCBrZXkgZm9yIGhuMFxcbisgICogQGhhc2hfa2V5MjpcXHRoYXNoIGtleSBmb3IgaG4xXFxuKyAgKiBAdXNlMjpcXHR1c2luZyBobjEgKGRvdWJsZSBoYXNoaW5nKSBiYXNlZCBvbiB0aGUgZm9yd2FyZGluZyBtZXRob2RcXG4rICAqIEBuZXdfaGFzaDpcXHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcXG4rICAqIEBuZXdfaGFzaDI6XFx0bW9kZSBmb3IgaG4xLCBoYXNoIG5vZGUgKHRydWUpIG9yIHNlZWsgbm9kZSAoZmFsc2UpXFxuKyAgKiBAaGVhZF9yZXQ6XFx0cmV0dXJuZWQgaGVhZCBmb3IgaG4wXFxuKyAgKiBAaGVhZDJfcmV0OlxcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxcbisgICpcXG4rICAqIFdlIHN1cHBvcnQgMyBtb2RlczpcXG4rICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcXG4rICAqIC0gaGFzaCBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciBoYXNoaW5nXFxuKyAgKiAtIHNlZWsgaG4wIGFuZCBoYXNoIGhuMSwgdXNlZCB3aGVuIGZvcndhcmRpbmcgbWV0aG9kIGlzIGNoYW5nZWRcXG4rICAqL1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWRcXG4tY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4tXFx0ICAgICAgdTMyIGhhc2hfa2V5MiwgYm9vbCB1c2UyLCBib29sIG5ld19oYXNoLFxcbi1cXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcXG4rY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfcmh0ICp0Miwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbitcXHQgICAgICB1MzIgaGFzaF9rZXksIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcXG4rXFx0ICAgICAgYm9vbCBuZXdfaGFzaDIsIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZF9yZXQsXFxuK1xcdCAgICAgIHN0cnVjdCBobGlzdF9ibF9oZWFkICoqaGVhZDJfcmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBobGlzdF9ibF9oZWFkICpoZWFkLCAqaGVhZDI7XFxuIFxcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XFxuLVxcdHN0cnVjdCBpcF92c19yaHQgKnQyID0gdDtcXG4gXFx0dTMyIGlkeCwgaWR4MjtcXG4gXFxuIFxcdGlkeCA9IGhhc2hfa2V5IFxcdTAwMjYgdC1cXHUwMDNlbWFzaztcXG4tXFx0aWYgKHVzZTIpXFxuLVxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGlkeDIgPSBpZHg7XFxuK1xcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbitcXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcXG4rXFx0ICogaXMgZm9yIG5ldyB0YWJsZVxcbitcXHQgKi9cXG4rXFx0aWYgKG5ld19oYXNoMiBcXHUwMDI2XFx1MDAyNiB1c2UyIFxcdTAwMjZcXHUwMDI2IHQgIT0gdDIpXFxuK1xcdFxcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuK1xcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuIFxcdFxcdC8qIFdlIG5lZWQgdG8gbG9jayB0aGUgYnVja2V0IGluIHRoZSByaWdodCB0YWJsZSAqL1xcbiBcXG5AQCAtMTAzLDI0ICsxMjUsMTkgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4gXFx0XFx0XFx0aWR4ID0gaGFzaF9rZXkgXFx1MDAyNiB0LVxcdTAwM2VtYXNrO1xcbiBcXHRcXHRcXHRpZHggfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKHVzZTIpIHtcXG4tXFx0XFx0XFx0aWYgKCFpcF92c19yaHRfc2FtZV90YWJsZSh0MiwgaGFzaF9rZXkyKSkge1xcbi1cXHRcXHRcXHRcXHQvKiBJdCBpcyBhbHJlYWR5IG1vdmVkIHRvIG5ldyB0YWJsZSAqL1xcbi1cXHRcXHRcXHRcXHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cXHUwMDNlbmV3X3RibCk7XFxuLVxcdFxcdFxcdFxcdGlkeDIgPSBoYXNoX2tleTIgXFx1MDAyNiB0Mi1cXHUwMDNlbWFzaztcXG4tXFx0XFx0XFx0XFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRpZHgyID0gaWR4O1xcbi1cXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKHVzZTIgXFx1MDAyNlxcdTAwMjYgIW5ld19oYXNoMiBcXHUwMDI2XFx1MDAyNiAhaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcXG4rXFx0XFx0LyogSXQgaXMgYWxyZWFkeSBtb3ZlZCB0byBuZXcgdGFibGUgKi9cXG4rXFx0XFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodDItXFx1MDAzZW5ld190YmwpO1xcbitcXHRcXHRpZHgyID0gaGFzaF9rZXkyIFxcdTAwMjYgdDItXFx1MDAzZW1hc2s7XFxuK1xcdFxcdGlkeDIgfD0gSVBfVlNfUkhUX1RBQkxFX0lEX01BU0s7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghdXNlMilcXG4rXFx0XFx0aWR4MiA9IGlkeDtcXG4gXFx0aGVhZCA9IHQtXFx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkgXFx1MDAyNiB0LVxcdTAwM2VtYXNrKTtcXG4gXFx0aGVhZDIgPSB1c2UyID8gdDItXFx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkyIFxcdTAwMjYgdDItXFx1MDAzZW1hc2spIDogaGVhZDtcXG4gXFxuLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4tXFx0LyogRG8gbm90IHRvdWNoIHNlcWNvdW50LCB0aGlzIGlzIGEgc2FmZSBvcGVyYXRpb24gKi9cXG4tXFxuIFxcdGlmIChpZHggXFx1MDAzYz0gaWR4Mikge1xcbiBcXHRcXHRobGlzdF9ibF9sb2NrKGhlYWQpO1xcbiBcXHRcXHRpZiAoaGVhZCAhPSBoZWFkMilcXG5AQCAtMTMwLDE2ICsxNDcsMjIgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcXG4gXFx0XFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcXG4gXFx0fVxcbiBcXHRpZiAoIW5ld19oYXNoKSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlZDtcXG4rXFxuIFxcdFxcdC8qIEVuc3VyZSBoYXNoX2tleSBpcyByZWFkIHVuZGVyIGxvY2sgKi9cXG4gXFx0XFx0aGFzaF9rZXlfbmV3ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbi1cXHRcXHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXHRcXHRjaGFuZ2VkID0gaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3O1xcbitcXHRcXHRpZiAodXNlMiBcXHUwMDI2XFx1MDAyNiAhbmV3X2hhc2gyKSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuK1xcdFxcdFxcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGhhc2hfa2V5X25ldzIgPSBoYXNoX2tleTI7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogSGFzaCBjaGFuZ2VkID8gKi9cXG4tXFx0XFx0aWYgKGhhc2hfa2V5ICE9IGhhc2hfa2V5X25ldyB8fFxcbi1cXHRcXHQgICAgKGhhc2hfa2V5MiAhPSBoYXNoX2tleV9uZXcyIFxcdTAwMjZcXHUwMDI2IHVzZTIpKSB7XFxuK1xcdFxcdGlmIChjaGFuZ2VkKSB7XFxuIFxcdFxcdFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRcXHRcXHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcXG4gXFx0XFx0XFx0aGFzaF9rZXkyID0gaGFzaF9rZXlfbmV3MjtcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG5AQCAtMTU1LDcgKzE3OCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXFxuIFxcdGlmIChoZWFkICE9IGhlYWQyKVxcbiBcXHRcXHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xcbiBcXHRobGlzdF9ibF91bmxvY2soaGVhZCk7XFxuLVxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuQEAgLTI2OCw4ICsyOTAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBpcF92c19jb25uX2hhc2goc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXHRcXHR1c2UyID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuLVxcdFxcdCAgICAgIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbitcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXFxuK1xcdFxcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4gXFxuIFxcdGNwLVxcdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xcbiBcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcXG5AQCAtMjgwLDYgKzMwMyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdGhsaXN0X2JsX2FkZF9oZWFkX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XFxuIFxcbiBcXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gXFx0cmV0ID0gMTtcXG4gXFxuIFxcdC8qIFNjaGVkdWxlIHJlc2l6aW5nIGlmIGxvYWQgaW5jcmVhc2VzICovXFxuQEAgLTMwNiwxOCArMzMwLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jb25uX3VubGluayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuIFxcdFxcdHJldHVybiByZWZjb3VudF9kZWNfaWZfb25lKFxcdTAwMjZjcC1cXHUwMDNlcmVmY250KTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXG4gXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuIFxcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjAuaGFzaF9rZXkpO1xcbiBcXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXFx1MDAzZWhuMS5oYXNoX2tleSk7XFxuIFxcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XFxuIFxcbi1cXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcXG4tXFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIGZhbHNlIC8qIG5ld19oYXNoICovLFxcbitcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sIFxcdTAwMjZoZWFkLCBcXHUwMDI2aGVhZDIpO1xcbiBcXG4gXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9IQVNIRUQpIHtcXG4gXFx0XFx0LyogRGVjcmVhc2UgcmVmY250IGFuZCB1bmxpbmsgY29ubiBvbmx5IGlmIHdlIGFyZSBsYXN0IHVzZXIgKi9cXG4tXFx0XFx0aWYgKHJlZmNvdW50X2RlY19pZl9vbmUoXFx1MDAyNmNwLVxcdTAwM2VyZWZjbnQpKSB7XFxuK1xcdFxcdGlmICh1c2UyID09IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcXHUwMDI2Y3AtXFx1MDAzZXJlZmNudCkpIHtcXG4gXFx0XFx0XFx0aGxpc3RfYmxfZGVsX3JjdShcXHUwMDI2Y3AtXFx1MDAzZWhuMC5ub2RlKTtcXG4gXFx0XFx0XFx0aWYgKHVzZTIpXFxuIFxcdFxcdFxcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuQEAgLTMyOCw2ICszNTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiBcXG4gXFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcXG4gXFxuK1xcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTY4Niw2ICs3MTMsMTYgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuIFxcdC8qIFByb3RlY3QgdGhlIGNwLVxcdTAwM2VmbGFncyBtb2RpZmljYXRpb24gKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjcC1cXHUwMDNlbG9jayk7XFxuIFxcbitcXHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXFxuK1xcdGlmICh1c2UyICE9IGlwX3ZzX2Nvbm5fdXNlX2hhc2gyKGNwKSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3AtXFx1MDAzZWxvY2spO1xcbitcXHRcXHR1c2UyID0gIXVzZTI7XFxuK1xcdFxcdGlmIChkaXIpIHtcXG4rXFx0XFx0XFx0ZGlyLS07XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9kaXI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0LyogTG9jayBzZXFjb3VudCBvbmx5IGZvciB0aGUgb2xkIGJ1Y2tldCwgZXZlbiBpZiB3ZSBhcmUgb24gbmV3IHRhYmxlXFxuIFxcdCAqIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgZGVsIG9wZXJhdGlvbiwgbm90IHRoZSBhZGRpbmcuXFxuIFxcdCAqL1xcbkBAIC03NTIsNiArNzg5LDYwIEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxcbiBcXHRcXHRnb3RvIG5leHRfZGlyO1xcbiB9XFxuIFxcbisvKiBDaGFuZ2UgZm9yd2FyZGluZyBtZXRob2QgZm9yIGhhc2hlZCBjb25uICovXFxuK3N0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrKHN0cnVjdCBpcF92c19jb25uICpjcCwgdTMyIG5ld19mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IGNwLVxcdTAwM2VpcHZzO1xcbitcXHRzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaGVhZCwgKmhlYWQyO1xcbitcXHR1MzIgaGFzaDIsIGhhc2hfa2V5LCBoYXNoX2tleTI7XFxuK1xcdHN0cnVjdCBpcF92c19yaHQgKnQsICp0MjtcXG4rXFxuK1xcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cXG4rXFx0aWYgKChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpIHx8XFxuK1xcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xcbitcXHQgICAgISgoY3AtXFx1MDAzZWZsYWdzIF4gbmV3X2ZsYWdzKSBcXHUwMDI2IElQX1ZTX0NPTk5fRl9GV0RfTUFTSykpIHtcXG4rXFx0XFx0Y3AtXFx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVxcdTAwM2Vjb25uX3RhYik7XFxuK1xcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcXG4rXFx0XFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0aGFzaF9rZXkyID0gUkVBRF9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXkpO1xcbitcXG4rXFx0XFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxcbitcXHRcXHRcXHQgICAgICBmYWxzZSAvKiBuZXdfaGFzaCAqLywgZmFsc2UgLyogbmV3X2hhc2gyICovLFxcbitcXHRcXHRcXHQgICAgICBcXHUwMDI2aGVhZCwgXFx1MDAyNmhlYWQyKTtcXG4rXFxuK1xcdFxcdC8qIEtlZXAgYm90aCBoYXNoIGtleXMgaW4gc2FtZSB0YWJsZSAqL1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFx0XFx0V1JJVEVfT05DRShjcC1cXHUwMDNlaG4xLmhhc2hfa2V5LCBoYXNoX2tleSk7XFxuK1xcdFxcdGhsaXN0X2JsX2RlbF9yY3UoXFx1MDAyNmNwLVxcdTAwM2VobjEubm9kZSk7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFN0YXJ0IGRvdWJsZSBoYXNoaW5nICovXFxuK1xcbitcXHRcXHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cXHUwMDNlaG4wLmhhc2hfa2V5KTtcXG4rXFxuK1xcdFxcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQtXFx1MDAzZW5ld190YmwpO1xcbitcXHRcXHRoYXNoMiA9IGlwX3ZzX2Nvbm5faGFzaGtleV9jb25uKHQyLCBjcCwgdHJ1ZSk7XFxuK1xcdFxcdGhhc2hfa2V5MiA9IGlwX3ZzX3JodF9idWlsZF9oYXNoX2tleSh0MiwgaGFzaDIpO1xcbitcXG4rXFx0XFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXFxuK1xcdFxcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXFxuK1xcdFxcdFxcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCB0cnVlIC8qIG5ld19oYXNoMiAqLyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmhlYWQsIFxcdTAwMjZoZWFkMik7XFxuK1xcbitcXHRcXHRXUklURV9PTkNFKGNwLVxcdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XFxuK1xcdFxcdGNwLVxcdTAwM2VmbGFncyA9IG5ld19mbGFncztcXG4rXFx0XFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFxcdTAwMjZjcC1cXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcXG4rXFxuK1xcdFxcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cXHUwMDNlc2l6ZSAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX2Nvbm5fZGVmYXVsdF9sb2FkX2ZhY3RvcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcXG4ge1xcbkBAIC0xMDE0LDYgKzExMDUsOSBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0ZmxhZ3MgPSBjcC1cXHUwMDNlZmxhZ3M7XFxuIFxcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XFxuK1xcdFxcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xcbitcXHRcXHRjb25uX2ZsYWdzIFxcdTAwMjY9IH5JUF9WU19DT05OX0ZfT05FX1BBQ0tFVDtcXG4rXFxuIFxcdFxcdC8qIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB0ZW1wbGF0ZSBhbmQgaXMgY3JlYXRlZFxcbiBcXHRcXHQgKiBieSBzeW5jLCBwcmVzZXJ2ZSB0aGUgYWN0aXZpdHkgZmxhZy5cXG4gXFx0XFx0ICovXFxuQEAgLTEwMjEsOSArMTExNSwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcXG4gXFx0XFx0XFx0Y29ubl9mbGFncyBcXHUwMDI2PSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFO1xcbiBcXHRcXHQvKiBjb25uZWN0aW9ucyBpbmhlcml0IGZvcndhcmRpbmcgbWV0aG9kIGZyb20gZGVzdCAqL1xcbiBcXHRcXHRmbGFncyBcXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XFxuK1xcdFxcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XFxuK1xcdFxcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cXG4rXFx0XFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxcbitcXHRcXHRcXHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNwLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbitcXHRcXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0fVxcbi1cXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xcbi1cXHRjcC1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0Y3AtXFx1MDAzZWRlc3QgPSBkZXN0O1xcbiBcXG4gXFx0SVBfVlNfREJHX0JVRig3LCBcXFwiQmluZC1kZXN0ICVzIGM6JXM6JWQgdjolczolZCBcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjA1LjExMDAzNDAzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkyNTIwOTI0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3ZTIwMWUzZThmYjM1YWJlNmRiM2JmNDA0MDMwNThmZjBjZTdlNjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDAyOjI5OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbmluZGV4IGU3NmE3M2QxODNkNTMxLi41M2E3ZGUzYTlmMmJmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNcbkBAIC03MCwyNSArNzAsNDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppcF92c19jb25uX2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xuICAqIGJ1Y2tldCBvciBoYXNoIHRhYmxlXG4gICogLSBoYXNoIHRhYmxlIHJlc2l6ZSB3b3JrcyBsaWtlIHJlaGFzaCBidXQgYWx3YXlzIHJlaGFzaGVzIGludG8gbmV3IHRhYmxlXG4gICogLSBiaXQgbG9jayBvbiBidWNrZXQgc2VyaWFsaXplcyBhbGwgb3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGUgY2hhaW5cbisgKiAtIG9uIHJlc2l6ZSwgYnVja2V0IGZyb20gdGhlIG9sZCB0YWJsZSBpcyBsb2NrZWQgYmVmb3JlIGJ1Y2tldCBmcm9tIHRoZVxuKyAqIG5ldyB0YWJsZVxuICAqIC0gY3AtXHUwMDNlbG9jayBwcm90ZWN0cyBjb25uIGZpZWxkcyBsaWtlIGNwLVx1MDAzZWZsYWdzLCBjcC1cdTAwM2VkZXN0XG4gICovXG4gXG4tLyogTG9jayBjb25uX3RhYiBidWNrZXQgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoICovXG4rLyoqXG4rICAqIGNvbm5fdGFiX2xvY2sgLSBMb2NrIGNvbm5fdGFiIGJ1Y2tldHMgZm9yIGNvbm4gaGFzaC91bmhhc2gsIG5vdCBmb3IgcmVoYXNoXG4rICAqIEB0Olx0XHRoYXNoIHRhYmxlIGZvciBobjBcbisgICogQHQyOlx0aGFzaCB0YWJsZSBmb3IgaG4xXG4rICAqIEBjcDpcdGNvbm5lY3Rpb25cbisgICogQGhhc2hfa2V5Olx0aGFzaCBrZXkgZm9yIGhuMFxuKyAgKiBAaGFzaF9rZXkyOlx0aGFzaCBrZXkgZm9yIGhuMVxuKyAgKiBAdXNlMjpcdHVzaW5nIGhuMSAoZG91YmxlIGhhc2hpbmcpIGJhc2VkIG9uIHRoZSBmb3J3YXJkaW5nIG1ldGhvZFxuKyAgKiBAbmV3X2hhc2g6XHRtb2RlIGZvciBobjAsIGhhc2ggbm9kZSAodHJ1ZSkgb3Igc2VlayBub2RlIChmYWxzZSlcbisgICogQG5ld19oYXNoMjpcdG1vZGUgZm9yIGhuMSwgaGFzaCBub2RlICh0cnVlKSBvciBzZWVrIG5vZGUgKGZhbHNlKVxuKyAgKiBAaGVhZF9yZXQ6XHRyZXR1cm5lZCBoZWFkIGZvciBobjBcbisgICogQGhlYWQyX3JldDpcdHJldHVybmVkIGhlYWQgZm9yIGhuMVxuKyAgKlxuKyAgKiBXZSBzdXBwb3J0IDMgbW9kZXM6XG4rICAqIC0gc2VlayBtb2RlIGZvciBib3RoIG5vZGVzLCB1c2VkIGZvciB1bmhhc2hpbmdcbisgICogLSBoYXNoIG1vZGUgZm9yIGJvdGggbm9kZXMsIHVzZWQgZm9yIGhhc2hpbmdcbisgICogLSBzZWVrIGhuMCBhbmQgaGFzaCBobjEsIHVzZWQgd2hlbiBmb3J3YXJkaW5nIG1ldGhvZCBpcyBjaGFuZ2VkXG4rICAqL1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZFxuLWNvbm5fdGFiX2xvY2soc3RydWN0IGlwX3ZzX3JodCAqdCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCB1MzIgaGFzaF9rZXksXG4tXHQgICAgICB1MzIgaGFzaF9rZXkyLCBib29sIHVzZTIsIGJvb2wgbmV3X2hhc2gsXG4tXHQgICAgICBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWQyX3JldClcbitjb25uX3RhYl9sb2NrKHN0cnVjdCBpcF92c19yaHQgKnQsIHN0cnVjdCBpcF92c19yaHQgKnQyLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4rXHQgICAgICB1MzIgaGFzaF9rZXksIHUzMiBoYXNoX2tleTIsIGJvb2wgdXNlMiwgYm9vbCBuZXdfaGFzaCxcbitcdCAgICAgIGJvb2wgbmV3X2hhc2gyLCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqKmhlYWRfcmV0LFxuK1x0ICAgICAgc3RydWN0IGhsaXN0X2JsX2hlYWQgKipoZWFkMl9yZXQpXG4ge1xuIFx0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbiBcdHUzMiBoYXNoX2tleV9uZXcsIGhhc2hfa2V5X25ldzI7XG4tXHRzdHJ1Y3QgaXBfdnNfcmh0ICp0MiA9IHQ7XG4gXHR1MzIgaWR4LCBpZHgyO1xuIFxuIFx0aWR4ID0gaGFzaF9rZXkgXHUwMDI2IHQtXHUwMDNlbWFzaztcbi1cdGlmICh1c2UyKVxuLVx0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4tXHRlbHNlXG4tXHRcdGlkeDIgPSBpZHg7XG4rXHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0LVx1MDAzZW1hc2s7XG4rXHQvKiBBZHZhbmNlIGlkeDIgd2hlbiBuZXdfaGFzaCBpcyBub3Qgc2V0IGJ1dCBoYXNoX2tleTJcbitcdCAqIGlzIGZvciBuZXcgdGFibGVcbitcdCAqL1xuK1x0aWYgKG5ld19oYXNoMiBcdTAwMjZcdTAwMjYgdXNlMiBcdTAwMjZcdTAwMjYgdCAhPSB0MilcbitcdFx0aWR4MiB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbitcbiBcdGlmICghbmV3X2hhc2gpIHtcbiBcdFx0LyogV2UgbmVlZCB0byBsb2NrIHRoZSBidWNrZXQgaW4gdGhlIHJpZ2h0IHRhYmxlICovXG4gXG5AQCAtMTAzLDI0ICsxMjUsMTkgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0XHRpZHggPSBoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrO1xuIFx0XHRcdGlkeCB8PSBJUF9WU19SSFRfVEFCTEVfSURfTUFTSztcbiBcdFx0fVxuLVx0XHRpZiAodXNlMikge1xuLVx0XHRcdGlmICghaXBfdnNfcmh0X3NhbWVfdGFibGUodDIsIGhhc2hfa2V5MikpIHtcbi1cdFx0XHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4tXHRcdFx0XHR0MiA9IHJjdV9kZXJlZmVyZW5jZSh0Mi1cdTAwM2VuZXdfdGJsKTtcbi1cdFx0XHRcdGlkeDIgPSBoYXNoX2tleTIgXHUwMDI2IHQyLVx1MDAzZW1hc2s7XG4tXHRcdFx0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZHgyID0gaWR4O1xuLVx0XHR9XG4rXHR9XG4rXHRpZiAodXNlMiBcdTAwMjZcdTAwMjYgIW5ld19oYXNoMiBcdTAwMjZcdTAwMjYgIWlwX3ZzX3JodF9zYW1lX3RhYmxlKHQyLCBoYXNoX2tleTIpKSB7XG4rXHRcdC8qIEl0IGlzIGFscmVhZHkgbW92ZWQgdG8gbmV3IHRhYmxlICovXG4rXHRcdHQyID0gcmN1X2RlcmVmZXJlbmNlKHQyLVx1MDAzZW5ld190YmwpO1xuK1x0XHRpZHgyID0gaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrO1xuK1x0XHRpZHgyIHw9IElQX1ZTX1JIVF9UQUJMRV9JRF9NQVNLO1xuIFx0fVxuIFxuK1x0aWYgKCF1c2UyKVxuK1x0XHRpZHgyID0gaWR4O1xuIFx0aGVhZCA9IHQtXHUwMDNlYnVja2V0cyArIChoYXNoX2tleSBcdTAwMjYgdC1cdTAwM2VtYXNrKTtcbiBcdGhlYWQyID0gdXNlMiA/IHQyLVx1MDAzZWJ1Y2tldHMgKyAoaGFzaF9rZXkyIFx1MDAyNiB0Mi1cdTAwM2VtYXNrKSA6IGhlYWQ7XG4gXG4tXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHQvKiBEbyBub3QgdG91Y2ggc2VxY291bnQsIHRoaXMgaXMgYSBzYWZlIG9wZXJhdGlvbiAqL1xuLVxuIFx0aWYgKGlkeCBcdTAwM2M9IGlkeDIpIHtcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbiBcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG5AQCAtMTMwLDE2ICsxNDcsMjIgQEAgY29ubl90YWJfbG9jayhzdHJ1Y3QgaXBfdnNfcmh0ICp0LCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBoYXNoX2tleSxcbiBcdFx0aGxpc3RfYmxfbG9jayhoZWFkKTtcbiBcdH1cbiBcdGlmICghbmV3X2hhc2gpIHtcbitcdFx0Ym9vbCBjaGFuZ2VkO1xuK1xuIFx0XHQvKiBFbnN1cmUgaGFzaF9rZXkgaXMgcmVhZCB1bmRlciBsb2NrICovXG4gXHRcdGhhc2hfa2V5X25ldyA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuLVx0XHRoYXNoX2tleV9uZXcyID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMS5oYXNoX2tleSk7XG4rXHRcdGNoYW5nZWQgPSBoYXNoX2tleSAhPSBoYXNoX2tleV9uZXc7XG4rXHRcdGlmICh1c2UyIFx1MDAyNlx1MDAyNiAhbmV3X2hhc2gyKSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IFJFQURfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXkpO1xuK1x0XHRcdGNoYW5nZWQgfD0gaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzI7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aGFzaF9rZXlfbmV3MiA9IGhhc2hfa2V5MjtcbitcdFx0fVxuIFx0XHQvKiBIYXNoIGNoYW5nZWQgPyAqL1xuLVx0XHRpZiAoaGFzaF9rZXkgIT0gaGFzaF9rZXlfbmV3IHx8XG4tXHRcdCAgICAoaGFzaF9rZXkyICE9IGhhc2hfa2V5X25ldzIgXHUwMDI2XHUwMDI2IHVzZTIpKSB7XG4rXHRcdGlmIChjaGFuZ2VkKSB7XG4gXHRcdFx0aWYgKGhlYWQgIT0gaGVhZDIpXG4gXHRcdFx0XHRobGlzdF9ibF91bmxvY2soaGVhZDIpO1xuIFx0XHRcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdFx0XHRoYXNoX2tleSA9IGhhc2hfa2V5X25ldztcbiBcdFx0XHRoYXNoX2tleTIgPSBoYXNoX2tleV9uZXcyO1xuIFx0XHRcdGdvdG8gcmV0cnk7XG5AQCAtMTU1LDcgKzE3OCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25uX3RhYl91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsXG4gXHRpZiAoaGVhZCAhPSBoZWFkMilcbiBcdFx0aGxpc3RfYmxfdW5sb2NrKGhlYWQyKTtcbiBcdGhsaXN0X2JsX3VubG9jayhoZWFkKTtcbi1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5AQCAtMjY4LDggKzI5MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX2Nvbm5faGFzaChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gXHRcdHVzZTIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGNvbm5fdGFiX2xvY2sodCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4tXHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbitcdGNvbm5fdGFiX2xvY2sodCwgdCwgY3AsIGhhc2hfa2V5LCBoYXNoX2tleTIsIHVzZTIsIHRydWUgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIHRydWUgLyogbmV3X2hhc2gyICovLCBcdTAwMjZoZWFkLCBcdTAwMjZoZWFkMik7XG4gXG4gXHRjcC1cdTAwM2VmbGFncyB8PSBJUF9WU19DT05OX0ZfSEFTSEVEO1xuIFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXksIGhhc2hfa2V5KTtcbkBAIC0yODAsNiArMzAzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXBfdnNfY29ubl9oYXNoKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcdFx0aGxpc3RfYmxfYWRkX2hlYWRfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlLCBoZWFkMik7XG4gXG4gXHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXHRyZXQgPSAxO1xuIFxuIFx0LyogU2NoZWR1bGUgcmVzaXppbmcgaWYgbG9hZCBpbmNyZWFzZXMgKi9cbkBAIC0zMDYsMTggKzMzMCwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91bmxpbmsoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIFx0XHRyZXR1cm4gcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIFxuIFx0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbiBcdGhhc2hfa2V5ID0gUkVBRF9PTkNFKGNwLVx1MDAzZWhuMC5oYXNoX2tleSk7XG4gXHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbiBcdHVzZTIgPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCk7XG4gXG4tXHRjb25uX3RhYl9sb2NrKHQsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB1c2UyLCBmYWxzZSAvKiBuZXdfaGFzaCAqLyxcbi1cdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1x0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdXNlMiwgZmFsc2UgLyogbmV3X2hhc2ggKi8sXG4rXHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoMiAqLywgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKSB7XG4gXHRcdC8qIERlY3JlYXNlIHJlZmNudCBhbmQgdW5saW5rIGNvbm4gb25seSBpZiB3ZSBhcmUgbGFzdCB1c2VyICovXG4tXHRcdGlmIChyZWZjb3VudF9kZWNfaWZfb25lKFx1MDAyNmNwLVx1MDAzZXJlZmNudCkpIHtcbitcdFx0aWYgKHVzZTIgPT0gaXBfdnNfY29ubl91c2VfaGFzaDIoY3ApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmVmY291bnRfZGVjX2lmX29uZShcdTAwMjZjcC1cdTAwM2VyZWZjbnQpKSB7XG4gXHRcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjAubm9kZSk7XG4gXHRcdFx0aWYgKHVzZTIpXG4gXHRcdFx0XHRobGlzdF9ibF9kZWxfcmN1KFx1MDAyNmNwLVx1MDAzZWhuMS5ub2RlKTtcbkBAIC0zMjgsNiArMzU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2Nvbm5fdW5saW5rKHN0cnVjdCBpcF92c19jb25uICpjcClcbiBcbiBcdGNvbm5fdGFiX3VubG9jayhoZWFkLCBoZWFkMik7XG4gXG4rXHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC02ODYsNiArNzEzLDE2IEBAIHZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX19iZTE2IGNwb3J0KVxuIFx0LyogUHJvdGVjdCB0aGUgY3AtXHUwMDNlZmxhZ3MgbW9kaWZpY2F0aW9uICovXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4gXG4rXHQvKiBSZWNoZWNrIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrICovXG4rXHRpZiAodXNlMiAhPSBpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3AtXHUwMDNlbG9jayk7XG4rXHRcdHVzZTIgPSAhdXNlMjtcbitcdFx0aWYgKGRpcikge1xuK1x0XHRcdGRpci0tO1xuK1x0XHRcdGdvdG8gbmV4dF9kaXI7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qIExvY2sgc2VxY291bnQgb25seSBmb3IgdGhlIG9sZCBidWNrZXQsIGV2ZW4gaWYgd2UgYXJlIG9uIG5ldyB0YWJsZVxuIFx0ICogYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBkZWwgb3BlcmF0aW9uLCBub3QgdGhlIGFkZGluZy5cbiBcdCAqL1xuQEAgLTc1Miw2ICs3ODksNjAgQEAgdm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4gXHRcdGdvdG8gbmV4dF9kaXI7XG4gfVxuIFxuKy8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cbitzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXG4re1xuK1x0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBjcC1cdTAwM2VpcHZzO1xuK1x0c3RydWN0IGhsaXN0X2JsX2hlYWQgKmhlYWQsICpoZWFkMjtcbitcdHUzMiBoYXNoMiwgaGFzaF9rZXksIGhhc2hfa2V5MjtcbitcdHN0cnVjdCBpcF92c19yaHQgKnQsICp0MjtcbitcbitcdC8qIFNlZSBpcF92c19jb25uX3VzZV9oYXNoMigpIGZvciByZWZlcmVuY2UgKi9cbitcdGlmICgoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSkgfHxcbitcdCAgICAvKiBObyBjaGFuZ2UgaW4gZG91YmxlIGhhc2hpbmcgPyAqL1xuK1x0ICAgICEoKGNwLVx1MDAzZWZsYWdzIF4gbmV3X2ZsYWdzKSBcdTAwMjYgSVBfVlNfQ09OTl9GX0ZXRF9NQVNLKSkge1xuK1x0XHRjcC1cdTAwM2VmbGFncyA9IG5ld19mbGFncztcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0dCA9IHJjdV9kZXJlZmVyZW5jZShpcHZzLVx1MDAzZWNvbm5fdGFiKTtcbitcdGlmIChpcF92c19jb25uX3VzZV9oYXNoMihjcCkpIHtcbitcdFx0LyogU3RvcCBkb3VibGUgaGFzaGluZyAqL1xuK1x0XHRoYXNoX2tleSA9IFJFQURfT05DRShjcC1cdTAwM2VobjAuaGFzaF9rZXkpO1xuK1x0XHRoYXNoX2tleTIgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4xLmhhc2hfa2V5KTtcbitcbitcdFx0Y29ubl90YWJfbG9jayh0LCB0LCBjcCwgaGFzaF9rZXksIGhhc2hfa2V5MiwgdHJ1ZSAvKiB1c2UyICovLFxuK1x0XHRcdCAgICAgIGZhbHNlIC8qIG5ld19oYXNoICovLCBmYWxzZSAvKiBuZXdfaGFzaDIgKi8sXG4rXHRcdFx0ICAgICAgXHUwMDI2aGVhZCwgXHUwMDI2aGVhZDIpO1xuK1xuK1x0XHQvKiBLZWVwIGJvdGggaGFzaCBrZXlzIGluIHNhbWUgdGFibGUgKi9cbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5KTtcbitcdFx0aGxpc3RfYmxfZGVsX3JjdShcdTAwMjZjcC1cdTAwM2VobjEubm9kZSk7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1xuK1x0XHRjb25uX3RhYl91bmxvY2soaGVhZCwgaGVhZDIpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogU3RhcnQgZG91YmxlIGhhc2hpbmcgKi9cbitcbitcdFx0aGFzaF9rZXkgPSBSRUFEX09OQ0UoY3AtXHUwMDNlaG4wLmhhc2hfa2V5KTtcbitcbitcdFx0dDIgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VuZXdfdGJsKTtcbitcdFx0aGFzaDIgPSBpcF92c19jb25uX2hhc2hrZXlfY29ubih0MiwgY3AsIHRydWUpO1xuK1x0XHRoYXNoX2tleTIgPSBpcF92c19yaHRfYnVpbGRfaGFzaF9rZXkodDIsIGhhc2gyKTtcbitcbitcdFx0LyogQ2hhbmdlIHRoZSBmb3J3YXJkaW5nIG1ldGhvZCB1bmRlciBsb2NrZWQgaG4wICovXG4rXHRcdGNvbm5fdGFiX2xvY2sodCwgdDIsIGNwLCBoYXNoX2tleSwgaGFzaF9rZXkyLCB0cnVlIC8qIHVzZTIgKi8sXG4rXHRcdFx0ICAgICAgZmFsc2UgLyogbmV3X2hhc2ggKi8sIHRydWUgLyogbmV3X2hhc2gyICovLFxuK1x0XHRcdCAgICAgIFx1MDAyNmhlYWQsIFx1MDAyNmhlYWQyKTtcbitcbitcdFx0V1JJVEVfT05DRShjcC1cdTAwM2VobjEuaGFzaF9rZXksIGhhc2hfa2V5Mik7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gbmV3X2ZsYWdzO1xuK1x0XHRobGlzdF9ibF9hZGRfaGVhZF9yY3UoXHUwMDI2Y3AtXHUwMDNlaG4xLm5vZGUsIGhlYWQyKTtcbitcbitcdFx0Y29ubl90YWJfdW5sb2NrKGhlYWQsIGhlYWQyKTtcbitcdH1cbit9XG4rXG4gLyogR2V0IGRlZmF1bHQgbG9hZCBmYWN0b3IgdG8gbWFwIGNvbm5fY291bnQvdV90aHJlc2ggdG8gdC1cdTAwM2VzaXplICovXG4gc3RhdGljIGludCBpcF92c19jb25uX2RlZmF1bHRfbG9hZF9mYWN0b3Ioc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4ge1xuQEAgLTEwMTQsNiArMTEwNSw5IEBAIGlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxuIFx0ZmxhZ3MgPSBjcC1cdTAwM2VmbGFncztcbiBcdC8qIEJpbmQgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIGl0cyBjb3JyZXNwb25kaW5nIHRyYW5zbWl0dGVyICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TWU5DKSB7XG4rXHRcdC8qIFN5bmNlZCBjb25ucyBhcmUgaGFzaGVkLCBzbyB0aGV5IGNhbiBub3QgZ2V0IHRoaXMgZmxhZyAqL1xuK1x0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUO1xuK1xuIFx0XHQvKiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdGVtcGxhdGUgYW5kIGlzIGNyZWF0ZWRcbiBcdFx0ICogYnkgc3luYywgcHJlc2VydmUgdGhlIGFjdGl2aXR5IGZsYWcuXG4gXHRcdCAqL1xuQEAgLTEwMjEsOSArMTExNSwxOCBAQCBpcF92c19iaW5kX2Rlc3Qoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdClcbiBcdFx0XHRjb25uX2ZsYWdzIFx1MDAyNj0gfklQX1ZTX0NPTk5fRl9JTkFDVElWRTtcbiBcdFx0LyogY29ubmVjdGlvbnMgaW5oZXJpdCBmb3J3YXJkaW5nIG1ldGhvZCBmcm9tIGRlc3QgKi9cbiBcdFx0ZmxhZ3MgXHUwMDI2PSB+KElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8IElQX1ZTX0NPTk5fRl9OT09VVFBVVCk7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdC8qIENoYW5naW5nIGZvcndhcmRpbmcgbWV0aG9kIGZvciBoYXNoZWQgY29ubiBjYW5cbitcdFx0ICogaGFwcGVuIG9ubHkgdW5kZXIgbG9ja3NcbitcdFx0ICovXG4rXHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX0hBU0hFRClcbitcdFx0XHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbitcdH0gZWxzZSB7XG4rXHRcdGZsYWdzIHw9IGNvbm5fZmxhZ3M7XG4rXHRcdGNwLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHR9XG4tXHRmbGFncyB8PSBjb25uX2ZsYWdzO1xuLVx0Y3AtXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGNwLVx1MDAzZWRlc3QgPSBkZXN0O1xuIFxuIFx0SVBfVlNfREJHX0JVRig3LCBcIkJpbmQtZGVzdCAlcyBjOiVzOiVkIHY6JXM6JWQgXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjA1LjExMDAzNjk0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODY4NjUzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIENvbm5lY3Rpb24gVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmNgLiBJdCdzIGEgY29ubmVjdGlvbi10cmFja2luZyBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBpcF92c19jb25uYCBoYXNoIHRhYmxlcyBhbmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYC4gVGhpcyBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgIGlzIHRoZW4gYmVpbmcgdXRpbGl6ZWQgaW4gYGlwX3ZzX2JpbmRfZGVzdGAsIHdoZW4gYSBjb25uZWN0aW9uIGlzIGhhc2hlZCwgdG8gYWRqdXN0IHRoZSBmb3J3YXJkaW5nIG1ldGhvZC4gU28sIGZ1bmRhbWVudGFsbHksIHdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVBWUyBzdWJzeXN0ZW0uXG5cbkdpdmVuIHRoYXQgSVBWUyBpcyBhIGNvcmUgY29tcG9uZW50LCBhIGtleSBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgZnJlcXVlbnRseSBsZXZlcmFnZWQgZm9yIGxvYWQgYmFsYW5jaW5nLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgdHlwaWNhbGx5IHZpYSBuZXRsaW5rIG9yIGBzZXRzb2Nrb3B0YCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSwgYXMgSSBtZW50aW9uZWQsIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jYC5cblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgYENPTkZJR2Agb3B0aW9ucyB0aGF0IHdpbGwgYWxsb3cgbWUgdG8gdGFyZ2V0IHRoaXMgY29kZSBlZmZlY3RpdmVseS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgdG8gZW5zdXJlIElQVlMgaXMgZW5hYmxlZC4gSSdsbCB1c2UgYGdyZXBwZXJgIGFuZCBsb29rIGZvciBgSVBfVlNgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSBjb3JyZWN0IGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6Mjk6MTAuNzk2OTA2MjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDIxNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToxMC44NjEzMzU2ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzczMzYwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWUyBDb25maWd1cmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBJUFZTIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUuIE15IG1haW4gcG9pbnQgb2YgcmVmZXJlbmNlIGlzIHRoZSBgSVBfVlNgIGNvbmZpZyDigJMgdGhhdCdzIHRoZSBjb3JlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIG9yIGFkZGVkIHJlbGF0ZWQgdG8gdGhpcy5cblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgbW9kaWZpY2F0aW9ucywgaXQgc2VlbXMgdGhlIGZvY3VzIGlzIG9uIGNvbm5lY3Rpb24gdGFibGUgbWFuYWdlbWVudDogYGNvbm5fdGFiX2xvY2tgLCBgaXBfdnNfY29ubl9oYXNoYCwgYGlwX3ZzX2Nvbm5fdW5saW5rYCwgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAsIGFuZCBgaXBfdnNfYmluZF9kZXN0YC4gVGhlc2UgYXJlIGFsbCBmYWlybHkgbG93LWxldmVsLCBlc3NlbnRpYWwgZnVuY3Rpb25zLiBUaGVuLCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uIOKAkyBgaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tgLiBPa2F5LCB0aGF0J3MgaW50ZXJlc3Rpbmc7IEknbGwgZmxhZyB0aGF0IGFzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBgaXBfdnNfYmluZF9kZXN0YCBhbmQgYGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydGAgYXJlIGFsc28gd29ydGggY2xvc2VyIGluc3BlY3Rpb24uXG5cbk5vdywgYmV5b25kIHRoZSBjb3JlIGBJUF9WU2AgY29uZmlnLCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWxzbyBpbXBvcnRhbnQ/IEl0IGxvb2tzIGxpa2UgYElQX1ZTX1BST1RPX1RDUGAgYW5kIGBJUF9WU19QUk9UT19VRFBgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gYWRkIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGNvdmVyIHRob3NlIHByb3RvY29scywgdGhvdWdoIGBJUF9WU2AgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBvbmUuIFdhaXQsIGhvbGQgb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGluIHRoZSBrZXJuZWwsIGBJUF9WU2AgaXMgYSBtZW51Y29uZmlnLCBzbyBpdCdzIGBDT05GSUdfSVBfVlNgIHRoYXQgSSBzaG91bGQgYmUgbG9va2luZyBmb3IuXG5cbkknbGwgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY2AgYmVjYXVzZSBpdCdzIGEgbmV3IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTg4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjE2LjIzNDY5OTE2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM5MDMwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jPTY0Nz12b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNzkyLS8qIENoYW5nZSBmb3J3YXJkaW5nIG1ldGhvZCBmb3IgaGFzaGVkIGNvbm4gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjc5MzpzdGF0aWMgdm9pZCBpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHUzMiBuZXdfZmxhZ3MpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy03OTQte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMDkwPWlwX3ZzX2JpbmRfZGVzdChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xMTIyLVxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfSEFTSEVEKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTEyMzpcXHRcXHRcXHRpcF92c19jb25uX2NoYW5nZV9md2RfbWFzayhjcCwgZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTEyNC1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI5OjE2LjM2ODYxMTQ3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMDg5NTQ3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyB0aGUgSVBWUyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIGhvdyBpdCBkZWFscyB3aXRoIGRvdWJsZSBoYXNoaW5nIGFuZCBjaGFuZ2VzIHRvIHRoZSBmb3J3YXJkaW5nIG1ldGhvZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIGZvciB2dWxuZXJhYmlsaXRpZXMuIENvbm5lY3Rpb24gdHJhY2tpbmcgaXMgYSBjb21wbGV4IGJlYXN0LCBhbmQgY2hhbmdlcyB0byBpdHMgY29yZSBjb21wb25lbnRzIGFyZSBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMsICpkZWZpbml0ZWx5KiBmdXp6IHRoaXMuIFRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3dzLCBvZmYtYnktb25lIGVycm9ycywgb3IgZXZlbiBtb3JlIHN1YnRsZSBsb2dpYyBmbGF3cyB3aXRoaW4gY29ubmVjdGlvbiBtYW5hZ2VtZW50IGlzIGhpZ2guIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIGJ1aWx0IGludG8gdGhlIHByZXZpb3VzIHZlcnNpb25zIGFyZSBtYWludGFpbmVkIGFmdGVyIHRoaXMgY2hhbmdlLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgYXJlYXMgdG8gdGFyZ2V0LiBUaGUgc3ltYm9scyB0aGF0IGp1bXAgb3V0IGF0IG1lIGFzIHBvdGVudGlhbCBob3RzcG90cyBhcmUgYGlwX3ZzX2Nvbm5fY2hhbmdlX2Z3ZF9tYXNrYCwgYGlwX3ZzX2JpbmRfZGVzdGAsIGFuZCBgaXBfdnNfY29ubl9maWxsX2Nwb3J0YC4gVGhlc2UgZnVuY3Rpb25zIGxpa2VseSBoYW5kbGUgY3JpdGljYWwgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGZvcndhcmRpbmcgcnVsZXMsIGRlc3RpbmF0aW9uIGJpbmRpbmcsIGFuZCBwb3J0IGluZm9ybWF0aW9uIOKAkyB0aGUga2luZCBvZiBwbGFjZXMgd2hlcmUgdGhpbmdzIGNhbiBnbyBzaWRld2F5cyBpZiBpbnB1dCB2YWxpZGF0aW9uIGlzbid0IHJvY2sgc29saWQuIEknbGwgbmVlZCB0byBkZXZlbG9wIGZ1enppbmcgc3RyYXRlZ2llcyBmb2N1c2VkIG9uIHRoZXNlIGZ1bmN0aW9uIGVudHJ5IHBvaW50cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy5cblxuTGV0IG1lIGFsc28gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gbmVlZGVkIHRvIGJ1aWxkIHRoaXMgZnVuY3Rpb24uIEkgc2VlIElQX1ZTIGlzIG5lZWRlZC4gT2theS4gTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlncyB0aGF0IG1pZ2h0IGFsc28gYmUgcmVsZXZhbnQgdG8gZnVsbHkgZW5hYmxlIHRoZSBpbXBhY3RlZCBjb2RlIHBhdGhzLiBXZSBjYW4ndCBsZXQgYSBjb25maWd1cmF0aW9uIGlzc3VlIGJsb2NrIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5LiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSByZWxhdGVkIEtjb25maWcgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToyMC42Nzc1Njk3NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDYyNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToyMC43ODEwNDA4MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgyODAzNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBob3cgSSdsbCBzdW1tYXJpemUgdGhlIHRleHQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKlNldHRpbmcgdGhlIFN0YWdlIGZvciBBbmFseXNpcyoqXG5cbkFscmlnaHQsIEkgc2VlIHRoZSB0YXNrIGlzIHRvIGVzc2VudGlhbGx5IHN1bW1hcml6ZSBhIHRob3VnaHQgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSDigJMgbm90IGp1c3QgdG8gcHJvdmlkZSBhIHNpbXBsZSByZWd1cmdpdGF0aW9uIG9mIHdoYXQncyAqc2FpZCosIGJ1dCB0byBjYXB0dXJlIHRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBhbmQgaW1wbGljYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGdvYWwgaGVyZSBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbnRleHQgZm9yIGZ1dHVyZSByZXN1bHRzLiBUaGlzIGluaXRpYWwgc3RlcCwgc2V0dGluZyB0aGUgcGFyYW1ldGVycywgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSWYgSSBkb27igJl0IGRlZmluZSB0aGUgaW5pdGlhbCBjb25kaXRpb25zIEkgd29u4oCZdCBnZXQgdGhlIGNvcnJlY3QgcmVzdWx0cyBhdCB0aGUgZW5kLiBJIGFtIGdvaW5nIHRvIG1ha2UgY2VydGFpbiBJIGRvY3VtZW50IHRoZXNlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNDYsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyOToyNC4yNjM4NTA4MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI2NzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19jb25uX2NoYW5nZV9md2RfbWFza1wiLFxuICAgIFwiaXBfdnNfYmluZF9kZXN0XCIsXG4gICAgXCJpcF92c19jb25uX2ZpbGxfY3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljIGluIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBjb25uZWN0aW9uIGhhc2ggdGFibGVzIGFyZSBsb2NrZWQgYW5kIGhvdyBmb3J3YXJkaW5nIG1ldGhvZHMgYXJlIHVwZGF0ZWQgZm9yIGhhc2hlZCBjb25uZWN0aW9ucy4gVGhpcyBpcyByZWFjaGFibGUgZnVuY3Rpb25hbCBjb2RlIHRoYXQgaGFuZGxlcyBuZXR3b3JrIGxvYWQgYmFsYW5jaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfY29ubl9jaGFuZ2VfZndkX21hc2tcIixcbiAgICBcImlwX3ZzX2JpbmRfZGVzdFwiLFxuICAgIFwiaXBfdnNfY29ubl9maWxsX2Nwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBpbiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlciksIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgY29ubmVjdGlvbiBoYXNoIHRhYmxlcyBhcmUgbG9ja2VkIGFuZCBob3cgZm9yd2FyZGluZyBtZXRob2RzIGFyZSB1cGRhdGVkIGZvciBoYXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGhhbmRsZXMgbmV0d29yayBsb2FkIGJhbGFuY2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[1] Phase: Succeeded StartedAt: 2026-07-01 02:30:31 +0000 UTC FinishedAt: 2026-07-01 02:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 02:30:31 +0000 UTC FinishedAt: 2026-07-01 02:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2] Phase: Succeeded StartedAt: 2026-07-01 02:30:31 +0000 UTC FinishedAt: 2026-07-01 06:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 02:30:31 +0000 UTC FinishedAt: 2026-07-01 06:52:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 02:30:31 +0000 UTC FinishedAt: 2026-07-01 02:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 02:30:31 +0000 UTC FinishedAt: 2026-07-01 02:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow4d2vj/series-workflow4d2vj-convert-artifact-2905082481/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 02:31:11 +0000 UTC FinishedAt: 2026-07-01 03:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 02:31:11 +0000 UTC FinishedAt: 2026-07-01 03:15:27 +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:*bb8b6c94-dcce-4c0c-9487-8f7670521d2e,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-workflow4d2vj/series-workflow4d2vj-convert-artifact-2905082481/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": "64acefb7-4fc5-4fe7-acc6-db051f6a92a9", "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-workflow4d2vj/series-workflow4d2vj-build-action-3650274463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 02:31:11 +0000 UTC FinishedAt: 2026-07-01 03:15:16 +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:*bb8b6c94-dcce-4c0c-9487-8f7670521d2e,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-workflow4d2vj/series-workflow4d2vj-convert-artifact-2905082481/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": "64acefb7-4fc5-4fe7-acc6-db051f6a92a9", "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-workflow4d2vj/series-workflow4d2vj-build-action-3650274463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 03:15:27 +0000 UTC FinishedAt: 2026-07-01 03:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 03:15:27 +0000 UTC FinishedAt: 2026-07-01 03:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 03:15:27 +0000 UTC FinishedAt: 2026-07-01 03:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 03:15:27 +0000 UTC FinishedAt: 2026-07-01 03:15:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow4d2vj/series-workflow4d2vj-convert-artifact-2040905668/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 03:15:37 +0000 UTC FinishedAt: 2026-07-01 03:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 03:15:37 +0000 UTC FinishedAt: 2026-07-01 03:17:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64acefb7-4fc5-4fe7-acc6-db051f6a92a9,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-workflow4d2vj/series-workflow4d2vj-build-action-3650274463/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-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 03:17:51 +0000 UTC FinishedAt: 2026-07-01 03:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 03:17:51 +0000 UTC FinishedAt: 2026-07-01 03:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 03:17:51 +0000 UTC FinishedAt: 2026-07-01 03:48:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 03:17:51 +0000 UTC FinishedAt: 2026-07-01 03:48:27 +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:*bb8b6c94-dcce-4c0c-9487-8f7670521d2e,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-workflow4d2vj/series-workflow4d2vj-convert-artifact-2040905668/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": "c64715b4-8a03-4f09-b793-a520ff2577a8", "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-workflow4d2vj/series-workflow4d2vj-build-action-3910920144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 03:17:51 +0000 UTC FinishedAt: 2026-07-01 03:47: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:*bb8b6c94-dcce-4c0c-9487-8f7670521d2e,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-workflow4d2vj/series-workflow4d2vj-convert-artifact-2040905668/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": "c64715b4-8a03-4f09-b793-a520ff2577a8", "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-workflow4d2vj/series-workflow4d2vj-build-action-3910920144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 03:48:27 +0000 UTC FinishedAt: 2026-07-01 03:48:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 03:48:27 +0000 UTC FinishedAt: 2026-07-01 03:48:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 03:48:27 +0000 UTC FinishedAt: 2026-07-01 03:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 03:48:28 +0000 UTC FinishedAt: 2026-07-01 03:50:24 +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:*c64715b4-8a03-4f09-b793-a520ff2577a8,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-workflow4d2vj/series-workflow4d2vj-build-action-3910920144/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-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 03:50:37 +0000 UTC FinishedAt: 2026-07-01 06:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 03:50:37 +0000 UTC FinishedAt: 2026-07-01 06:52:36 +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":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"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:*64acefb7-4fc5-4fe7-acc6-db051f6a92a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c64715b4-8a03-4f09-b793-a520ff2577a8,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-workflow4d2vj/series-workflow4d2vj-build-action-3650274463/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-workflow4d2vj/series-workflow4d2vj-build-action-3910920144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 03:50:37 +0000 UTC FinishedAt: 2026-07-01 03:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 03:50:37 +0000 UTC FinishedAt: 2026-07-01 03:50:59 +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":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"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-workflow4d2vj/series-workflow4d2vj-convert-artifact-1488624077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 03:50:37 +0000 UTC FinishedAt: 2026-07-01 03:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 03:50:37 +0000 UTC FinishedAt: 2026-07-01 03:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 03:50:37 +0000 UTC FinishedAt: 2026-07-01 03:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 03:51:14 +0000 UTC FinishedAt: 2026-07-01 06:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4d2vj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_conn_change_fwd_mask","ip_vs_bind_dest","ip_vs_conn_fill_cport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b260c97930bc62713d246670677ade2190f0ff87","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"d1bc74bc-0c61-40df-8988-a9400375cd73","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 03:51:14 +0000 UTC FinishedAt: 2026-07-01 06:52:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64acefb7-4fc5-4fe7-acc6-db051f6a92a9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c64715b4-8a03-4f09-b793-a520ff2577a8,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-workflow4d2vj/series-workflow4d2vj-build-action-3650274463/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-workflow4d2vj/series-workflow4d2vj-build-action-3910920144/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-workflow4d2vj/series-workflow4d2vj-convert-artifact-1488624077/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,}