Name: series-workflowj7mm5 Phase: Succeeded StartedAt: 2026-08-25 17:50:02 +0000 UTC FinishedAt: 2026-08-25 22:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[0] Phase: Succeeded StartedAt: 2026-08-25 17:50:02 +0000 UTC FinishedAt: 2026-08-25 18:29:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 17:50:02 +0000 UTC FinishedAt: 2026-08-25 18:29:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT", "NET_ACT_SAMPLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT", "NET_ACT_SAMPLE" ], "series_id": "852379a0-8a3b-4915-b4ee-51dcb26d4934" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_sample_init", "tcf_sample_act" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9zYW1wbGVfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX3NhbXBsZV9pbml0YCBpbiBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzIG5vdCBwcm92aWRlZC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgdGMgc2FtcGxlIGFjdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXRhaW4gdGhlIG9sZCB0cnVuY2F0aW9uIHNldHRpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAodGMgYWN0aW9ucykgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTM0OThlZDBhZGY2OTMxYWZlZGFkMWNkNjhkY2UzOGI2NmI0MzY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6MjM6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjJiZGM3YTBlYjZkNjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMTE2LDYgJiM0MzsxMTYsOSBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbiBcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XG4gXHRcdHMtXHUwMDNldHJ1bmNhdGUgPSB0cnVlO1xuIFx0XHRzLVx1MDAzZXRydW5jX3NpemUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cy1cdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO1xuJiM0MztcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gMDtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9TQU1QTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2Zfc2FtcGxlX2luaXQmIzM0OywKICAgICYjMzQ7dGNmX3NhbXBsZV9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9zYW1wbGVfaW5pdGAgaW4gYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgIHRvIGV4cGxpY2l0bHkgcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgd2hlbiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBub3QgcHJvdmlkZWQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHRjIHNhbXBsZSBhY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0YWluIHRoZSBvbGQgdHJ1bmNhdGlvbiBzZXR0aW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBzdWJzeXN0ZW0gKHRjIGFjdGlvbnMpIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDEzNDk4ZWQwYWRmNjkzMWFmZWRhZDFjZDY4ZGNlMzhiNjZiNDM2OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE4OjIzOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKaW5kZXggMmNlYjRkMTQxYjcxMy4uMmJkYzdhMGViNmQ2OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCkBAIC0xMTYsNiAmIzQzOzExNiw5IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLAogCWlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7CiAJCXMtJmd0O3RydW5jYXRlID0gdHJ1ZTsKIAkJcy0mZ3Q7dHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcy0mZ3Q7dHJ1bmNhdGUgPSBmYWxzZTsKJiM0MzsJCXMtJmd0O3RydW5jX3NpemUgPSAwOwogCX0KIAlzcGluX3VubG9ja19iaCgmYW1wO3MtJmd0O3RjZl9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhlIGB0Y2Zfc2FtcGxlX2luaXRgIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBoYW5kbGluZyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBJdCYjMzk7cyBhZGRpbmcgYW4gYGVsc2VgIGJyYW5jaCB0byB0aGUgZXhpc3RpbmcgYGlmYCBzdGF0ZW1lbnQgY2hlY2tpbmcgZm9yIHRoYXQgYXR0cmlidXRlLgoKQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgICp3YXNuJiMzOTt0KiBwcm92aWRlZCwgdGhlIGBzLSZndDt0cnVuY2F0ZWAgZmxhZyBhbmQgYHMtJmd0O3RydW5jX3NpemVgIG1lbWJlcnMgKndvdWxkbiYjMzk7dCogYmUgZXhwbGljaXRseSBtb2RpZmllZC4gVGhleSYjMzk7ZCBqdXN0IGtlZXAgd2hhdGV2ZXIgcHJldmlvdXMgdmFsdWUgdGhleSBoZWxkLCB3aGljaCBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBwcm9ibGVtIHdpdGggYWxsb2NhdGlvbiwgc2luY2UgYHNgIGlzIHByZXN1bWFibHkgYW4gZXhpc3RpbmcgYWN0aW9uIGJlaW5nIHVwZGF0ZWQuIFJpZ2h0LCBpdCBpcyBhbGxvY2F0ZWQgb3IgcmV0cmlldmVkLgoKU28sIHRoZSBuZXcgYGVsc2VgIGJyYW5jaCBleHBsaWNpdGx5IHNldHMgYHMtJmd0O3RydW5jYXRlID0gZmFsc2U7YCBhbmQgYHMtJmd0O3RydW5jX3NpemUgPSAwO2AgaWYgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJiMzOTt0IHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgY2xlYXJseS4gSSBuZWVkIHRvIGRpZyBpbnRvIGB0Y2Zfc2FtcGxlX2luaXRgIGl0c2VsZiB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBjb25zaWRlciBhbnkgZWRnZSBjYXNlcyBpdCBtaWdodCBpbnRyb2R1Y2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX3NhbXBsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9zYW1wbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzYW1wbGVfcG9saWN5W1RDQV9TQU1QTEVfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzUtXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jOjM2OnN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zNy1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM9MzIxPXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyNy1cdC5kdW1wXHQgID0gdGNmX3NhbXBsZV9kdW1wLFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMjg6XHQuaW5pdFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzI5LVx0LmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipEZWNpcGhlcmluZyBgc2AgaW4gYHRjZl9zYW1wbGVfaW5pdGAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGB0Y2Zfc2FtcGxlX2luaXRgIG5vdy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbmF0dXJlIG9mIGBzYC4gSXMgaXQgYSBwb2ludGVyPyBBIHN0cnVjdHVyZT8gQSBzaW1wbGUgdmFyaWFibGU/IEFuZCBlcXVhbGx5IGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2AgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gS25vd2luZyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSDigJMgaXMgaXQgc3RhdGljLCBvbiB0aGUgc3RhY2ssIGR5bmFtaWNhbGx5IG9uIHRoZSBoZWFwPyDigJMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgVENGLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGF0IGlzIHRoaXMgYHNgLCBhbmQgaG93IGRvZXMgaXQgbGl2ZT8gSSYjMzk7bGwgYmUgbG9va2luZyB2ZXJ5IGNsb3NlbHkgYXQgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGhlcmUuIFRoZSBhbnN3ZXJzIHRvIHRoZXNlIHF1ZXN0aW9ucyBhcmUgZm91bmRhdGlvbmFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIFRDRiBjb2RlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNjpcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuICAzNzpcdFx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4gIDM4Olx0XHRcdFx0ICAgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gIDM5Olx0XHRcdFx0ICAgdTMyIGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gIDQwOlx0e1xuICA0MTpcdFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3Rfc2FtcGxlX29wcy5uZXRfaWQpO1xuICA0MjpcdFx0Ym9vbCBiaW5kID0gZmxhZ3MgXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcbiAgNDM6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9TQU1QTEVfTUFYICYjNDM7IDFdO1xuICA0NDpcdFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XG4gIDQ1Olx0XHR1MzIgcHNhbXBsZV9ncm91cF9udW0sIHJhdGUsIGluZGV4O1xuICA0NjpcdFx0c3RydWN0IHRjZl9jaGFpbiAqZ290b19jaCA9IE5VTEw7XG4gIDQ3Olx0XHRzdHJ1Y3QgdGNfc2FtcGxlICpwYXJtO1xuICA0ODpcdFx0c3RydWN0IHRjZl9zYW1wbGUgKnM7XG4gIDQ5Olx0XHRib29sIGV4aXN0cyA9IGZhbHNlO1xuICA1MDpcdFx0aW50IHJldCwgZXJyO1xuICA1MTpcdFxuICA1MjpcdFx0aWYgKCFubGEpXG4gIDUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA1NDpcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfU0FNUExFX01BWCwgbmxhLFxuICA1NTpcdFx0XHRcdFx0XHQgIHNhbXBsZV9wb2xpY3ksIE5VTEwpO1xuICA1NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAgNTc6XHRcdFx0cmV0dXJuIHJldDtcbiAgNTg6XHRcbiAgNTk6XHRcdGlmICghdGJbVENBX1NBTVBMRV9QQVJNU10pXG4gIDYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA2MTpcdFxuICA2MjpcdFx0cGFybSA9IG5sYV9kYXRhKHRiW1RDQV9TQU1QTEVfUEFSTVNdKTtcbiAgNjM6XHRcdGluZGV4ID0gcGFybS1cdTAwM2VpbmRleDtcbiAgNjQ6XHRcdGVyciA9IHRjZl9pZHJfY2hlY2tfYWxsb2ModG4sIFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcbiAgNjU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gIDY2Olx0XHRcdHJldHVybiBlcnI7XG4gIDY3Olx0XHRleGlzdHMgPSBlcnI7XG4gIDY4Olx0XHRpZiAoZXhpc3RzIFx1MDAyNlx1MDAyNiBiaW5kKVxuICA2OTpcdFx0XHRyZXR1cm4gQUNUX1BfQk9VTkQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRpZiAoIWV4aXN0cykge1xuICA3MjpcdFx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSxcbiAgNzM6XHRcdFx0XHRcdCAgICAgXHUwMDI2YWN0X3NhbXBsZV9vcHMsIGJpbmQsIHRydWUsIGZsYWdzKTtcbiAgNzQ6XHRcdFx0aWYgKHJldCkge1xuICA3NTpcdFx0XHRcdHRjZl9pZHJfY2xlYW51cCh0biwgaW5kZXgpO1xuICA3NjpcdFx0XHRcdHJldHVybiByZXQ7XG4gIDc3Olx0XHRcdH1cbiAgNzg6XHRcdFx0cmV0ID0gQUNUX1BfQ1JFQVRFRDtcbiAgNzk6XHRcdH0gZWxzZSBpZiAoIShmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19SRVBMQUNFKSkge1xuICA4MDpcdFx0XHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xuICA4MTpcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiAgODI6XHRcdH1cbiAgODM6XHRcbiAgODQ6XHRcdGlmICghdGJbVENBX1NBTVBMRV9SQVRFXSB8fCAhdGJbVENBX1NBTVBMRV9QU0FNUExFX0dST1VQXSkge1xuICA4NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NhbXBsZSByYXRlIGFuZCBncm91cCBhcmUgcmVxdWlyZWRcJiMzNDspO1xuICA4NjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuICA4NzpcdFx0XHRnb3RvIHJlbGVhc2VfaWRyO1xuICA4ODpcdFx0fVxuICA4OTpcdFxuICA5MDpcdFx0ZXJyID0gdGNmX2FjdGlvbl9jaGVja19jdHJsYWN0KHBhcm0tXHUwMDNlYWN0aW9uLCB0cCwgXHUwMDI2Z290b19jaCwgZXh0YWNrKTtcbiAgOTE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gIDkyOlx0XHRcdGdvdG8gcmVsZWFzZV9pZHI7XG4gIDkzOlx0XG4gIDk0Olx0XHRyYXRlID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9SQVRFXSk7XG4gIDk1Olx0XHRpZiAoIXJhdGUpIHtcbiAgOTY6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtpbnZhbGlkIHNhbXBsZSByYXRlXCYjMzQ7KTtcbiAgOTc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAgOTg6XHRcdFx0Z290byBwdXRfY2hhaW47XG4gIDk5Olx0XHR9XG4gMTAwOlx0XHRwc2FtcGxlX2dyb3VwX251bSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUF0pO1xuIDEwMTpcdFx0cHNhbXBsZV9ncm91cCA9IHBzYW1wbGVfZ3JvdXBfZ2V0KG5ldCwgcHNhbXBsZV9ncm91cF9udW0pO1xuIDEwMjpcdFx0aWYgKCFwc2FtcGxlX2dyb3VwKSB7XG4gMTAzOlx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTA0Olx0XHRcdGdvdG8gcHV0X2NoYWluO1xuIDEwNTpcdFx0fVxuIDEwNjpcdFxuIDEwNzpcdFx0cyA9IHRvX3NhbXBsZSgqYSk7XG4gMTA4Olx0XG4gMTA5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cy1cdTAwM2V0Y2ZfbG9jayk7XG4gMTEwOlx0XHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cdTAwM2VhY3Rpb24sIGdvdG9fY2gpO1xuIDExMTpcdFx0cy1cdTAwM2VyYXRlID0gcmF0ZTtcbiAxMTI6XHRcdHMtXHUwMDNlcHNhbXBsZV9ncm91cF9udW0gPSBwc2FtcGxlX2dyb3VwX251bTtcbiAxMTM6XHRcdHBzYW1wbGVfZ3JvdXAgPSByY3VfcmVwbGFjZV9wb2ludGVyKHMtXHUwMDNlcHNhbXBsZV9ncm91cCwgcHNhbXBsZV9ncm91cCxcbiAxMTQ6XHRcdFx0XHRcdFx0ICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKSk7XG4gMTE1Olx0XG4gMTE2Olx0XHRpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkge1xuIDExNzpcdFx0XHRzLVx1MDAzZXRydW5jYXRlID0gdHJ1ZTtcbiAxMTg6XHRcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSk7XG4gMTE5Olx0XHR9IGVsc2Uge1xuIDEyMDpcdFx0XHRzLVx1MDAzZXRydW5jYXRlID0gZmFsc2U7XG4gMTIxOlx0XHRcdHMtXHUwMDNldHJ1bmNfc2l6ZSA9IDA7XG4gMTIyOlx0XHR9XG4gMTIzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiAxMjQ6XHRcbiAxMjU6XHRcdGlmIChwc2FtcGxlX2dyb3VwKVxuIDEyNjpcdFx0XHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcbiAxMjc6XHRcdGlmIChnb3RvX2NoKVxuIDEyODpcdFx0XHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcbiAxMjk6XHRcbiAxMzA6XHRcdHJldHVybiByZXQ7XG4gMTMxOlx0cHV0X2NoYWluOlxuIDEzMjpcdFx0aWYgKGdvdG9fY2gpXG4gMTMzOlx0XHRcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xuIDEzNDpcdHJlbGVhc2VfaWRyOlxuIDEzNTpcdFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGtleSBhZGp1c3RtZW50IGlzIHdpdGhpbiBgdGNmX3NhbXBsZV9pbml0YC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgYSBjaGVjayB0aGF0IGV4cGxpY2l0bHkgcmVzZXRzIHRoZSBgcy0mZ3Q7dHJ1bmNhdGVgIGFuZCBgcy0mZ3Q7dHJ1bmNfc2l6ZWAgdmFyaWFibGVzICppZiogdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZSBpc24mIzM5O3QgcHJvdmlkZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgY3J1Y2lhbDogaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1ZyB3aGVuIGFuIGV4aXN0aW5nIGFjdGlvbiBpcyBiZWluZyAqcmVwbGFjZWQqIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYGV4aXN0c2AgaXMgdHJ1ZSBhbmQgdGhlIGBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0VgIGZsYWcgaXMgYWN0aXZlLiBXaXRob3V0IHRoaXMgcmVzZXQsIHdlJiMzOTtkIGJlIHJldGFpbmluZyBvbGQgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgdmFsdWVzIGluIHRoZSBuZXcgY29uZmlndXJhdGlvbi4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIuCgpUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAoc3BlY2lmaWNhbGx5LCB0aGUgYHRjYCBhY3Rpb25zKSBoYW5kbGVzIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGlzIHR5cGUgb2YgbW9kaWZpY2F0aW9uLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHJpZ29yb3VzIGZ1enppbmcgdG8gZW5zdXJlIHN0YWJpbGl0eSBhbmQgY2F0Y2ggYW55IGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gb3Zlcmxvb2tlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgdGhlIGBhY3Rfc2FtcGxlYCBhY3Rpb24uIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9TQU1QTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz03NDI9Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzUxLVxubmV0L3NjaGVkL0tjb25maWc6NzUyOmNvbmZpZyBORVRfQUNUX1NBTVBMRVxubmV0L3NjaGVkL0tjb25maWctNzUzLVx0dHJpc3RhdGUgXCYjMzQ7VHJhZmZpYyBTYW1wbGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLgoKKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmc7IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBlbGVtZW50cyB0aGF0IHVuZGVycGluIHRoZSBzaXR1YXRpb24uIFdoYXQgYXJlIHRoZSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBkcml2ZSB0aGlzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBNeSBmb2N1cyBpcyB0byBjcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgdG8gZXhwbGFpbiB0aGlzIHByb2JsZW0uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBwbGFjZSB0byBzdGFydCB0byBnbyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTI6XHRjb25maWcgTkVUX0FDVF9TQU1QTEVcbiA3NTM6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYWZmaWMgU2FtcGxpbmdcJiMzNDtcbiA3NTQ6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3NTU6XHRcdHNlbGVjdCBQU0FNUExFXG4gNzU2Olx0XHRoZWxwXG4gNzU3Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0IHNhbXBsaW5nIHRjIGFjdGlvbi4gVGhlIHBhY2tldCBzYW1wbGVcbiA3NTg6XHRcdCAgYWN0aW9uIGNvbnNpc3RzIG9mIHN0YXRpc3RpY2FsbHkgY2hvb3NpbmcgcGFja2V0cyBhbmQgc2FtcGxpbmdcbiA3NTk6XHRcdCAgdGhlbSB1c2luZyB0aGUgcHNhbXBsZSBtb2R1bGUuXG4gNzYwOlx0XG4gNzYxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3NjI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9zYW1wbGUuXG4gNzYzOlx0XG4gNzY0Olx0Y29uZmlnIE5FVF9BQ1RfTkFUXG4gNzY1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdGF0ZWxlc3MgTkFUXCYjMzQ7XG4gNzY2Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gNzY3Olx0XHRoZWxwXG4gNzY4Olx0XHQgIFNheSBZIGhlcmUgdG8gZG8gc3RhdGVsZXNzIE5BVCBvbiBJUHY0IHBhY2tldHMuICBZb3Ugc2hvdWxkIHVzZVxuIDc2OTpcdFx0ICBuZXRmaWx0ZXIgZm9yIE5BVCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuIDc3MDpcdFxuIDc3MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOgoKKipUaGlua2luZyBUaHJvdWdoIE5ldHdvcmsgQWN0aXZhdGlvbiBhbmQgU2FtcGxpbmcgUmVxdWlyZW1lbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JrIGFjdGl2YXRpb24gYW5kIGNsYXNzaWZpY2F0aW9uIGFjdGl2aXR5IG5vdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYE5FVF9BQ1RfU0FNUExFYCBhbmQgYE5FVF9DTFNfQUNUYCBkZWZpbmVkLiBUaG9zZSBhcmUgY3JpdGljYWwuIEFuZCBJIHNlZSB0aGF0IGBQU0FNUExFYCBoYXMgYmVlbiBzZWxlY3RlZDsgdGhhdCYjMzk7cyBnb29kLiBOb3csIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQ0xTX0FDVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBldmVyeXRoaW5nIHRoYXQgKml0KiBkZXBlbmRzIG9uIGlzIGFsc28gc2V0IGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBjb25mbGljdHMgb3IgbWlzc2luZyBwaWVjZXMgdGhhdCB3aWxsIGJpdGUgbWUgbGF0ZXIuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzAxLVxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxubmV0L3NjaGVkL0tjb25maWctNzAzLVx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTkVUX0NMU19BQ1QgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGZvY3VzIGlzIGNsZWFyOiB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19BQ1RgLiBHaXZlbiB0aGF0LCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBhcmVhcyBvZiBjb25jZXJuLiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBtb2R1bGVzPyBVc2Vyc3BhY2UgdXRpbGl0aWVzPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IC0gYXJlIHdlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBuZXR3b3JraW5nIHN0YWNrLCBvciBhIG1vcmUgZ2VuZXJhbCBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZS4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIG5hdmlnYXRlIGEgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5OiBhcmUgd2UgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWxpdHksIGhhcmR3YXJlIHN1cHBvcnQsIG9yIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGRlcGVuZGVuY3k/IFNlY3VyaXR5PyBQZXJmb3JtYW5jZT8gUmVzb3VyY2UgY29uc3VtcHRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIG1peCBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IGxpbmtzIOKAkyBjYXNjYWRpbmcgZGVwZW5kZW5jaWVzIGFyZSBhbG1vc3QgaW5ldml0YWJsZSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBwb3RlbnRpYWwgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFzIHdlbGwsIGFsdGhvdWdoIHRoZSBrZXJuZWwgdHJpZXMgaXRzIGJlc3QgdG8gcHJldmVudCB0aGlzLCBvZiBjb3Vyc2UuCgpNeSBpbW1lZGlhdGUgZ29hbHMgYXJlIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHZ1bG5lcmFiaWxpdGllcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgYXJjaGl0ZWN0dXJhbCBmbGF3cywgb3IgcG90ZW50aWFsIHBvaW50cyBvZiBmcmFnaWxpdHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yayBlbGVtZW50cy4gSSYjMzk7bSBhbHNvIHByZXBhcmluZyB0byBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdmFyaW91cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIG9yIHJ1bnRpbWUgb3B0aW9ucy4gVGhlIGRldGFpbHMgaW4gdGhlIGFjdHVhbCBkZXBlbmRlbmN5IGdyYXBoIGFyZSB3aGF0IHRydWx5IG1hdHRlcnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMjpcdGNvbmZpZyBORVRfQ0xTX0FDVFxuIDcwMzpcdFx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4gNzA0Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDcwNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1NcbiA3MDY6XHRcdGhlbHBcbiA3MDc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIEFjdGlvbnNcbiA3MDg6XHRcdCAgZ2V0IGF0dGFjaGVkIHRvIGNsYXNzaWZpZXJzIGFuZCBhcmUgaW52b2tlZCBhZnRlciBhIHN1Y2Nlc3NmdWxcbiA3MDk6XHRcdCAgY2xhc3NpZmljYXRpb24uIFRoZXkgYXJlIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBjbGFzc2lmaWNhdGlvblxuIDcxMDpcdFx0ICByZXN1bHQsIGluc3RhbnRseSBkcm9wIG9yIHJlZGlyZWN0IHBhY2tldHMsIGV0Yy5cbiA3MTE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVENGIFNhbXBsaW5nIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMuIGBORVRfQUNUX1NBTVBMRWAgYW5kIGBORVRfQ0xTX0FDVGAg4oCTIHRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVsZW1lbnRzIGhlcmUuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBmb3Igc2FtcGxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIHdpdGhpbiB0aGlzIG5ldHdvcmtpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGUgc2FtcGxpbmcgbWVjaGFuaXNtLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGFjdGlvbiBmdW5jdGlvbj8gV2hhdCBhYm91dCBgdGNmX3NhbXBsZV9hY3RgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW4gYXNzb2NpYXRlZCBhY3Rpb24gb3IgcHJvY2Vzc2luZyBjb21wb25lbnQgdGhhdCBkaXJlY3RseSB3b3JrcyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gR2V0dGluZyB0aGUgd2hvbGUgcGljdHVyZSBpcyBrZXkgZm9yIGEgdHJ1bHkgZWZmZWN0aXZlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9zYW1wbGUuYz0xNTE9c3RhdGljIGJvb2wgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMTY2LVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzoxNjc6VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9zYW1wbGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTE2OC1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTMyMT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMjQtXHQub3duZXJcdCAgPSBUSElTX01PRFVMRSxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzI1Olx0LmFjdFx0ICA9IHRjZl9zYW1wbGVfYWN0LFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMjYtXHQuc3RhdHNfdXBkYXRlID0gdGNmX3NhbXBsZV9zdGF0c191cGRhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipJbml0aWFsIEFjdGlvbiBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbiBhbmQgQ29udGV4dHVhbGl6YXRpb24qKgoKUmlnaHQsIHNvLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdGNmX3NhbXBsZV9hY3RgIGlzIGluZGVlZCB0aGUgYWN0aW9uIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MgZ2V0IHRob3NlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBhcmUgY29ycmVjdGx5IGFkZGVkIHRvIHRoYXQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBzeXN0ZW0gdG8gcmVjb2duaXplIGFuZCBoYW5kbGUgdGhlbSBwcm9wZXJseS4KCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byByZXZpc2l0IGBORVRfQUNUX1NBTVBMRWAuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAsIHdoaWNoIGlzIG5lc3RlZCB1bmRlciBgTkVUX1NDSEVEYC4gU28sIHRoZSBzdHJ1Y3R1cmUgaXMgY2xlYXIuIE5vIHJlZCBmbGFncyBhdCB0aGlzIHN0YWdlLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IHN0cnVjdHVyZSBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGludGVuZGVkIGZsb3cgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE5FVF9BQ1RfU0FNUExFYCBkb2VzbiYjMzk7dCBuZWVkIGFueSBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzMKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgdGhlIG5lZWQgZm9yIGBORVRfU0NIRURgIGhlcmUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlLiBMb29raW5nIGF0IHRoZSBjb25maWdzLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGFuZCBgTkVUX0FDVF9TQU1QTEVgLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiB0aG9zZSBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBzeW1ib2xzLgoKVGhlIGdpc3Qgb2YgaXQgaXMgYSBidWcgZml4IGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYC4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBmbGF3IHdpdGhpbiB0aGUgYHRjZl9zYW1wbGVfaW5pdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0cnVuY2F0aW9uIHNldHRpbmdzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcgYSB0cmFmZmljIGNvbnRyb2wgKHRjKSBzYW1wbGUgYWN0aW9uLiBJdCBzZWVtcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzbiYjMzk7dCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlIG9sZCB0cnVuY2F0aW9uIHZhbHVlcyB3b3VsZCBwZXJzaXN0LCB3aGljaCBpcyBjbGVhcmx5IHVuaW50ZW5kZWQuIFRoaXMgd291bGQgZGVmaW5pdGVseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWsgaW5mb3JtYXRpb24gb3IgY2F1c2Ugb3RoZXIgaXNzdWVzLCBtYWtpbmcgdGhpcyBhIGNyaXRpY2FsIGZpeC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbGV2ZWwsIGNvbmNlcm5pbmcgdGMgYWN0aW9ucywgYW5kIGlzIGV4cG9zZWQgdmlhIG5ldGxpbmsuIEdpdmVuIHRoaXMgdXNlcnNwYWNlIGFjY2Vzc2liaWxpdHksIEkmIzM5O2Qgc2F5IHRoaXMgYXJlYSBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZyB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHJlZ3Jlc3Npb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHByb2NlZWQgd2l0aCB0aGUgc2V0LXJlc3VsdHMgY2FsbC4gVGltZSB0byBldmFsdWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9zYW1wbGVfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX3NhbXBsZV9pbml0YCBpbiBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzIG5vdCBwcm92aWRlZC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgdGMgc2FtcGxlIGFjdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXRhaW4gdGhlIG9sZCB0cnVuY2F0aW9uIHNldHRpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAodGMgYWN0aW9ucykgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9zYW1wbGVfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX3NhbXBsZV9pbml0YCBpbiBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzIG5vdCBwcm92aWRlZC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgdGMgc2FtcGxlIGFjdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXRhaW4gdGhlIG9sZCB0cnVuY2F0aW9uIHNldHRpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAodGMgYWN0aW9ucykgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIGluIGB0Y2Zfc2FtcGxlX2luaXRgIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyBgdGNgIHNhbXBsZSBhY3Rpb24gZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIG9taXRzIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIFRoZSBhY3Rpb24gc3RydWN0dXJlIGlzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHNvIHRoZSBtZW1vcnkgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHJldGFpbmluZyBzdGFsZSBzdGF0ZSBkdXJpbmcgYW4gdXBkYXRlLCByYXRoZXIgdGhhbiBleHBvc2luZyBvciBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxMzQ5OGVkMGFkZjY5MzFhZmVkYWQxY2Q2OGRjZTM4YjY2YjQzNjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxODoyMzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCmluZGV4IDJjZWI0ZDE0MWI3MTMuLjJiZGM3YTBlYjZkNjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwpAQCAtMTE2LDYgJiM0MzsxMTYsOSBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwKIAlpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkgewogCQlzLSZndDt0cnVuY2F0ZSA9IHRydWU7CiAJCXMtJmd0O3RydW5jX3NpemUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXMtJmd0O3RydW5jYXRlID0gZmFsc2U7CiYjNDM7CQlzLSZndDt0cnVuY19zaXplID0gMDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzLSZndDt0Y2ZfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZS4gVGhlIG9yaWdpbmFsIGNvZGUgb25seSBzZXRzIGBzLSZndDt0cnVuY2F0ZWAgYW5kIGBzLSZndDt0cnVuY19zaXplYCBpZiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBwcmVzZW50IGluIHRoZSB0YWJsZSBgdGJgLiBUaGlzIG5ldyBjb2RlIGFkZHMgYSBkZWZhdWx0IGluaXRpYWxpemF0aW9uOyBzbywgaWYgdGhlIGF0dHJpYnV0ZSBpcyAqbm90KiBwcmVzZW50LCBgcy0mZ3Q7dHJ1bmNhdGVgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBmYWxzZWAgYW5kIGBzLSZndDt0cnVuY19zaXplYCBpcyBzZXQgdG8gYDBgLgoKTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0IGEgc2Vjb25kLi4uIGBzYCBpcyBhIGBzdHJ1Y3QgdGNmX3NhbXBsZWAsIHJpZ2h0PyBNeSBndXQgdGVsbHMgbWUgdGhhdCBgc2Agc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiB0aGlzIHBhdGNoIGlzIHJlZHVuZGFudCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlcyBvdmVyaGVhZC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbiB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBhbHJlYWR5IHplcm9pbmcgdGhlIHN0cnVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NhbXBsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9zYW1wbGVfb3BzLm5ldF9pZCk7XG4gIDQyOlx0XHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuICA0MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1NBTVBMRV9NQVggJiM0MzsgMV07XG4gIDQ0Olx0XHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqcHNhbXBsZV9ncm91cDtcbiAgNDU6XHRcdHUzMiBwc2FtcGxlX2dyb3VwX251bSwgcmF0ZSwgaW5kZXg7XG4gIDQ2Olx0XHRzdHJ1Y3QgdGNmX2NoYWluICpnb3RvX2NoID0gTlVMTDtcbiAgNDc6XHRcdHN0cnVjdCB0Y19zYW1wbGUgKnBhcm07XG4gIDQ4Olx0XHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcztcbiAgNDk6XHRcdGJvb2wgZXhpc3RzID0gZmFsc2U7XG4gIDUwOlx0XHRpbnQgcmV0LCBlcnI7XG4gIDUxOlx0XG4gIDUyOlx0XHRpZiAoIW5sYSlcbiAgNTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDU0Olx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9TQU1QTEVfTUFYLCBubGEsXG4gIDU1Olx0XHRcdFx0XHRcdCAgc2FtcGxlX3BvbGljeSwgTlVMTCk7XG4gIDU2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA1NzpcdFx0XHRyZXR1cm4gcmV0O1xuICA1ODpcdFxuICA1OTpcdFx0aWYgKCF0YltUQ0FfU0FNUExFX1BBUk1TXSlcbiAgNjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDYxOlx0XG4gIDYyOlx0XHRwYXJtID0gbmxhX2RhdGEodGJbVENBX1NBTVBMRV9QQVJNU10pO1xuICA2MzpcdFx0aW5kZXggPSBwYXJtLVx1MDAzZWluZGV4O1xuICA2NDpcdFx0ZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgXHUwMDI2aW5kZXgsIGEsIGJpbmQpO1xuICA2NTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAgNjY6XHRcdFx0cmV0dXJuIGVycjtcbiAgNjc6XHRcdGV4aXN0cyA9IGVycjtcbiAgNjg6XHRcdGlmIChleGlzdHMgXHUwMDI2XHUwMDI2IGJpbmQpXG4gIDY5Olx0XHRcdHJldHVybiBBQ1RfUF9CT1VORDtcbiAgNzA6XHRcbiAgNzE6XHRcdGlmICghZXhpc3RzKSB7XG4gIDcyOlx0XHRcdHJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLFxuICA3MzpcdFx0XHRcdFx0ICAgICBcdTAwMjZhY3Rfc2FtcGxlX29wcywgYmluZCwgdHJ1ZSwgZmxhZ3MpO1xuICA3NDpcdFx0XHRpZiAocmV0KSB7XG4gIDc1Olx0XHRcdFx0dGNmX2lkcl9jbGVhbnVwKHRuLCBpbmRleCk7XG4gIDc2Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAgNzc6XHRcdFx0fVxuICA3ODpcdFx0XHRyZXQgPSBBQ1RfUF9DUkVBVEVEO1xuICA3OTpcdFx0fSBlbHNlIGlmICghKGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0UpKSB7XG4gIDgwOlx0XHRcdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XG4gIDgxOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuICA4MjpcdFx0fVxuICA4MzpcdFxuICA4NDpcdFx0aWYgKCF0YltUQ0FfU0FNUExFX1JBVEVdIHx8ICF0YltUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVBdKSB7XG4gIDg1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7c2FtcGxlIHJhdGUgYW5kIGdyb3VwIGFyZSByZXF1aXJlZFwmIzM0Oyk7XG4gIDg2Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gIDg3Olx0XHRcdGdvdG8gcmVsZWFzZV9pZHI7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRlcnIgPSB0Y2ZfYWN0aW9uX2NoZWNrX2N0cmxhY3QocGFybS1cdTAwM2VhY3Rpb24sIHRwLCBcdTAwMjZnb3RvX2NoLCBleHRhY2spO1xuICA5MTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAgOTI6XHRcdFx0Z290byByZWxlYXNlX2lkcjtcbiAgOTM6XHRcbiAgOTQ6XHRcdHJhdGUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1JBVEVdKTtcbiAgOTU6XHRcdGlmICghcmF0ZSkge1xuICA5NjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2ludmFsaWQgc2FtcGxlIHJhdGVcJiMzNDspO1xuICA5NzpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuICA5ODpcdFx0XHRnb3RvIHB1dF9jaGFpbjtcbiAgOTk6XHRcdH1cbiAxMDA6XHRcdHBzYW1wbGVfZ3JvdXBfbnVtID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9QU0FNUExFX0dST1VQXSk7XG4gMTAxOlx0XHRwc2FtcGxlX2dyb3VwID0gcHNhbXBsZV9ncm91cF9nZXQobmV0LCBwc2FtcGxlX2dyb3VwX251bSk7XG4gMTAyOlx0XHRpZiAoIXBzYW1wbGVfZ3JvdXApIHtcbiAxMDM6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxMDQ6XHRcdFx0Z290byBwdXRfY2hhaW47XG4gMTA1Olx0XHR9XG4gMTA2Olx0XG4gMTA3Olx0XHRzID0gdG9fc2FtcGxlKCphKTtcbiAxMDg6XHRcbiAxMDk6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiAxMTA6XHRcdGdvdG9fY2ggPSB0Y2ZfYWN0aW9uX3NldF9jdHJsYWN0KCphLCBwYXJtLVx1MDAzZWFjdGlvbiwgZ290b19jaCk7XG4gMTExOlx0XHRzLVx1MDAzZXJhdGUgPSByYXRlO1xuIDExMjpcdFx0cy1cdTAwM2Vwc2FtcGxlX2dyb3VwX251bSA9IHBzYW1wbGVfZ3JvdXBfbnVtO1xuIDExMzpcdFx0cHNhbXBsZV9ncm91cCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocy1cdTAwM2Vwc2FtcGxlX2dyb3VwLCBwc2FtcGxlX2dyb3VwLFxuIDExNDpcdFx0XHRcdFx0XHQgICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spKTtcbiAxMTU6XHRcbiAxMTY6XHRcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XG4gMTE3Olx0XHRcdHMtXHUwMDNldHJ1bmNhdGUgPSB0cnVlO1xuIDExODpcdFx0XHRzLVx1MDAzZXRydW5jX3NpemUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKTtcbiAxMTk6XHRcdH0gZWxzZSB7XG4gMTIwOlx0XHRcdHMtXHUwMDNldHJ1bmNhdGUgPSBmYWxzZTtcbiAxMjE6XHRcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gMDtcbiAxMjI6XHRcdH1cbiAxMjM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spO1xuIDEyNDpcdFxuIDEyNTpcdFx0aWYgKHBzYW1wbGVfZ3JvdXApXG4gMTI2Olx0XHRcdHBzYW1wbGVfZ3JvdXBfcHV0KHBzYW1wbGVfZ3JvdXApO1xuIDEyNzpcdFx0aWYgKGdvdG9fY2gpXG4gMTI4Olx0XHRcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xuIDEyOTpcdFxuIDEzMDpcdFx0cmV0dXJuIHJldDtcbiAxMzE6XHRwdXRfY2hhaW46XG4gMTMyOlx0XHRpZiAoZ290b19jaClcbiAxMzM6XHRcdFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XG4gMTM0Olx0cmVsZWFzZV9pZHI6XG4gMTM1Olx0XHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xuIDEzNjpcdFx0cmV0dXJuIGVycjtcbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0c3RhdGljIHZvaWQgdGNmX3NhbXBsZV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGNmX3NhbXBsZWAgQWN0aW9uIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcyBhbiBgZWxzZWAgYnJhbmNoIHRvIGluaXRpYWxpemUgYHMtJmd0O3RydW5jYXRlYCBhbmQgYHMtJmd0O3RydW5jX3NpemVgIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJiMzOTt0IHByZXNlbnQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgaG93IGBzYCBpcyBhbGxvY2F0ZWQuIEkgcmVtZW1iZXIgdGhhdCBgc2AgaXMgYWxsb2NhdGVkIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHdoaWNoIGNhbGxzIGBremFsbG9jYCBvciBzaW1pbGFyLCBzbyBpdCYjMzk7cyAqemVyby1pbml0aWFsaXplZCogd2hlbiBjcmVhdGVkLgoKU28sIHdoeSB0aGUgcGF0Y2g/IFRoYXTigJlzIHRoZSBrZXkuIFRoZW4gaXQgaGl0cyBtZSEgYHRjZl9zYW1wbGVfaW5pdGAgY2FuIGJlIHVzZWQgdG8gKnJlcGxhY2UqIGFuIGV4aXN0aW5nIGFjdGlvbi4gT2theSwgdGhlIGltcG9ydGFudCBjb2RlIHNuaXBwZXQgaXM6CgpgYGBjCglpZiAoIWV4aXN0cykgewoJCXJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLAoJCQkJICAgICAmYW1wO2FjdF9zYW1wbGVfb3BzLCBiaW5kLCB0cnVlLCBmbGFncyk7Ci4uLgoJfSBlbHNlIGlmICghKGZsYWdzICZhbXA7IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRSkpIHsKCQl0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpOwoJCXJldHVybiAtRUVYSVNUOwoJfQpgYGAKCklmIHRoZSBhY3Rpb24gYWxyZWFkeSAqZXhpc3RzKiBhbmQgYFRDQV9BQ1RfRkxBR1NfUkVQTEFDRWAgaXMgc2V0LCBpdCB1cGRhdGVzIHRoZSBleGlzdGluZyBhY3Rpb24gYHNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIElmIHRoZSBvbGQgYWN0aW9uIGhhZCBgcy0mZ3Q7dHJ1bmNhdGUgPSB0cnVlYCBhbmQgYHMtJmd0O3RydW5jX3NpemUgPSBYYCwgYW5kIHRoZSBuZXcgbmV0bGluayBtZXNzYWdlICpkb2VzbiYjMzk7dCogcHJvdmlkZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCwgdGhlIG9sZCB2YWx1ZXMgd291bGQgYmUgcmV0YWluZWQhIFRoaXMgcGF0Y2ggZXNzZW50aWFsbHkgcmVzZXRzIGBzLSZndDt0cnVuY2F0ZWAgYW5kIGBzLSZndDt0cnVuY19zaXplYCB0byBgZmFsc2VgIGFuZCBgMGAgd2hlbiB0aGUgYXR0cmlidXRlIGlzbiYjMzk7dCBwcm92aWRlZCwgd2hpY2ggZml4ZXMgdGhlIGZhaWx1cmUgdG8gY2xlYXIgdGhlIHRydW5jYXRpb24gc2V0dGluZ3Mgd2hlbiByZXBsYWNpbmcgYW4gYWN0aW9uLgoKU28sIGlzIHRoaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IE5vLCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgYnkgYWxsb2NhdGlvbi4gSG93ZXZlciwgdGhpcyBpcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGZhaWxzIHRvIGNsZWFyIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcHJldmlvdXMgYWN0aW9uLgoKRG9lcyB0aGlzIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBqdXN0IHJldXNlcyBvbGQsIHBvdGVudGlhbGx5IHN0YWxlLCB2YWx1ZXMuIERvZXMgaXQgY2F1c2UgYW4gaW5mb3JtYXRpb24gbGVhaz8gTm90IGRpcmVjdGx5LCBpdCYjMzk7cyBqdXN0IGEgbG9naWMgYnVnIHdoZXJlIGEgZmllbGQgaXNuJiMzOTt0IGNsZWFyZWQuCgpUaGUgbmV4dCB0aGluZyB0byBjaGVjayBpcywgYXJlIGBzLSZndDt0cnVuY2F0ZWAgb3IgYHMtJmd0O3RydW5jX3NpemVgIHVzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gTG9va3MgbGlrZSB0aGV5IGFyZSB1c2VkIGluIGB0Y2Zfc2FtcGxlX2FjdGAgKG9yIHNpbWlsYXIpLiBUaGF0IHdpbGwgYmUgd29ydGggY2hlY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9zYW1wbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdHtcbiAxNDE6XHRcdHN0cnVjdCB0Y2Zfc2FtcGxlICpzID0gdG9fc2FtcGxlKGEpO1xuIDE0MjpcdFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XG4gMTQzOlx0XG4gMTQ0Olx0XHQvKiBsYXN0IHJlZmVyZW5jZSB0byBhY3Rpb24sIG5vIG5lZWQgdG8gbG9jayAqL1xuIDE0NTpcdFx0cHNhbXBsZV9ncm91cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy1cdTAwM2Vwc2FtcGxlX2dyb3VwLCAxKTtcbiAxNDY6XHRcdFJDVV9JTklUX1BPSU5URVIocy1cdTAwM2Vwc2FtcGxlX2dyb3VwLCBOVUxMKTtcbiAxNDc6XHRcdGlmIChwc2FtcGxlX2dyb3VwKVxuIDE0ODpcdFx0XHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIGJvb2wgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDE1MjpcdHtcbiAxNTM6XHRcdHN3aXRjaCAoZGV2LVx1MDAzZXR5cGUpIHtcbiAxNTQ6XHRcdGNhc2UgQVJQSFJEX1RVTk5FTDpcbiAxNTU6XHRcdGNhc2UgQVJQSFJEX1RVTk5FTDY6XG4gMTU2Olx0XHRjYXNlIEFSUEhSRF9TSVQ6XG4gMTU3Olx0XHRjYXNlIEFSUEhSRF9JUEdSRTpcbiAxNTg6XHRcdGNhc2UgQVJQSFJEX0lQNkdSRTpcbiAxNTk6XHRcdGNhc2UgQVJQSFJEX1ZPSUQ6XG4gMTYwOlx0XHRjYXNlIEFSUEhSRF9OT05FOlxuIDE2MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTYyOlx0XHRkZWZhdWx0OlxuIDE2MzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAxNjQ6XHRcdH1cbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9zYW1wbGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gMTY4Olx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gMTY5Olx0XHRcdFx0XHQgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXG4gMTcwOlx0e1xuIDE3MTpcdFx0c3RydWN0IHRjZl9zYW1wbGUgKnMgPSB0b19zYW1wbGUoYSk7XG4gMTcyOlx0XHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqcHNhbXBsZV9ncm91cDtcbiAxNzM6XHRcdHU4IGNvb2tpZV9kYXRhW1RDX0NPT0tJRV9NQVhfU0laRV07XG4gMTc0Olx0XHRzdHJ1Y3QgcHNhbXBsZV9tZXRhZGF0YSBtZCA9IHt9O1xuIDE3NTpcdFx0c3RydWN0IHRjX2Nvb2tpZSAqdXNlcl9jb29raWU7XG4gMTc2Olx0XHRpbnQgcmV0dmFsO1xuIDE3NzpcdFxuIDE3ODpcdFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNnMtXHUwMDNldGNmX3RtKTtcbiAxNzk6XHRcdGJzdGF0c191cGRhdGUodGhpc19jcHVfcHRyKHMtXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xuIDE4MDpcdFx0cmV0dmFsID0gUkVBRF9PTkNFKHMtXHUwMDNldGNmX2FjdGlvbik7XG4gMTgxOlx0XG4gMTgyOlx0XHRwc2FtcGxlX2dyb3VwID0gcmN1X2RlcmVmZXJlbmNlX2JoKHMtXHUwMDNlcHNhbXBsZV9ncm91cCk7XG4gMTgzOlx0XG4gMTg0Olx0XHQvKiByYW5kb21seSBzYW1wbGUgcGFja2V0cyBhY2NvcmRpbmcgdG8gcmF0ZSAqL1xuIDE4NTpcdFx0aWYgKHBzYW1wbGVfZ3JvdXAgXHUwMDI2XHUwMDI2IChnZXRfcmFuZG9tX3UzMl9iZWxvdyhzLVx1MDAzZXJhdGUpID09IDApKSB7XG4gMTg2Olx0XHRcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkge1xuIDE4NzpcdFx0XHRcdG1kLmluX2lmaW5kZXggPSBza2ItXHUwMDNlc2tiX2lpZjtcbiAxODg6XHRcdFx0XHRtZC5vdXRfaWZpbmRleCA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleDtcbiAxODk6XHRcdFx0fSBlbHNlIHtcbiAxOTA6XHRcdFx0XHRtZC5pbl9pZmluZGV4ID0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xuIDE5MTpcdFx0XHR9XG4gMTkyOlx0XG4gMTkzOlx0XHRcdC8qIG9uIGluZ3Jlc3MsIHRoZSBtYWMgaGVhZGVyIGdldHMgcG9wcGVkLCBzbyBwdXNoIGl0IGJhY2sgKi9cbiAxOTQ6XHRcdFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2IHRjZl9zYW1wbGVfZGV2X29rX3B1c2goc2tiLVx1MDAzZWRldikpXG4gMTk1Olx0XHRcdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gMTk2Olx0XG4gMTk3Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxOTg6XHRcdFx0dXNlcl9jb29raWUgPSByY3VfZGVyZWZlcmVuY2UoYS1cdTAwM2V1c2VyX2Nvb2tpZSk7XG4gMTk5Olx0XHRcdGlmICh1c2VyX2Nvb2tpZSkge1xuIDIwMDpcdFx0XHRcdG1lbWNweShjb29raWVfZGF0YSwgdXNlcl9jb29raWUtXHUwMDNlZGF0YSxcbiAyMDE6XHRcdFx0XHQgICAgICAgdXNlcl9jb29raWUtXHUwMDNlbGVuKTtcbiAyMDI6XHRcdFx0XHRtZC51c2VyX2Nvb2tpZSA9IGNvb2tpZV9kYXRhO1xuIDIwMzpcdFx0XHRcdG1kLnVzZXJfY29va2llX2xlbiA9IHVzZXJfY29va2llLVx1MDAzZWxlbjtcbiAyMDQ6XHRcdFx0fVxuIDIwNTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAyMDY6XHRcbiAyMDc6XHRcdFx0bWQudHJ1bmNfc2l6ZSA9IHMtXHUwMDNldHJ1bmNhdGUgPyBzLVx1MDAzZXRydW5jX3NpemUgOiBza2ItXHUwMDNlbGVuO1xuIDIwODpcdFx0XHRwc2FtcGxlX3NhbXBsZV9wYWNrZXQocHNhbXBsZV9ncm91cCwgc2tiLCBzLVx1MDAzZXJhdGUsIFx1MDAyNm1kKTtcbiAyMDk6XHRcbiAyMTA6XHRcdFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2IHRjZl9zYW1wbGVfZGV2X29rX3B1c2goc2tiLVx1MDAzZWRldikpXG4gMjExOlx0XHRcdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gMjEyOlx0XHR9XG4gMjEzOlx0XG4gMjE0Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDIxNTpcdH1cbiAyMTY6XHRcbiAyMTc6XHRzdGF0aWMgdm9pZCB0Y2Zfc2FtcGxlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuIDIxODpcdFx0XHRcdFx0ICAgIHU2NCBkcm9wcywgdTY0IGxhc3R1c2UsIGJvb2wgaHcpXG4gMjE5Olx0e1xuIDIyMDpcdFx0c3RydWN0IHRjZl9zYW1wbGUgKnMgPSB0b19zYW1wbGUoYSk7XG4gMjIxOlx0XHRzdHJ1Y3QgdGNmX3QgKnRtID0gXHUwMDI2cy1cdTAwM2V0Y2ZfdG07XG4gMjIyOlx0XG4gMjIzOlx0XHR0Y2ZfYWN0aW9uX3VwZGF0ZV9zdGF0cyhhLCBieXRlcywgcGFja2V0cywgZHJvcHMsIGh3KTtcbiAyMjQ6XHRcdHRtLVx1MDAzZWxhc3R1c2UgPSBtYXhfdCh1NjQsIHRtLVx1MDAzZWxhc3R1c2UsIGxhc3R1c2UpO1xuIDIyNTpcdH1cbiAyMjY6XHRcbiAyMjc6XHRzdGF0aWMgaW50IHRjZl9zYW1wbGVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIDIyODpcdFx0XHRcdCAgIGludCBiaW5kLCBpbnQgcmVmKVxuIDIyOTpcdHtcbiAyMzA6XHRcdHVuc2lnbmVkIGNoYXIgKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG4gMjMxOlx0XHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcbiAyMzI6XHRcdHN0cnVjdCB0Y19zYW1wbGUgb3B0ID0ge1xuIDIzMzpcdFx0XHQuaW5kZXggICAgICA9IHMtXHUwMDNldGNmX2luZGV4LFxuIDIzNDpcdFx0XHQucmVmY250ICAgICA9IHJlZmNvdW50X3JlYWQoXHUwMDI2cy1cdTAwM2V0Y2ZfcmVmY250KSAtIHJlZixcbiAyMzU6XHRcdFx0LmJpbmRjbnQgICAgPSBhdG9taWNfcmVhZChcdTAwMjZzLVx1MDAzZXRjZl9iaW5kY250KSAtIGJpbmQsXG4gMjM2Olx0XHR9O1xuIDIzNzpcdFx0c3RydWN0IHRjZl90IHQ7XG4gMjM4Olx0XG4gMjM5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cy1cdTAwM2V0Y2ZfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHByZXNlbnRlZCB3aXRoIGEgZmlsZSwgbGlrZWx5IGEgZGF0YSBkdW1wIG9yIGEgbG9nLCBuYW1lZCBgdGNmX3NhbXBsZV9kdW1wYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuJiMzNDsKCioqRGVjb25zdHJ1Y3RpbmcgYHRjZl9zYW1wbGVfZHVtcGAqKgoKTXkgZXhwZXJ0IGV5ZSBpcyBhbHJlYWR5IHNjYW5uaW5nLCBtZW50YWxseSBjYXRhbG9naW5nIHBvc3NpYmlsaXRpZXMuIElzIHRoaXMgYSB0ZXh0IGZpbGUsIGEgYmluYXJ5IGZpbGUsIGEgZGF0YWJhc2UgZHVtcCwgYSBuZXR3b3JrIHRyYWNlPyBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCAmIzM0O1RDRiYjMzQ7IHByb2JhYmx5IHN0YW5kcyBmb3Igc29tZXRoaW5nIHJlbGV2YW50IHRvIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvdG9jb2wsIGZyYW1ld29yaywgb3IgZXZlbiBhIHN5c3RlbSBhcmNoaXRlY3R1cmUgdGhhdCBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFRoZSAmIzM0O3NhbXBsZSYjMzQ7IHBhcnQgc3VnZ2VzdHMgdGhpcyBpc24mIzM5O3QgdGhlIHByaW1hcnkgcHJvZHVjdGlvbiBkYXRhLCB3aGljaCBpcyBnb29kLiBFYXNpZXIgdG8gYW5hbHl6ZSEgSXQmIzM5O3MgYSBzYW1wbGUsIHNvIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGEgbWFuYWdlYWJsZSBzaXplIGFuZCBkb2VzbiYjMzk7dCBjb250YWluIGFueSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFRoZSAmIzM0O2R1bXAmIzM0OyB0ZWxscyBtZSB3ZSBhcmUgbGlrZWx5IGxvb2tpbmcgYXQgYSBzbmFwc2hvdCwgd2hpY2ggSSBjYW4gdXNlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcsIHByb2ZpbGluZywgYW5kIGFuYWx5emluZyBkYXRhIHBhdHRlcm5zLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBoeXBvdGhlc2VzIGFib3V0IHRoZSB0eXBlIG9mIGluc2lnaHRzIEkgY2FuIGdsZWFuIGZyb20gdGhpcywgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kIHdpdGhpbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaW4gdGhpcyB0aGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NhbXBsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XHRvcHQuYWN0aW9uID0gcy1cdTAwM2V0Y2ZfYWN0aW9uO1xuIDI0MTpcdFx0aWYgKG5sYV9wdXQoc2tiLCBUQ0FfU0FNUExFX1BBUk1TLCBzaXplb2Yob3B0KSwgXHUwMDI2b3B0KSlcbiAyNDI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjQzOlx0XG4gMjQ0Olx0XHR0Y2ZfdG1fZHVtcChcdTAwMjZ0LCBcdTAwMjZzLVx1MDAzZXRjZl90bSk7XG4gMjQ1Olx0XHRpZiAobmxhX3B1dF82NGJpdChza2IsIFRDQV9TQU1QTEVfVE0sIHNpemVvZih0KSwgXHUwMDI2dCwgVENBX1NBTVBMRV9QQUQpKVxuIDI0NjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyNDc6XHRcbiAyNDg6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIFRDQV9TQU1QTEVfUkFURSwgcy1cdTAwM2VyYXRlKSlcbiAyNDk6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjUwOlx0XG4gMjUxOlx0XHRpZiAocy1cdTAwM2V0cnVuY2F0ZSlcbiAyNTI6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1NBTVBMRV9UUlVOQ19TSVpFLCBzLVx1MDAzZXRydW5jX3NpemUpKVxuIDI1MzpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDI1NDpcdFxuIDI1NTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1NBTVBMRV9QU0FNUExFX0dST1VQLCBzLVx1MDAzZXBzYW1wbGVfZ3JvdXBfbnVtKSlcbiAyNTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjU3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiAyNTg6XHRcbiAyNTk6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuIDI2MDpcdFxuIDI2MTpcdG5sYV9wdXRfZmFpbHVyZTpcbiAyNjI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spO1xuIDI2MzpcdFx0bmxtc2dfdHJpbShza2IsIGIpO1xuIDI2NDpcdFx0cmV0dXJuIC0xO1xuIDI2NTpcdH1cbiAyNjY6XHRcbiAyNjc6XHRzdGF0aWMgdm9pZCB0Y2ZfcHNhbXBsZV9ncm91cF9wdXQodm9pZCAqcHJpdilcbiAyNjg6XHR7XG4gMjY5Olx0XHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqZ3JvdXAgPSBwcml2O1xuIDI3MDpcdFxuIDI3MTpcdFx0cHNhbXBsZV9ncm91cF9wdXQoZ3JvdXApO1xuIDI3MjpcdH1cbiAyNzM6XHRcbiAyNzQ6XHRzdGF0aWMgc3RydWN0IHBzYW1wbGVfZ3JvdXAgKlxuIDI3NTpcdHRjZl9zYW1wbGVfZ2V0X2dyb3VwKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gMjc2Olx0XHRcdCAgICAgdGNfYWN0aW9uX3ByaXZfZGVzdHJ1Y3RvciAqZGVzdHJ1Y3RvcilcbiAyNzc6XHR7XG4gMjc4Olx0XHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcbiAyNzk6XHRcdHN0cnVjdCBwc2FtcGxlX2dyb3VwICpncm91cDtcbiAyODA6XHRcbiAyODE6XHRcdGdyb3VwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzLVx1MDAzZXBzYW1wbGVfZ3JvdXAsXG4gMjgyOlx0XHRcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spKTtcbiAyODM6XHRcdGlmIChncm91cCkge1xuIDI4NDpcdFx0XHRwc2FtcGxlX2dyb3VwX3Rha2UoZ3JvdXApO1xuIDI4NTpcdFx0XHQqZGVzdHJ1Y3RvciA9IHRjZl9wc2FtcGxlX2dyb3VwX3B1dDtcbiAyODY6XHRcdH1cbiAyODc6XHRcbiAyODg6XHRcdHJldHVybiBncm91cDtcbiAyODk6XHR9XG4gMjkwOlx0XG4gMjkxOlx0c3RhdGljIHZvaWQgdGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5LFxuIDI5MjpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuIDI5MzpcdHtcbiAyOTQ6XHRcdGVudHJ5LVx1MDAzZXNhbXBsZS5wc2FtcGxlX2dyb3VwID1cbiAyOTU6XHRcdFx0YWN0LVx1MDAzZW9wcy1cdTAwM2VnZXRfcHNhbXBsZV9ncm91cChhY3QsIFx1MDAyNmVudHJ5LVx1MDAzZWRlc3RydWN0b3IpO1xuIDI5NjpcdFx0ZW50cnktXHUwMDNlZGVzdHJ1Y3Rvcl9wcml2ID0gZW50cnktXHUwMDNlc2FtcGxlLnBzYW1wbGVfZ3JvdXA7XG4gMjk3Olx0fVxuIDI5ODpcdFxuIDI5OTpcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gMzAwOlx0XHRcdFx0XHRcdHUzMiAqaW5kZXhfaW5jLCBib29sIGJpbmQsXG4gMzAxOlx0XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMDI6XHR7XG4gMzAzOlx0XHRpZiAoYmluZCkge1xuIDMwNDpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5ID0gZW50cnlfZGF0YTtcbiAzMDU6XHRcbiAzMDY6XHRcdFx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9TQU1QTEU7XG4gMzA3Olx0XHRcdGVudHJ5LVx1MDAzZXNhbXBsZS50cnVuY19zaXplID0gdGNmX3NhbXBsZV90cnVuY19zaXplKGFjdCk7XG4gMzA4Olx0XHRcdGVudHJ5LVx1MDAzZXNhbXBsZS50cnVuY2F0ZSA9IHRjZl9zYW1wbGVfdHJ1bmNhdGUoYWN0KTtcbiAzMDk6XHRcdFx0ZW50cnktXHUwMDNlc2FtcGxlLnJhdGUgPSB0Y2Zfc2FtcGxlX3JhdGUoYWN0KTtcbiAzMTA6XHRcdFx0dGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChlbnRyeSwgYWN0KTtcbiAzMTE6XHRcdFx0KmluZGV4X2luYyA9IDE7XG4gMzEyOlx0XHR9IGVsc2Uge1xuIDMxMzpcdFx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX2FjdGlvbiAqZmxfYWN0aW9uID0gZW50cnlfZGF0YTtcbiAzMTQ6XHRcbiAzMTU6XHRcdFx0ZmxfYWN0aW9uLVx1MDAzZWlkID0gRkxPV19BQ1RJT05fU0FNUExFO1xuIDMxNjpcdFx0fVxuIDMxNzpcdFxuIDMxODpcdFx0cmV0dXJuIDA7XG4gMzE5Olx0fVxuIDMyMDpcdFxuIDMyMTpcdHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHtcbiAzMjI6XHRcdC5raW5kXHQgID0gXCYjMzQ7c2FtcGxlXCYjMzQ7LFxuIDMyMzpcdFx0LmlkXHQgID0gVENBX0lEX1NBTVBMRSxcbiAzMjQ6XHRcdC5vd25lclx0ICA9IFRISVNfTU9EVUxFLFxuIDMyNTpcdFx0LmFjdFx0ICA9IHRjZl9zYW1wbGVfYWN0LFxuIDMyNjpcdFx0LnN0YXRzX3VwZGF0ZSA9IHRjZl9zYW1wbGVfc3RhdHNfdXBkYXRlLFxuIDMyNzpcdFx0LmR1bXBcdCAgPSB0Y2Zfc2FtcGxlX2R1bXAsXG4gMzI4Olx0XHQuaW5pdFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcbiAzMjk6XHRcdC5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCxcbiAzMzA6XHRcdC5nZXRfcHNhbXBsZV9ncm91cCA9IHRjZl9zYW1wbGVfZ2V0X2dyb3VwLFxuIDMzMTpcdFx0Lm9mZmxvYWRfYWN0X3NldHVwICAgID0gdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cCxcbiAzMzI6XHRcdC5zaXplXHQgID0gc2l6ZW9mKHN0cnVjdCB0Y2Zfc2FtcGxlKSxcbiAzMzM6XHR9O1xuIDMzNDpcdE1PRFVMRV9BTElBU19ORVRfQUNUKFwmIzM0O3NhbXBsZVwmIzM0Oyk7XG4gMzM1Olx0XG4gMzM2Olx0c3RhdGljIF9fbmV0X2luaXQgaW50IHNhbXBsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gMzM3Olx0e1xuIDMzODpcdFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3Rfc2FtcGxlX29wcy5uZXRfaWQpO1xuIDMzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgVHJ1bmNhdGlvbiBJc3N1ZSBpbiBBY3Rpb24gUmVwbGFjZW1lbnQqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgZmFpbHVyZSB0byByZXNldCBgcy0mZ3Q7dHJ1bmNhdGVgIGFuZCBgcy0mZ3Q7dHJ1bmNfc2l6ZWAgd2hlbiByZXBsYWNpbmcgYW4gYWN0aW9uLiBJdCYjMzk7cyBhIGNsYXNzaWMgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCB3aGljaCBpcyBhIHJlbGllZiEgTm93LCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBgc2Agc3RydWN0IGlzIHByb3Blcmx5IHplcm8taW5pdGlhbGl6ZWQgZHVyaW5nIGNyZWF0aW9uLiBJIHJlbWVtYmVyIGB0Y2ZfaWRyX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGFjdGlvbiBzdHJ1Y3QsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGB0Y2ZfaWRyX2NyZWF0ZWAgZnVuY3Rpb24gZGVmaW5pdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9pZHJfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTc0Mj1zdGF0aWMgaW50IHRjZl9pZHJfZGVsZXRlX2luZGV4KHN0cnVjdCB0Y2ZfaWRyaW5mbyAqaWRyaW5mbywgdTMyIGluZGV4KVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtNzc0LVxubmV0L3NjaGVkL2FjdF9hcGkuYzo3NzU6aW50IHRjZl9pZHJfY3JlYXRlKHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biwgdTMyIGluZGV4LCBzdHJ1Y3QgbmxhdHRyICplc3QsXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTc3Ni1cdFx0ICAgc3RydWN0IHRjX2FjdGlvbiAqKmEsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMsXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy04MzAtfVxubmV0L3NjaGVkL2FjdF9hcGkuYzo4MzE6RVhQT1JUX1NZTUJPTCh0Y2ZfaWRyX2NyZWF0ZSk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzMi1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODMzOmludCB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biwgdTMyIGluZGV4LFxubmV0L3NjaGVkL2FjdF9hcGkuYy04MzQtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzOC1cdC8qIFNldCBjcHVzdGF0cyBhY2NvcmRpbmcgdG8gYWN0aW9ucyBmbGFncy4gKi9cbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODM5Olx0cmV0dXJuIHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLCBvcHMsIGJpbmQsXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0MC1cdFx0XHQgICAgICAhKGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX05PX1BFUkNQVV9TVEFUUyksIGZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtODQxLX1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODQyOkVYUE9SVF9TWU1CT0wodGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgdGNmX2lkcl9jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBhY3Rpb24gQVBJIHN0dWZmLiBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYHRjZl9pZHJfY3JlYXRlYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFNlZW1zIGxpa2UgdGhpcyBpcyB3aGVyZSB3ZSYjMzk7cmUgaW5pdGlhbGx5IHNldHRpbmcgdXAgdGhlIElEUiBzdHJ1Y3R1cmUgZm9yIG91ciB0cmFmZmljIGNvbnRyb2wgZmlsdGVycy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlc2UgSURScyBhcmUgaW5pdGlhbGl6ZWQg4oCTIGhvdyB0aGUga2V5cyBhcmUgYXNzaWduZWQsIGhvdyBjb2xsaXNpb25zIGFyZSBoYW5kbGVkIChvciBhcmUgdGhleT8pLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBhIG5ldyBjbGFzc2lmaWVyIHRoYXQgbmVlZHMgYW4gSURSLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBhcmUgd2UgYWxsb2NhdGluZyBtZW1vcnkgaGVyZSBkaXJlY3RseT8gT3IgaXMgdGhlcmUgc29tZSBraW5kIG9mIHBvb2w/IFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSB3aGVuIHdvcmtpbmcgd2l0aCB0aGlzIElEUiBzdHJ1Y3R1cmU/IFRoZSBjb3JlIG9mIGFueSBhY3Rpb24gZnJhbWV3b3JrIGlzIG9yZ2FuaXppbmcgb3VyIGZpbHRlcnMsIHNvIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhbmQgZmluZCB0aGVzZSBmaWx0ZXJzIGluIGEgcXVpY2sgbWFubmVyIGlzIGNyaXRpY2FsLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBtdXRleGVzIG9yIGF0b21pYyBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgcHJvdGVjdCB0aGlzIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgbGF5IGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzU6XHRpbnQgdGNmX2lkcl9jcmVhdGUoc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuLCB1MzIgaW5kZXgsIHN0cnVjdCBubGF0dHIgKmVzdCxcbiA3NzY6XHRcdFx0ICAgc3RydWN0IHRjX2FjdGlvbiAqKmEsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMsXG4gNzc3Olx0XHRcdCAgIGludCBiaW5kLCBib29sIGNwdXN0YXRzLCB1MzIgZmxhZ3MpXG4gNzc4Olx0e1xuIDc3OTpcdFx0c3RydWN0IHRjX2FjdGlvbiAqcCA9IGt6YWxsb2Mob3BzLVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuIDc4MDpcdFx0c3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvID0gdG4tXHUwMDNlaWRyaW5mbztcbiA3ODE6XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuIDc4MjpcdFxuIDc4MzpcdFx0aWYgKHVubGlrZWx5KCFwKSlcbiA3ODQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzg1Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cC1cdTAwM2V0Y2ZhX3JlZmNudCwgMSk7XG4gNzg2Olx0XHRpZiAoYmluZClcbiA3ODc6XHRcdFx0YXRvbWljX3NldChcdTAwMjZwLVx1MDAzZXRjZmFfYmluZGNudCwgMSk7XG4gNzg4Olx0XG4gNzg5Olx0XHRpZiAoY3B1c3RhdHMpIHtcbiA3OTA6XHRcdFx0cC1cdTAwM2VjcHVfYnN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XG4gNzkxOlx0XHRcdGlmICghcC1cdTAwM2VjcHVfYnN0YXRzKVxuIDc5MjpcdFx0XHRcdGdvdG8gZXJyMTtcbiA3OTM6XHRcdFx0cC1cdTAwM2VjcHVfYnN0YXRzX2h3ID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XG4gNzk0Olx0XHRcdGlmICghcC1cdTAwM2VjcHVfYnN0YXRzX2h3KVxuIDc5NTpcdFx0XHRcdGdvdG8gZXJyMjtcbiA3OTY6XHRcdFx0cC1cdTAwM2VjcHVfcXN0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKTtcbiA3OTc6XHRcdFx0aWYgKCFwLVx1MDAzZWNwdV9xc3RhdHMpXG4gNzk4Olx0XHRcdFx0Z290byBlcnIzO1xuIDc5OTpcdFx0fVxuIDgwMDpcdFx0Z25ldF9zdGF0c19iYXNpY19zeW5jX2luaXQoXHUwMDI2cC1cdTAwM2V0Y2ZhX2JzdGF0cyk7XG4gODAxOlx0XHRnbmV0X3N0YXRzX2Jhc2ljX3N5bmNfaW5pdChcdTAwMjZwLVx1MDAzZXRjZmFfYnN0YXRzX2h3KTtcbiA4MDI6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNldGNmYV9sb2NrKTtcbiA4MDM6XHRcdHAtXHUwMDNldGNmYV9pbmRleCA9IGluZGV4O1xuIDgwNDpcdFx0cC1cdTAwM2V0Y2ZhX3RtLmluc3RhbGwgPSBqaWZmaWVzO1xuIDgwNTpcdFx0cC1cdTAwM2V0Y2ZhX3RtLmxhc3R1c2UgPSBqaWZmaWVzO1xuIDgwNjpcdFx0cC1cdTAwM2V0Y2ZhX3RtLmZpcnN0dXNlID0gMDtcbiA4MDc6XHRcdHAtXHUwMDNldGNmYV9mbGFncyA9IGZsYWdzO1xuIDgwODpcdFx0aWYgKGVzdCkge1xuIDgwOTpcdFx0XHRlcnIgPSBnZW5fbmV3X2VzdGltYXRvcihcdTAwMjZwLVx1MDAzZXRjZmFfYnN0YXRzLCBwLVx1MDAzZWNwdV9ic3RhdHMsXG4gODEwOlx0XHRcdFx0XHRcdFx1MDAyNnAtXHUwMDNldGNmYV9yYXRlX2VzdCxcbiA4MTE6XHRcdFx0XHRcdFx0XHUwMDI2cC1cdTAwM2V0Y2ZhX2xvY2ssIGZhbHNlLCBlc3QpO1xuIDgxMjpcdFx0XHRpZiAoZXJyKVxuIDgxMzpcdFx0XHRcdGdvdG8gZXJyNDtcbiA4MTQ6XHRcdH1cbiA4MTU6XHRcbiA4MTY6XHRcdHAtXHUwMDNlaWRyaW5mbyA9IGlkcmluZm87XG4gODE3Olx0XHRfX21vZHVsZV9nZXQob3BzLVx1MDAzZW93bmVyKTtcbiA4MTg6XHRcdHAtXHUwMDNlb3BzID0gb3BzO1xuIDgxOTpcdFx0KmEgPSBwO1xuIDgyMDpcdFx0cmV0dXJuIDA7XG4gODIxOlx0ZXJyNDpcbiA4MjI6XHRcdGZyZWVfcGVyY3B1KHAtXHUwMDNlY3B1X3FzdGF0cyk7XG4gODIzOlx0ZXJyMzpcbiA4MjQ6XHRcdGZyZWVfcGVyY3B1KHAtXHUwMDNlY3B1X2JzdGF0c19odyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjcyCgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDQ1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGt6YWxsb2NgICppcyogYmVpbmcgdXNlZCwgc28gYHMtJmd0O3RydW5jYXRlYCBhbmQgYHMtJmd0O3RydW5jX3NpemVgIGFyZSBpbml0aWFsaXplZCB0byAwL2ZhbHNlIHdoZW4gdGhlIGFjdGlvbiBpcyBjcmVhdGVkLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgYSBwcm9ibGVtIHRoYXQgYXJpc2VzIHdoZW4gYW4gZXhpc3RpbmcgYWN0aW9uIGlzICp1cGRhdGVkKiBvciAqcmVwbGFjZWQqLCBhbmQgdGhlIGluY29taW5nIG5ldGxpbmsgbWVzc2FnZSBkb2VzbiYjMzk7dCBpbmNsdWRlIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIEVzc2VudGlhbGx5LCB0aGUgKm9sZCogdmFsdWVzIGFyZSBiZWluZyByZXRhaW5lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc2V0IGluIHRoaXMgdXBkYXRlIHNjZW5hcmlvLgoKVGhlcmVmb3JlLCB0aGlzIGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgaXQmIzM5O3MgYSBzdGF0ZSByZXRlbnRpb24gYnVnIG9uIGFuIHVwZGF0ZS4gSSYjMzk7dmUgcXVpY2tseSByZS1yZXZpZXdlZCB0aGUgS01TQU4gdnMuIEtBU0FOIHJ1bGVzIHRvIGNvbmZpcm0gdGhpcyBhc3Nlc3NtZW50LiBKdXN0IHRvIGJlIGNsZWFyLCB0aG9zZSBydWxlcyBzdGF0ZSBLTVNBTiBpcyBuZWVkZWQgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGluZ3MgbGlrZSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXItcmVhY2hhYmxlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciB2dWxuZXJhYmlsaXRpZXMgaW4gYm91bmRzIGNoZWNrcyB0aGF0IGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpJbiB0aGlzIGNhc2UsIHRoZSBtZW1vcnkgKmlzKiBmdWxseSBpbml0aWFsaXplZCB0aGFua3MgdG8gYGt6YWxsb2NgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjb2RlIGlzbiYjMzk7dCByZXNldHRpbmcgdGhvc2UgZmllbGRzIHRvIHRoZWlyIGNvcnJlY3QgaW5pdGlhbCB2YWx1ZXMgZHVyaW5nIHRoZSB1cGRhdGUsIG5vdCB0aGF0IGl0JiMzOTtzIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIGhlcmUmIzM5O3MgbXkgZm9ybWFsIEtNU0FOIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYHRjZl9zYW1wbGVfaW5pdGAuIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGB0Y2Agc2FtcGxlIGFjdGlvbiwgaXQgZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIGRvZXNuJiMzOTt0IGluY2x1ZGUgdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZS4gQ3J1Y2lhbGx5LCB0aGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGF0IHRoZSBwb2ludCBvZiBhbGxvY2F0aW9uLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHJldGFpbmluZyBzdGFsZSBzdGF0ZSBkdXJpbmcgYW4gdXBkYXRlLCByYXRoZXIgdGhhbiBleHBvc2luZyBvciBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgaW4gdGhpcyBjb2RlLiBXZSBkb24mIzM5O3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIGluIGB0Y2Zfc2FtcGxlX2luaXRgIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyBgdGNgIHNhbXBsZSBhY3Rpb24gZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIG9taXRzIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIFRoZSBhY3Rpb24gc3RydWN0dXJlIGlzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHNvIHRoZSBtZW1vcnkgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHJldGFpbmluZyBzdGFsZSBzdGF0ZSBkdXJpbmcgYW4gdXBkYXRlLCByYXRoZXIgdGhhbiBleHBvc2luZyBvciBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjIzOjA5LjgyODM5Mjk5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDQ0NDQyNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORVRfQUNUX1NBTVBMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9zYW1wbGVfaW5pdFwiLFxuICAgIFwidGNmX3NhbXBsZV9hY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2Zfc2FtcGxlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYCB0byBleHBsaWNpdGx5IHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXMgbm90IHByb3ZpZGVkLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyB0YyBzYW1wbGUgYWN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldGFpbiB0aGUgb2xkIHRydW5jYXRpb24gc2V0dGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtICh0YyBhY3Rpb25zKSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjM6MDkuODI4Mzk5MzQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjAzMjExMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MTM0OThlZDBhZGY2OTMxYWZlZGFkMWNkNjhkY2UzOGI2NmI0MzY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE4OjIzOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuaW5kZXggMmNlYjRkMTQxYjcxMy4uMmJkYzdhMGViNmQ2OCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuKysrIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xcbkBAIC0xMTYsNiArMTE2LDkgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuIFxcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XFxuIFxcdFxcdHMtXFx1MDAzZXRydW5jYXRlID0gdHJ1ZTtcXG4gXFx0XFx0cy1cXHUwMDNldHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzLVxcdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO1xcbitcXHRcXHRzLVxcdTAwM2V0cnVuY19zaXplID0gMDtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cy1cXHUwMDNldGNmX2xvY2spO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjM6MTAuMTg5NTQ0NDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQwNTM2ODAzMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfU0FNUExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3NhbXBsZV9pbml0XCIsXG4gICAgXCJ0Y2Zfc2FtcGxlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2Zfc2FtcGxlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYCB0byBleHBsaWNpdGx5IHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXMgbm90IHByb3ZpZGVkLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyB0YyBzYW1wbGUgYWN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldGFpbiB0aGUgb2xkIHRydW5jYXRpb24gc2V0dGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtICh0YyBhY3Rpb25zKSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzNDk4ZWQwYWRmNjkzMWFmZWRhZDFjZDY4ZGNlMzhiNjZiNDM2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE4OjIzOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjJiZGM3YTBlYjZkNjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMTE2LDYgKzExNiw5IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIFx0aWYgKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pIHtcbiBcdFx0cy1cdTAwM2V0cnVuY2F0ZSA9IHRydWU7XG4gXHRcdHMtXHUwMDNldHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0cy1cdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO1xuK1x0XHRzLVx1MDAzZXRydW5jX3NpemUgPSAwO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cy1cdTAwM2V0Y2ZfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyMzoxMC4xODk1NDU5MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY3MTk3OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdGhlIGB0Y2Zfc2FtcGxlX2luaXRgIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhhbmRsaW5nIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIEl0J3MgYWRkaW5nIGFuIGBlbHNlYCBicmFuY2ggdG8gdGhlIGV4aXN0aW5nIGBpZmAgc3RhdGVtZW50IGNoZWNraW5nIGZvciB0aGF0IGF0dHJpYnV0ZS5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgICp3YXNuJ3QqIHByb3ZpZGVkLCB0aGUgYHMtXHUwMDNldHJ1bmNhdGVgIGZsYWcgYW5kIGBzLVx1MDAzZXRydW5jX3NpemVgIG1lbWJlcnMgKndvdWxkbid0KiBiZSBleHBsaWNpdGx5IG1vZGlmaWVkLiBUaGV5J2QganVzdCBrZWVwIHdoYXRldmVyIHByZXZpb3VzIHZhbHVlIHRoZXkgaGVsZCwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGF0IHRoaXMgaXNuJ3QgYSBwcm9ibGVtIHdpdGggYWxsb2NhdGlvbiwgc2luY2UgYHNgIGlzIHByZXN1bWFibHkgYW4gZXhpc3RpbmcgYWN0aW9uIGJlaW5nIHVwZGF0ZWQuIFJpZ2h0LCBpdCBpcyBhbGxvY2F0ZWQgb3IgcmV0cmlldmVkLlxuXG5TbywgdGhlIG5ldyBgZWxzZWAgYnJhbmNoIGV4cGxpY2l0bHkgc2V0cyBgcy1cdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO2AgYW5kIGBzLVx1MDAzZXRydW5jX3NpemUgPSAwO2AgaWYgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJ3QgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBjbGVhcmx5LiBJIG5lZWQgdG8gZGlnIGludG8gYHRjZl9zYW1wbGVfaW5pdGAgaXRzZWxmIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGNvbnNpZGVyIGFueSBlZGdlIGNhc2VzIGl0IG1pZ2h0IGludHJvZHVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjIzOjE0Ljc1Njc0NjI3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg0ODgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2Zfc2FtcGxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzYW1wbGVfcG9saWN5W1RDQV9TQU1QTEVfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTM1LVxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzY6c3RhdGljIGludCB0Y2Zfc2FtcGxlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zNy1cXHRcXHRcXHQgICBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYz0zMjE9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMjctXFx0LmR1bXBcXHQgID0gdGNmX3NhbXBsZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzI4OlxcdC5pbml0XFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyOS1cXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjIzOjE0LjgwNjU5OTM4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTE4Mzk3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkRlY2lwaGVyaW5nIGBzYCBpbiBgdGNmX3NhbXBsZV9pbml0YCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBwdWxsIHVwIGB0Y2Zfc2FtcGxlX2luaXRgIG5vdy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbmF0dXJlIG9mIGBzYC4gSXMgaXQgYSBwb2ludGVyPyBBIHN0cnVjdHVyZT8gQSBzaW1wbGUgdmFyaWFibGU/IEFuZCBlcXVhbGx5IGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2AgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gS25vd2luZyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSDigJMgaXMgaXQgc3RhdGljLCBvbiB0aGUgc3RhY2ssIGR5bmFtaWNhbGx5IG9uIHRoZSBoZWFwPyDigJMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgVENGLiBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb246IHdoYXQgaXMgdGhpcyBgc2AsIGFuZCBob3cgZG9lcyBpdCBsaXZlPyBJJ2xsIGJlIGxvb2tpbmcgdmVyeSBjbG9zZWx5IGF0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBoZXJlLiBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGZvdW5kYXRpb25hbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBUQ0YgY29kZSBmdW5jdGlvbnMuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI0OjI4LjcyNDk5OTE4NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM2OlxcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbiAgMzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG4gIDM4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgdTMyIGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICA0MDpcXHR7XFxuICA0MTpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9zYW1wbGVfb3BzLm5ldF9pZCk7XFxuICA0MjpcXHRcXHRib29sIGJpbmQgPSBmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcXG4gIDQzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9TQU1QTEVfTUFYICsgMV07XFxuICA0NDpcXHRcXHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqcHNhbXBsZV9ncm91cDtcXG4gIDQ1OlxcdFxcdHUzMiBwc2FtcGxlX2dyb3VwX251bSwgcmF0ZSwgaW5kZXg7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgdGNmX2NoYWluICpnb3RvX2NoID0gTlVMTDtcXG4gIDQ3OlxcdFxcdHN0cnVjdCB0Y19zYW1wbGUgKnBhcm07XFxuICA0ODpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcztcXG4gIDQ5OlxcdFxcdGJvb2wgZXhpc3RzID0gZmFsc2U7XFxuICA1MDpcXHRcXHRpbnQgcmV0LCBlcnI7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdGlmICghbmxhKVxcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA1NDpcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9TQU1QTEVfTUFYLCBubGEsXFxuICA1NTpcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbXBsZV9wb2xpY3ksIE5VTEwpO1xcbiAgNTY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuICA1NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHRpZiAoIXRiW1RDQV9TQU1QTEVfUEFSTVNdKVxcbiAgNjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdHBhcm0gPSBubGFfZGF0YSh0YltUQ0FfU0FNUExFX1BBUk1TXSk7XFxuICA2MzpcXHRcXHRpbmRleCA9IHBhcm0tXFx1MDAzZWluZGV4O1xcbiAgNjQ6XFx0XFx0ZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgXFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcXG4gIDY1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAgNjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDY3OlxcdFxcdGV4aXN0cyA9IGVycjtcXG4gIDY4OlxcdFxcdGlmIChleGlzdHMgXFx1MDAyNlxcdTAwMjYgYmluZClcXG4gIDY5OlxcdFxcdFxcdHJldHVybiBBQ1RfUF9CT1VORDtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKCFleGlzdHMpIHtcXG4gIDcyOlxcdFxcdFxcdHJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLFxcbiAgNzM6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2YWN0X3NhbXBsZV9vcHMsIGJpbmQsIHRydWUsIGZsYWdzKTtcXG4gIDc0OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gIDc1OlxcdFxcdFxcdFxcdHRjZl9pZHJfY2xlYW51cCh0biwgaW5kZXgpO1xcbiAgNzY6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDc3OlxcdFxcdFxcdH1cXG4gIDc4OlxcdFxcdFxcdHJldCA9IEFDVF9QX0NSRUFURUQ7XFxuICA3OTpcXHRcXHR9IGVsc2UgaWYgKCEoZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0UpKSB7XFxuICA4MDpcXHRcXHRcXHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xcbiAgODE6XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuICA4MjpcXHRcXHR9XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGlmICghdGJbVENBX1NBTVBMRV9SQVRFXSB8fCAhdGJbVENBX1NBTVBMRV9QU0FNUExFX0dST1VQXSkge1xcbiAgODU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2FtcGxlIHJhdGUgYW5kIGdyb3VwIGFyZSByZXF1aXJlZFxcXCIpO1xcbiAgODY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gIDg3OlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9pZHI7XFxuICA4ODpcXHRcXHR9XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdGVyciA9IHRjZl9hY3Rpb25fY2hlY2tfY3RybGFjdChwYXJtLVxcdTAwM2VhY3Rpb24sIHRwLCBcXHUwMDI2Z290b19jaCwgZXh0YWNrKTtcXG4gIDkxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAgOTI6XFx0XFx0XFx0Z290byByZWxlYXNlX2lkcjtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0cmF0ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfUkFURV0pO1xcbiAgOTU6XFx0XFx0aWYgKCFyYXRlKSB7XFxuICA5NjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbnZhbGlkIHNhbXBsZSByYXRlXFxcIik7XFxuICA5NzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAgOTg6XFx0XFx0XFx0Z290byBwdXRfY2hhaW47XFxuICA5OTpcXHRcXHR9XFxuIDEwMDpcXHRcXHRwc2FtcGxlX2dyb3VwX251bSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUF0pO1xcbiAxMDE6XFx0XFx0cHNhbXBsZV9ncm91cCA9IHBzYW1wbGVfZ3JvdXBfZ2V0KG5ldCwgcHNhbXBsZV9ncm91cF9udW0pO1xcbiAxMDI6XFx0XFx0aWYgKCFwc2FtcGxlX2dyb3VwKSB7XFxuIDEwMzpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxMDQ6XFx0XFx0XFx0Z290byBwdXRfY2hhaW47XFxuIDEwNTpcXHRcXHR9XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdHMgPSB0b19zYW1wbGUoKmEpO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnMtXFx1MDAzZXRjZl9sb2NrKTtcXG4gMTEwOlxcdFxcdGdvdG9fY2ggPSB0Y2ZfYWN0aW9uX3NldF9jdHJsYWN0KCphLCBwYXJtLVxcdTAwM2VhY3Rpb24sIGdvdG9fY2gpO1xcbiAxMTE6XFx0XFx0cy1cXHUwMDNlcmF0ZSA9IHJhdGU7XFxuIDExMjpcXHRcXHRzLVxcdTAwM2Vwc2FtcGxlX2dyb3VwX251bSA9IHBzYW1wbGVfZ3JvdXBfbnVtO1xcbiAxMTM6XFx0XFx0cHNhbXBsZV9ncm91cCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocy1cXHUwMDNlcHNhbXBsZV9ncm91cCwgcHNhbXBsZV9ncm91cCxcXG4gMTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnMtXFx1MDAzZXRjZl9sb2NrKSk7XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XFxuIDExNzpcXHRcXHRcXHRzLVxcdTAwM2V0cnVuY2F0ZSA9IHRydWU7XFxuIDExODpcXHRcXHRcXHRzLVxcdTAwM2V0cnVuY19zaXplID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSk7XFxuIDExOTpcXHRcXHR9IGVsc2Uge1xcbiAxMjA6XFx0XFx0XFx0cy1cXHUwMDNldHJ1bmNhdGUgPSBmYWxzZTtcXG4gMTIxOlxcdFxcdFxcdHMtXFx1MDAzZXRydW5jX3NpemUgPSAwO1xcbiAxMjI6XFx0XFx0fVxcbiAxMjM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnMtXFx1MDAzZXRjZl9sb2NrKTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0aWYgKHBzYW1wbGVfZ3JvdXApXFxuIDEyNjpcXHRcXHRcXHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcXG4gMTI3OlxcdFxcdGlmIChnb3RvX2NoKVxcbiAxMjg6XFx0XFx0XFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdHJldHVybiByZXQ7XFxuIDEzMTpcXHRwdXRfY2hhaW46XFxuIDEzMjpcXHRcXHRpZiAoZ290b19jaClcXG4gMTMzOlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbiAxMzQ6XFx0cmVsZWFzZV9pZHI6XFxuIDEzNTpcXHRcXHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDoyOC43MjUwODEwOTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI5MTc2MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUga2V5IGFkanVzdG1lbnQgaXMgd2l0aGluIGB0Y2Zfc2FtcGxlX2luaXRgLiBJdCBzZWVtcyB0aGV5J3ZlIGltcGxlbWVudGVkIGEgY2hlY2sgdGhhdCBleHBsaWNpdGx5IHJlc2V0cyB0aGUgYHMtXHUwMDNldHJ1bmNhdGVgIGFuZCBgcy1cdTAwM2V0cnVuY19zaXplYCB2YXJpYWJsZXMgKmlmKiB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlIGlzbid0IHByb3ZpZGVkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGNydWNpYWw6IGl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBidWcgd2hlbiBhbiBleGlzdGluZyBhY3Rpb24gaXMgYmVpbmcgKnJlcGxhY2VkKiDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGBleGlzdHNgIGlzIHRydWUgYW5kIHRoZSBgVENBX0FDVF9GTEFHU19SRVBMQUNFYCBmbGFnIGlzIGFjdGl2ZS4gV2l0aG91dCB0aGlzIHJlc2V0LCB3ZSdkIGJlIHJldGFpbmluZyBvbGQgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgdmFsdWVzIGluIHRoZSBuZXcgY29uZmlndXJhdGlvbi4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIuXG5cblRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtIChzcGVjaWZpY2FsbHksIHRoZSBgdGNgIGFjdGlvbnMpIGhhbmRsZXMgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoaXMgdHlwZSBvZiBtb2RpZmljYXRpb24sIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyByaWdvcm91cyBmdXp6aW5nIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIGNhdGNoIGFueSBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG92ZXJsb29rZWQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgdGhlIGBhY3Rfc2FtcGxlYCBhY3Rpb24uIFRoYXQncyB0aGUgbmV4dCBzdGVwIGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjQ6MzQuMDU0MjU5NzQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzMwNTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9TQU1QTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NzQyPWNvbmZpZyBORVRfQUNUX01JUlJFRFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzUxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjc1Mjpjb25maWcgTkVUX0FDVF9TQU1QTEVcXG5uZXQvc2NoZWQvS2NvbmZpZy03NTMtXFx0dHJpc3RhdGUgXFxcIlRyYWZmaWMgU2FtcGxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI0OjM0LjQyMTU2OTkwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjY0MDI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0J3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLlxuXG4qKlVucGFja2luZyB0aGUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBmaWd1cmUgb3V0IHRoZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmc7IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBlbGVtZW50cyB0aGF0IHVuZGVycGluIHRoZSBzaXR1YXRpb24uIFdoYXQgYXJlIHRoZSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBkcml2ZSB0aGlzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBNeSBmb2N1cyBpcyB0byBjcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgdG8gZXhwbGFpbiB0aGlzIHByb2JsZW0uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhhdCdzIHRoZSBvbmx5IHBsYWNlIHRvIHN0YXJ0IHRvIGdvIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI0OjM3LjY4Nzk3NTc5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTI6XFx0Y29uZmlnIE5FVF9BQ1RfU0FNUExFXFxuIDc1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBTYW1wbGluZ1xcXCJcXG4gNzU0OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzU1OlxcdFxcdHNlbGVjdCBQU0FNUExFXFxuIDc1NjpcXHRcXHRoZWxwXFxuIDc1NzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0IHNhbXBsaW5nIHRjIGFjdGlvbi4gVGhlIHBhY2tldCBzYW1wbGVcXG4gNzU4OlxcdFxcdCAgYWN0aW9uIGNvbnNpc3RzIG9mIHN0YXRpc3RpY2FsbHkgY2hvb3NpbmcgcGFja2V0cyBhbmQgc2FtcGxpbmdcXG4gNzU5OlxcdFxcdCAgdGhlbSB1c2luZyB0aGUgcHNhbXBsZSBtb2R1bGUuXFxuIDc2MDpcXHRcXG4gNzYxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3NjI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NhbXBsZS5cXG4gNzYzOlxcdFxcbiA3NjQ6XFx0Y29uZmlnIE5FVF9BQ1RfTkFUXFxuIDc2NTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3RhdGVsZXNzIE5BVFxcXCJcXG4gNzY2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzY3OlxcdFxcdGhlbHBcXG4gNzY4OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBkbyBzdGF0ZWxlc3MgTkFUIG9uIElQdjQgcGFja2V0cy4gIFlvdSBzaG91bGQgdXNlXFxuIDc2OTpcXHRcXHQgIG5ldGZpbHRlciBmb3IgTkFUIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDozNy42ODgwNzQwNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY2MDE0NjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBOZXR3b3JrIEFjdGl2YXRpb24gYW5kIFNhbXBsaW5nIFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgYWN0aXZhdGlvbiBhbmQgY2xhc3NpZmljYXRpb24gYWN0aXZpdHkgbm93LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBgTkVUX0FDVF9TQU1QTEVgIGFuZCBgTkVUX0NMU19BQ1RgIGRlZmluZWQuIFRob3NlIGFyZSBjcml0aWNhbC4gQW5kIEkgc2VlIHRoYXQgYFBTQU1QTEVgIGhhcyBiZWVuIHNlbGVjdGVkOyB0aGF0J3MgZ29vZC4gTm93LCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19BQ1RgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZlcnl0aGluZyB0aGF0ICppdCogZGVwZW5kcyBvbiBpcyBhbHNvIHNldCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBjb25mbGljdHMgb3IgbWlzc2luZyBwaWVjZXMgdGhhdCB3aWxsIGJpdGUgbWUgbGF0ZXIuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDo0Ny4zNDgyMjMzNDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTk0Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDo0Ny4zOTYyMjY0MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0OTIxNTAzOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTkVUX0NMU19BQ1QgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgY2xlYXI6IHdlJ3JlIGRpdmluZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9DTFNfQUNUYC4gR2l2ZW4gdGhhdCwgSSBpbW1lZGlhdGVseSBzdGFydCBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgYXJlYXMgb2YgY29uY2Vybi4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbW9kdWxlcz8gVXNlcnNwYWNlIHV0aWxpdGllcz8gV2hhdCdzIHRoZSBjb250ZXh0IC0gYXJlIHdlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBuZXR3b3JraW5nIHN0YWNrLCBvciBhIG1vcmUgZ2VuZXJhbCBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZS5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyB0byBuYXZpZ2F0ZSBhIGRlcGVuZGVuY3kgdHJlZS4gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleTogYXJlIHdlIGRlYWxpbmcgd2l0aCBmdW5jdGlvbmFsaXR5LCBoYXJkd2FyZSBzdXBwb3J0LCBvciBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBkZXBlbmRlbmN5PyBTZWN1cml0eT8gUGVyZm9ybWFuY2U/IFJlc291cmNlIGNvbnN1bXB0aW9uPyBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIG1peCBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IGxpbmtzIOKAkyBjYXNjYWRpbmcgZGVwZW5kZW5jaWVzIGFyZSBhbG1vc3QgaW5ldml0YWJsZSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuIEknbGwgbmVlZCB0byB3YXRjaCBvdXQgZm9yIHBvdGVudGlhbCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYXMgd2VsbCwgYWx0aG91Z2ggdGhlIGtlcm5lbCB0cmllcyBpdHMgYmVzdCB0byBwcmV2ZW50IHRoaXMsIG9mIGNvdXJzZS5cblxuTXkgaW1tZWRpYXRlIGdvYWxzIGFyZSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCB2dWxuZXJhYmlsaXRpZXMsIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgYXJjaGl0ZWN0dXJhbCBmbGF3cywgb3IgcG90ZW50aWFsIHBvaW50cyBvZiBmcmFnaWxpdHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yayBlbGVtZW50cy4gSSdtIGFsc28gcHJlcGFyaW5nIHRvIG1hcCBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgb3IgcnVudGltZSBvcHRpb25zLiBUaGUgZGV0YWlscyBpbiB0aGUgYWN0dWFsIGRlcGVuZGVuY3kgZ3JhcGggYXJlIHdoYXQgdHJ1bHkgbWF0dGVycyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTg1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI2OjUyLjMxNzczNDE4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDI6XFx0Y29uZmlnIE5FVF9DTFNfQUNUXFxuIDcwMzpcXHRcXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcbiA3MDQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNzA1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXFxuIDcwODpcXHRcXHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXFxuIDcwOTpcXHRcXHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cXG4gNzEwOlxcdFxcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXFxuIDcxMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjY6NTIuMzE3ODIzMTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI2MzI3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVENGIFNhbXBsaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgY29yZSBvZiB0aGlzLiBgTkVUX0FDVF9TQU1QTEVgIGFuZCBgTkVUX0NMU19BQ1RgIOKAkyB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbGVtZW50cyBoZXJlLiBUaGV5J3JlIGxpa2VseSB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBmb3Igc2FtcGxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIHdpdGhpbiB0aGlzIG5ldHdvcmtpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBzYW1wbGluZyBtZWNoYW5pc20uIEl04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgYWN0aW9uIGZ1bmN0aW9uPyBXaGF0IGFib3V0IGB0Y2Zfc2FtcGxlX2FjdGA/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgYWN0aW9uIG9yIHByb2Nlc3NpbmcgY29tcG9uZW50IHRoYXQgZGlyZWN0bHkgd29ya3Mgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIEdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUgaXMga2V5IGZvciBhIHRydWx5IGVmZmVjdGl2ZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjY6NTUuNjEwNDU5MjExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc1NDc3MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX3NhbXBsZV9hY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTE1MT1zdGF0aWMgYm9vbCB0Y2Zfc2FtcGxlX2Rldl9va19wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTE2Ni1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jOjE2NzpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NhbXBsZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTE2OC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTMyMT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyNC1cXHQub3duZXJcXHQgID0gVEhJU19NT0RVTEUsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMjU6XFx0LmFjdFxcdCAgPSB0Y2Zfc2FtcGxlX2FjdCxcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyNi1cXHQuc3RhdHNfdXBkYXRlID0gdGNmX3NhbXBsZV9zdGF0c191cGRhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI2OjU2LjAwODAxMTg2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc4MzI1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipJbml0aWFsIEFjdGlvbiBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbiBhbmQgQ29udGV4dHVhbGl6YXRpb24qKlxuXG5SaWdodCwgc28sIEkndmUgY29uZmlybWVkIHRoYXQgYHRjZl9zYW1wbGVfYWN0YCBpcyBpbmRlZWQgdGhlIGFjdGlvbiBmdW5jdGlvbi4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgZ2V0IHRob3NlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBhcmUgY29ycmVjdGx5IGFkZGVkIHRvIHRoYXQuIEl0J3MgY3J1Y2lhbCBmb3IgdGhlIHN5c3RlbSB0byByZWNvZ25pemUgYW5kIGhhbmRsZSB0aGVtIHByb3Blcmx5LlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gcmV2aXNpdCBgTkVUX0FDVF9TQU1QTEVgLiBJJ20gZ29pbmcgdG8gcnVuIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAsIHdoaWNoIGlzIG5lc3RlZCB1bmRlciBgTkVUX1NDSEVEYC4gU28sIHRoZSBzdHJ1Y3R1cmUgaXMgY2xlYXIuIE5vIHJlZCBmbGFncyBhdCB0aGlzIHN0YWdlLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGRlcGVuZGVuY3kgc3RydWN0dXJlIGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgaW50ZW5kZWQgZmxvdyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkVUX0FDVF9TQU1QTEVgIGRvZXNuJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBzdXBwb3J0aW5nIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzowMC44ODYzNDExNTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODMyMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzowMC45MzUxODIwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzAyMzY1NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIHRoZSBuZWVkIGZvciBgTkVUX1NDSEVEYCBoZXJlLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBzY29wZS4gTG9va2luZyBhdCB0aGUgY29uZmlncywgd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGFuZCBgTkVUX0FDVF9TQU1QTEVgLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiB0aG9zZSBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBzeW1ib2xzLlxuXG5UaGUgZ2lzdCBvZiBpdCBpcyBhIGJ1ZyBmaXggaW4gYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgLiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGZsYXcgd2l0aGluIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHRydW5jYXRpb24gc2V0dGluZ3MgYXJlIGhhbmRsZWQgd2hlbiB1cGRhdGluZyBhIHRyYWZmaWMgY29udHJvbCAodGMpIHNhbXBsZSBhY3Rpb24uIEl0IHNlZW1zIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJ3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBvbGQgdHJ1bmNhdGlvbiB2YWx1ZXMgd291bGQgcGVyc2lzdCwgd2hpY2ggaXMgY2xlYXJseSB1bmludGVuZGVkLiBUaGlzIHdvdWxkIGRlZmluaXRlbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIG9yIGNhdXNlIG90aGVyIGlzc3VlcywgbWFraW5nIHRoaXMgYSBjcml0aWNhbCBmaXguXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbGV2ZWwsIGNvbmNlcm5pbmcgdGMgYWN0aW9ucywgYW5kIGlzIGV4cG9zZWQgdmlhIG5ldGxpbmsuIEdpdmVuIHRoaXMgdXNlcnNwYWNlIGFjY2Vzc2liaWxpdHksIEknZCBzYXkgdGhpcyBhcmVhIG5lZWRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmVuJ3QgaW50cm9kdWNlZCBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciByZWdyZXNzaW9ucy5cblxuQWxyaWdodCwgbGV0J3MgcHJvY2VlZCB3aXRoIHRoZSBzZXQtcmVzdWx0cyBjYWxsLiBUaW1lIHRvIGV2YWx1YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjczLCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzoxMC42Mzc1NTE4NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODc5MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0FDVF9TQU1QTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2Zfc2FtcGxlX2luaXRcIixcbiAgICBcInRjZl9zYW1wbGVfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9zYW1wbGVfaW5pdGAgaW4gYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgIHRvIGV4cGxpY2l0bHkgcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgd2hlbiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBub3QgcHJvdmlkZWQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHRjIHNhbXBsZSBhY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0YWluIHRoZSBvbGQgdHJ1bmNhdGlvbiBzZXR0aW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBzdWJzeXN0ZW0gKHRjIGFjdGlvbnMpIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfU0FNUExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3NhbXBsZV9pbml0XCIsXG4gICAgXCJ0Y2Zfc2FtcGxlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2Zfc2FtcGxlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYCB0byBleHBsaWNpdGx5IHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXMgbm90IHByb3ZpZGVkLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyB0YyBzYW1wbGUgYWN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldGFpbiB0aGUgb2xkIHRydW5jYXRpb24gc2V0dGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtICh0YyBhY3Rpb25zKSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6Mjc6MTAuNzI2MzUzNDM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NDY0NTUzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzoxMC43MjY5NzE4MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NTQ1ODI2MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2dpYyBidWcgaW4gYHRjZl9zYW1wbGVfaW5pdGAgd2hlcmUgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGB0Y2Agc2FtcGxlIGFjdGlvbiBmYWlscyB0byByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyBpZiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gb21pdHMgdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZS4gVGhlIGFjdGlvbiBzdHJ1Y3R1cmUgaXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgaW4gYHRjZl9pZHJfY3JlYXRlYCwgc28gdGhlIG1lbW9yeSBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYWJvdXQgcmV0YWluaW5nIHN0YWxlIHN0YXRlIGR1cmluZyBhbiB1cGRhdGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGlzIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTM0OThlZDBhZGY2OTMxYWZlZGFkMWNkNjhkY2UzOGI2NmI0MzY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6MjM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xuaW5kZXggMmNlYjRkMTQxYjcxMy4uMmJkYzdhMGViNmQ2OCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbisrKyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbkBAIC0xMTYsNiArMTE2LDkgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkge1xuIFx0XHRzLVx1MDAzZXRydW5jYXRlID0gdHJ1ZTtcbiBcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRzLVx1MDAzZXRydW5jYXRlID0gZmFsc2U7XG4rXHRcdHMtXHUwMDNldHJ1bmNfc2l6ZSA9IDA7XG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI3OjEwLjcyNjk3MzY1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk1NjE3Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgb3JpZ2luYWwgY29kZSBvbmx5IHNldHMgYHMtXHUwMDNldHJ1bmNhdGVgIGFuZCBgcy1cdTAwM2V0cnVuY19zaXplYCBpZiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBwcmVzZW50IGluIHRoZSB0YWJsZSBgdGJgLiBUaGlzIG5ldyBjb2RlIGFkZHMgYSBkZWZhdWx0IGluaXRpYWxpemF0aW9uOyBzbywgaWYgdGhlIGF0dHJpYnV0ZSBpcyAqbm90KiBwcmVzZW50LCBgcy1cdTAwM2V0cnVuY2F0ZWAgaXMgZXhwbGljaXRseSBzZXQgdG8gYGZhbHNlYCBhbmQgYHMtXHUwMDNldHJ1bmNfc2l6ZWAgaXMgc2V0IHRvIGAwYC5cblxuTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0IGEgc2Vjb25kLi4uIGBzYCBpcyBhIGBzdHJ1Y3QgdGNmX3NhbXBsZWAsIHJpZ2h0PyBNeSBndXQgdGVsbHMgbWUgdGhhdCBgc2Agc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcGF0Y2ggaXMgcmVkdW5kYW50IGFuZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIG92ZXJoZWFkLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGB0Y2Zfc2FtcGxlX2luaXRgIGZ1bmN0aW9uIHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgYWxyZWFkeSB6ZXJvaW5nIHRoZSBzdHJ1Y3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzo1OC42ODMxNDk4MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3Rfc2FtcGxlX29wcy5uZXRfaWQpO1xcbiAgNDI6XFx0XFx0Ym9vbCBiaW5kID0gZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX0JJTkQ7XFxuICA0MzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfU0FNUExFX01BWCArIDFdO1xcbiAgNDQ6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XFxuICA0NTpcXHRcXHR1MzIgcHNhbXBsZV9ncm91cF9udW0sIHJhdGUsIGluZGV4O1xcbiAgNDY6XFx0XFx0c3RydWN0IHRjZl9jaGFpbiAqZ290b19jaCA9IE5VTEw7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgdGNfc2FtcGxlICpwYXJtO1xcbiAgNDg6XFx0XFx0c3RydWN0IHRjZl9zYW1wbGUgKnM7XFxuICA0OTpcXHRcXHRib29sIGV4aXN0cyA9IGZhbHNlO1xcbiAgNTA6XFx0XFx0aW50IHJldCwgZXJyO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRpZiAoIW5sYSlcXG4gIDUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNTQ6XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfU0FNUExFX01BWCwgbmxhLFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1wbGVfcG9saWN5LCBOVUxMKTtcXG4gIDU2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0aWYgKCF0YltUQ0FfU0FNUExFX1BBUk1TXSlcXG4gIDYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRwYXJtID0gbmxhX2RhdGEodGJbVENBX1NBTVBMRV9QQVJNU10pO1xcbiAgNjM6XFx0XFx0aW5kZXggPSBwYXJtLVxcdTAwM2VpbmRleDtcXG4gIDY0OlxcdFxcdGVyciA9IHRjZl9pZHJfY2hlY2tfYWxsb2ModG4sIFxcdTAwMjZpbmRleCwgYSwgYmluZCk7XFxuICA2NTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gIDY2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA2NzpcXHRcXHRleGlzdHMgPSBlcnI7XFxuICA2ODpcXHRcXHRpZiAoZXhpc3RzIFxcdTAwMjZcXHUwMDI2IGJpbmQpXFxuICA2OTpcXHRcXHRcXHRyZXR1cm4gQUNUX1BfQk9VTkQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGlmICghZXhpc3RzKSB7XFxuICA3MjpcXHRcXHRcXHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSxcXG4gIDczOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmFjdF9zYW1wbGVfb3BzLCBiaW5kLCB0cnVlLCBmbGFncyk7XFxuICA3NDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuICA3NTpcXHRcXHRcXHRcXHR0Y2ZfaWRyX2NsZWFudXAodG4sIGluZGV4KTtcXG4gIDc2OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3NzpcXHRcXHRcXHR9XFxuICA3ODpcXHRcXHRcXHRyZXQgPSBBQ1RfUF9DUkVBVEVEO1xcbiAgNzk6XFx0XFx0fSBlbHNlIGlmICghKGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19SRVBMQUNFKSkge1xcbiAgODA6XFx0XFx0XFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcXG4gIDgxOlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRpZiAoIXRiW1RDQV9TQU1QTEVfUkFURV0gfHwgIXRiW1RDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUF0pIHtcXG4gIDg1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInNhbXBsZSByYXRlIGFuZCBncm91cCBhcmUgcmVxdWlyZWRcXFwiKTtcXG4gIDg2OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuICA4NzpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfaWRyO1xcbiAgODg6XFx0XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRlcnIgPSB0Y2ZfYWN0aW9uX2NoZWNrX2N0cmxhY3QocGFybS1cXHUwMDNlYWN0aW9uLCB0cCwgXFx1MDAyNmdvdG9fY2gsIGV4dGFjayk7XFxuICA5MTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gIDkyOlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9pZHI7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHJhdGUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1JBVEVdKTtcXG4gIDk1OlxcdFxcdGlmICghcmF0ZSkge1xcbiAgOTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiaW52YWxpZCBzYW1wbGUgcmF0ZVxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gIDk4OlxcdFxcdFxcdGdvdG8gcHV0X2NoYWluO1xcbiAgOTk6XFx0XFx0fVxcbiAxMDA6XFx0XFx0cHNhbXBsZV9ncm91cF9udW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVBdKTtcXG4gMTAxOlxcdFxcdHBzYW1wbGVfZ3JvdXAgPSBwc2FtcGxlX2dyb3VwX2dldChuZXQsIHBzYW1wbGVfZ3JvdXBfbnVtKTtcXG4gMTAyOlxcdFxcdGlmICghcHNhbXBsZV9ncm91cCkge1xcbiAxMDM6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTA0OlxcdFxcdFxcdGdvdG8gcHV0X2NoYWluO1xcbiAxMDU6XFx0XFx0fVxcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRzID0gdG9fc2FtcGxlKCphKTtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDExMDpcXHRcXHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cXHUwMDNlYWN0aW9uLCBnb3RvX2NoKTtcXG4gMTExOlxcdFxcdHMtXFx1MDAzZXJhdGUgPSByYXRlO1xcbiAxMTI6XFx0XFx0cy1cXHUwMDNlcHNhbXBsZV9ncm91cF9udW0gPSBwc2FtcGxlX2dyb3VwX251bTtcXG4gMTEzOlxcdFxcdHBzYW1wbGVfZ3JvdXAgPSByY3VfcmVwbGFjZV9wb2ludGVyKHMtXFx1MDAzZXBzYW1wbGVfZ3JvdXAsIHBzYW1wbGVfZ3JvdXAsXFxuIDExNDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jaykpO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkge1xcbiAxMTc6XFx0XFx0XFx0cy1cXHUwMDNldHJ1bmNhdGUgPSB0cnVlO1xcbiAxMTg6XFx0XFx0XFx0cy1cXHUwMDNldHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pO1xcbiAxMTk6XFx0XFx0fSBlbHNlIHtcXG4gMTIwOlxcdFxcdFxcdHMtXFx1MDAzZXRydW5jYXRlID0gZmFsc2U7XFxuIDEyMTpcXHRcXHRcXHRzLVxcdTAwM2V0cnVuY19zaXplID0gMDtcXG4gMTIyOlxcdFxcdH1cXG4gMTIzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdGlmIChwc2FtcGxlX2dyb3VwKVxcbiAxMjY6XFx0XFx0XFx0cHNhbXBsZV9ncm91cF9wdXQocHNhbXBsZV9ncm91cCk7XFxuIDEyNzpcXHRcXHRpZiAoZ290b19jaClcXG4gMTI4OlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMzE6XFx0cHV0X2NoYWluOlxcbiAxMzI6XFx0XFx0aWYgKGdvdG9fY2gpXFxuIDEzMzpcXHRcXHRcXHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcXG4gMTM0OlxcdHJlbGVhc2VfaWRyOlxcbiAxMzU6XFx0XFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcXG4gMTM2OlxcdFxcdHJldHVybiBlcnI7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyB2b2lkIHRjZl9zYW1wbGVfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzo1OC42ODMyNDMyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTYyNjM4MTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0Y2Zfc2FtcGxlYCBBY3Rpb24gSW5pdGlhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHMgYW4gYGVsc2VgIGJyYW5jaCB0byBpbml0aWFsaXplIGBzLVx1MDAzZXRydW5jYXRlYCBhbmQgYHMtXHUwMDNldHJ1bmNfc2l6ZWAgd2hlbiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpc24ndCBwcmVzZW50IGluIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgaG93IGBzYCBpcyBhbGxvY2F0ZWQuIEkgcmVtZW1iZXIgdGhhdCBgc2AgaXMgYWxsb2NhdGVkIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHdoaWNoIGNhbGxzIGBremFsbG9jYCBvciBzaW1pbGFyLCBzbyBpdCdzICp6ZXJvLWluaXRpYWxpemVkKiB3aGVuIGNyZWF0ZWQuXG5cblNvLCB3aHkgdGhlIHBhdGNoPyBUaGF04oCZcyB0aGUga2V5LiBUaGVuIGl0IGhpdHMgbWUhIGB0Y2Zfc2FtcGxlX2luaXRgIGNhbiBiZSB1c2VkIHRvICpyZXBsYWNlKiBhbiBleGlzdGluZyBhY3Rpb24uIE9rYXksIHRoZSBpbXBvcnRhbnQgY29kZSBzbmlwcGV0IGlzOlxuXG5gYGBjXG5cdGlmICghZXhpc3RzKSB7XG5cdFx0cmV0ID0gdGNmX2lkcl9jcmVhdGUodG4sIGluZGV4LCBlc3QsIGEsXG5cdFx0XHRcdCAgICAgXHUwMDI2YWN0X3NhbXBsZV9vcHMsIGJpbmQsIHRydWUsIGZsYWdzKTtcbi4uLlxuXHR9IGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRSkpIHtcblx0XHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xuXHRcdHJldHVybiAtRUVYSVNUO1xuXHR9XG5gYGBcblxuSWYgdGhlIGFjdGlvbiBhbHJlYWR5ICpleGlzdHMqIGFuZCBgVENBX0FDVF9GTEFHU19SRVBMQUNFYCBpcyBzZXQsIGl0IHVwZGF0ZXMgdGhlIGV4aXN0aW5nIGFjdGlvbiBgc2AuIFRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBJZiB0aGUgb2xkIGFjdGlvbiBoYWQgYHMtXHUwMDNldHJ1bmNhdGUgPSB0cnVlYCBhbmQgYHMtXHUwMDNldHJ1bmNfc2l6ZSA9IFhgLCBhbmQgdGhlIG5ldyBuZXRsaW5rIG1lc3NhZ2UgKmRvZXNuJ3QqIHByb3ZpZGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAsIHRoZSBvbGQgdmFsdWVzIHdvdWxkIGJlIHJldGFpbmVkISBUaGlzIHBhdGNoIGVzc2VudGlhbGx5IHJlc2V0cyBgcy1cdTAwM2V0cnVuY2F0ZWAgYW5kIGBzLVx1MDAzZXRydW5jX3NpemVgIHRvIGBmYWxzZWAgYW5kIGAwYCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXNuJ3QgcHJvdmlkZWQsIHdoaWNoIGZpeGVzIHRoZSBmYWlsdXJlIHRvIGNsZWFyIHRoZSB0cnVuY2F0aW9uIHNldHRpbmdzIHdoZW4gcmVwbGFjaW5nIGFuIGFjdGlvbi5cblxuU28sIGlzIHRoaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IE5vLCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgYnkgYWxsb2NhdGlvbi4gSG93ZXZlciwgdGhpcyBpcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGZhaWxzIHRvIGNsZWFyIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcHJldmlvdXMgYWN0aW9uLlxuXG5Eb2VzIHRoaXMgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGl0IGp1c3QgcmV1c2VzIG9sZCwgcG90ZW50aWFsbHkgc3RhbGUsIHZhbHVlcy4gRG9lcyBpdCBjYXVzZSBhbiBpbmZvcm1hdGlvbiBsZWFrPyBOb3QgZGlyZWN0bHksIGl0J3MganVzdCBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGZpZWxkIGlzbid0IGNsZWFyZWQuXG5cblRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrIGlzLCBhcmUgYHMtXHUwMDNldHJ1bmNhdGVgIG9yIGBzLVx1MDAzZXRydW5jX3NpemVgIHVzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gTG9va3MgbGlrZSB0aGV5IGFyZSB1c2VkIGluIGB0Y2Zfc2FtcGxlX2FjdGAgKG9yIHNpbWlsYXIpLiBUaGF0IHdpbGwgYmUgd29ydGggY2hlY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyODoxMC4zMDk2Mjc0NjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHR7XFxuIDE0MTpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcXG4gMTQyOlxcdFxcdHN0cnVjdCBwc2FtcGxlX2dyb3VwICpwc2FtcGxlX2dyb3VwO1xcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQvKiBsYXN0IHJlZmVyZW5jZSB0byBhY3Rpb24sIG5vIG5lZWQgdG8gbG9jayAqL1xcbiAxNDU6XFx0XFx0cHNhbXBsZV9ncm91cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy1cXHUwMDNlcHNhbXBsZV9ncm91cCwgMSk7XFxuIDE0NjpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHMtXFx1MDAzZXBzYW1wbGVfZ3JvdXAsIE5VTEwpO1xcbiAxNDc6XFx0XFx0aWYgKHBzYW1wbGVfZ3JvdXApXFxuIDE0ODpcXHRcXHRcXHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcXG4gMTQ5OlxcdH1cXG4gMTUwOlxcdFxcbiAxNTE6XFx0c3RhdGljIGJvb2wgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxNTI6XFx0e1xcbiAxNTM6XFx0XFx0c3dpdGNoIChkZXYtXFx1MDAzZXR5cGUpIHtcXG4gMTU0OlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDpcXG4gMTU1OlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDY6XFxuIDE1NjpcXHRcXHRjYXNlIEFSUEhSRF9TSVQ6XFxuIDE1NzpcXHRcXHRjYXNlIEFSUEhSRF9JUEdSRTpcXG4gMTU4OlxcdFxcdGNhc2UgQVJQSFJEX0lQNkdSRTpcXG4gMTU5OlxcdFxcdGNhc2UgQVJQSFJEX1ZPSUQ6XFxuIDE2MDpcXHRcXHRjYXNlIEFSUEhSRF9OT05FOlxcbiAxNjE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNjI6XFx0XFx0ZGVmYXVsdDpcXG4gMTYzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAxNjQ6XFx0XFx0fVxcbiAxNjU6XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHRUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NhbXBsZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHN0cnVjdCB0Y2Zfc2FtcGxlICpzID0gdG9fc2FtcGxlKGEpO1xcbiAxNzI6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XFxuIDE3MzpcXHRcXHR1OCBjb29raWVfZGF0YVtUQ19DT09LSUVfTUFYX1NJWkVdO1xcbiAxNzQ6XFx0XFx0c3RydWN0IHBzYW1wbGVfbWV0YWRhdGEgbWQgPSB7fTtcXG4gMTc1OlxcdFxcdHN0cnVjdCB0Y19jb29raWUgKnVzZXJfY29va2llO1xcbiAxNzY6XFx0XFx0aW50IHJldHZhbDtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0dGNmX2xhc3R1c2VfdXBkYXRlKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfdG0pO1xcbiAxNzk6XFx0XFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIocy1cXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xcbiAxODA6XFx0XFx0cmV0dmFsID0gUkVBRF9PTkNFKHMtXFx1MDAzZXRjZl9hY3Rpb24pO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRwc2FtcGxlX2dyb3VwID0gcmN1X2RlcmVmZXJlbmNlX2JoKHMtXFx1MDAzZXBzYW1wbGVfZ3JvdXApO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHQvKiByYW5kb21seSBzYW1wbGUgcGFja2V0cyBhY2NvcmRpbmcgdG8gcmF0ZSAqL1xcbiAxODU6XFx0XFx0aWYgKHBzYW1wbGVfZ3JvdXAgXFx1MDAyNlxcdTAwMjYgKGdldF9yYW5kb21fdTMyX2JlbG93KHMtXFx1MDAzZXJhdGUpID09IDApKSB7XFxuIDE4NjpcXHRcXHRcXHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpIHtcXG4gMTg3OlxcdFxcdFxcdFxcdG1kLmluX2lmaW5kZXggPSBza2ItXFx1MDAzZXNrYl9paWY7XFxuIDE4ODpcXHRcXHRcXHRcXHRtZC5vdXRfaWZpbmRleCA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4O1xcbiAxODk6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTkwOlxcdFxcdFxcdFxcdG1kLmluX2lmaW5kZXggPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0Lyogb24gaW5ncmVzcywgdGhlIG1hYyBoZWFkZXIgZ2V0cyBwb3BwZWQsIHNvIHB1c2ggaXQgYmFjayAqL1xcbiAxOTQ6XFx0XFx0XFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikgXFx1MDAyNlxcdTAwMjYgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChza2ItXFx1MDAzZWRldikpXFxuIDE5NTpcXHRcXHRcXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTk4OlxcdFxcdFxcdHVzZXJfY29va2llID0gcmN1X2RlcmVmZXJlbmNlKGEtXFx1MDAzZXVzZXJfY29va2llKTtcXG4gMTk5OlxcdFxcdFxcdGlmICh1c2VyX2Nvb2tpZSkge1xcbiAyMDA6XFx0XFx0XFx0XFx0bWVtY3B5KGNvb2tpZV9kYXRhLCB1c2VyX2Nvb2tpZS1cXHUwMDNlZGF0YSxcXG4gMjAxOlxcdFxcdFxcdFxcdCAgICAgICB1c2VyX2Nvb2tpZS1cXHUwMDNlbGVuKTtcXG4gMjAyOlxcdFxcdFxcdFxcdG1kLnVzZXJfY29va2llID0gY29va2llX2RhdGE7XFxuIDIwMzpcXHRcXHRcXHRcXHRtZC51c2VyX2Nvb2tpZV9sZW4gPSB1c2VyX2Nvb2tpZS1cXHUwMDNlbGVuO1xcbiAyMDQ6XFx0XFx0XFx0fVxcbiAyMDU6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdFxcdG1kLnRydW5jX3NpemUgPSBzLVxcdTAwM2V0cnVuY2F0ZSA/IHMtXFx1MDAzZXRydW5jX3NpemUgOiBza2ItXFx1MDAzZWxlbjtcXG4gMjA4OlxcdFxcdFxcdHBzYW1wbGVfc2FtcGxlX3BhY2tldChwc2FtcGxlX2dyb3VwLCBza2IsIHMtXFx1MDAzZXJhdGUsIFxcdTAwMjZtZCk7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpIFxcdTAwMjZcXHUwMDI2IHRjZl9zYW1wbGVfZGV2X29rX3B1c2goc2tiLVxcdTAwM2VkZXYpKVxcbiAyMTE6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBza2ItXFx1MDAzZW1hY19sZW4pO1xcbiAyMTI6XFx0XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAyMTU6XFx0fVxcbiAyMTY6XFx0XFxuIDIxNzpcXHRzdGF0aWMgdm9pZCB0Y2Zfc2FtcGxlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxcbiAyMTg6XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBkcm9wcywgdTY0IGxhc3R1c2UsIGJvb2wgaHcpXFxuIDIxOTpcXHR7XFxuIDIyMDpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcXG4gMjIxOlxcdFxcdHN0cnVjdCB0Y2ZfdCAqdG0gPSBcXHUwMDI2cy1cXHUwMDNldGNmX3RtO1xcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHR0Y2ZfYWN0aW9uX3VwZGF0ZV9zdGF0cyhhLCBieXRlcywgcGFja2V0cywgZHJvcHMsIGh3KTtcXG4gMjI0OlxcdFxcdHRtLVxcdTAwM2VsYXN0dXNlID0gbWF4X3QodTY0LCB0bS1cXHUwMDNlbGFzdHVzZSwgbGFzdHVzZSk7XFxuIDIyNTpcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuIDIyODpcXHRcXHRcXHRcXHQgICBpbnQgYmluZCwgaW50IHJlZilcXG4gMjI5OlxcdHtcXG4gMjMwOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XFxuIDIzMTpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcXG4gMjMyOlxcdFxcdHN0cnVjdCB0Y19zYW1wbGUgb3B0ID0ge1xcbiAyMzM6XFx0XFx0XFx0LmluZGV4ICAgICAgPSBzLVxcdTAwM2V0Y2ZfaW5kZXgsXFxuIDIzNDpcXHRcXHRcXHQucmVmY250ICAgICA9IHJlZmNvdW50X3JlYWQoXFx1MDAyNnMtXFx1MDAzZXRjZl9yZWZjbnQpIC0gcmVmLFxcbiAyMzU6XFx0XFx0XFx0LmJpbmRjbnQgICAgPSBhdG9taWNfcmVhZChcXHUwMDI2cy1cXHUwMDNldGNmX2JpbmRjbnQpIC0gYmluZCxcXG4gMjM2OlxcdFxcdH07XFxuIDIzNzpcXHRcXHRzdHJ1Y3QgdGNmX3QgdDtcXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjEwLjMwOTczNTUyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI5NjAwNTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBwcmVzZW50ZWQgd2l0aCBhIGZpbGUsIGxpa2VseSBhIGRhdGEgZHVtcCBvciBhIGxvZywgbmFtZWQgYHRjZl9zYW1wbGVfZHVtcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cIlxuXG4qKkRlY29uc3RydWN0aW5nIGB0Y2Zfc2FtcGxlX2R1bXBgKipcblxuTXkgZXhwZXJ0IGV5ZSBpcyBhbHJlYWR5IHNjYW5uaW5nLCBtZW50YWxseSBjYXRhbG9naW5nIHBvc3NpYmlsaXRpZXMuIElzIHRoaXMgYSB0ZXh0IGZpbGUsIGEgYmluYXJ5IGZpbGUsIGEgZGF0YWJhc2UgZHVtcCwgYSBuZXR3b3JrIHRyYWNlPyBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBcIlRDRlwiIHByb2JhYmx5IHN0YW5kcyBmb3Igc29tZXRoaW5nIHJlbGV2YW50IHRvIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvdG9jb2wsIGZyYW1ld29yaywgb3IgZXZlbiBhIHN5c3RlbSBhcmNoaXRlY3R1cmUgdGhhdCBJJ20gZmFtaWxpYXIgd2l0aC4gVGhlIFwic2FtcGxlXCIgcGFydCBzdWdnZXN0cyB0aGlzIGlzbid0IHRoZSBwcmltYXJ5IHByb2R1Y3Rpb24gZGF0YSwgd2hpY2ggaXMgZ29vZC4gRWFzaWVyIHRvIGFuYWx5emUhIEl0J3MgYSBzYW1wbGUsIHNvIEknbSBob3BpbmcgaXQncyBhIG1hbmFnZWFibGUgc2l6ZSBhbmQgZG9lc24ndCBjb250YWluIGFueSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFRoZSBcImR1bXBcIiB0ZWxscyBtZSB3ZSBhcmUgbGlrZWx5IGxvb2tpbmcgYXQgYSBzbmFwc2hvdCwgd2hpY2ggSSBjYW4gdXNlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcsIHByb2ZpbGluZywgYW5kIGFuYWx5emluZyBkYXRhIHBhdHRlcm5zLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBoeXBvdGhlc2VzIGFib3V0IHRoZSB0eXBlIG9mIGluc2lnaHRzIEkgY2FuIGdsZWFuIGZyb20gdGhpcywgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kIHdpdGhpbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGluIHRoaXMgdGhpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjIwLjYwNTc0NTc0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdG9wdC5hY3Rpb24gPSBzLVxcdTAwM2V0Y2ZfYWN0aW9uO1xcbiAyNDE6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBUQ0FfU0FNUExFX1BBUk1TLCBzaXplb2Yob3B0KSwgXFx1MDAyNm9wdCkpXFxuIDI0MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0dGNmX3RtX2R1bXAoXFx1MDAyNnQsIFxcdTAwMjZzLVxcdTAwM2V0Y2ZfdG0pO1xcbiAyNDU6XFx0XFx0aWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBUQ0FfU0FNUExFX1RNLCBzaXplb2YodCksIFxcdTAwMjZ0LCBUQ0FfU0FNUExFX1BBRCkpXFxuIDI0NjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1NBTVBMRV9SQVRFLCBzLVxcdTAwM2VyYXRlKSlcXG4gMjQ5OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRpZiAocy1cXHUwMDNldHJ1bmNhdGUpXFxuIDI1MjpcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBUQ0FfU0FNUExFX1RSVU5DX1NJWkUsIHMtXFx1MDAzZXRydW5jX3NpemUpKVxcbiAyNTM6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIFRDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUCwgcy1cXHUwMDNlcHNhbXBsZV9ncm91cF9udW0pKVxcbiAyNTY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDI1NzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cy1cXHUwMDNldGNmX2xvY2spO1xcbiAyNTg6XFx0XFxuIDI1OTpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuIDI2MDpcXHRcXG4gMjYxOlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4gMjYyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDI2MzpcXHRcXHRubG1zZ190cmltKHNrYiwgYik7XFxuIDI2NDpcXHRcXHRyZXR1cm4gLTE7XFxuIDI2NTpcXHR9XFxuIDI2NjpcXHRcXG4gMjY3OlxcdHN0YXRpYyB2b2lkIHRjZl9wc2FtcGxlX2dyb3VwX3B1dCh2b2lkICpwcml2KVxcbiAyNjg6XFx0e1xcbiAyNjk6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKmdyb3VwID0gcHJpdjtcXG4gMjcwOlxcdFxcbiAyNzE6XFx0XFx0cHNhbXBsZV9ncm91cF9wdXQoZ3JvdXApO1xcbiAyNzI6XFx0fVxcbiAyNzM6XFx0XFxuIDI3NDpcXHRzdGF0aWMgc3RydWN0IHBzYW1wbGVfZ3JvdXAgKlxcbiAyNzU6XFx0dGNmX3NhbXBsZV9nZXRfZ3JvdXAoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gMjc2OlxcdFxcdFxcdCAgICAgdGNfYWN0aW9uX3ByaXZfZGVzdHJ1Y3RvciAqZGVzdHJ1Y3RvcilcXG4gMjc3OlxcdHtcXG4gMjc4OlxcdFxcdHN0cnVjdCB0Y2Zfc2FtcGxlICpzID0gdG9fc2FtcGxlKGEpO1xcbiAyNzk6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKmdyb3VwO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRncm91cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy1cXHUwMDNlcHNhbXBsZV9ncm91cCxcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jaykpO1xcbiAyODM6XFx0XFx0aWYgKGdyb3VwKSB7XFxuIDI4NDpcXHRcXHRcXHRwc2FtcGxlX2dyb3VwX3Rha2UoZ3JvdXApO1xcbiAyODU6XFx0XFx0XFx0KmRlc3RydWN0b3IgPSB0Y2ZfcHNhbXBsZV9ncm91cF9wdXQ7XFxuIDI4NjpcXHRcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdHJldHVybiBncm91cDtcXG4gMjg5OlxcdH1cXG4gMjkwOlxcdFxcbiAyOTE6XFx0c3RhdGljIHZvaWQgdGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5LFxcbiAyOTI6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4gMjkzOlxcdHtcXG4gMjk0OlxcdFxcdGVudHJ5LVxcdTAwM2VzYW1wbGUucHNhbXBsZV9ncm91cCA9XFxuIDI5NTpcXHRcXHRcXHRhY3QtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BzYW1wbGVfZ3JvdXAoYWN0LCBcXHUwMDI2ZW50cnktXFx1MDAzZWRlc3RydWN0b3IpO1xcbiAyOTY6XFx0XFx0ZW50cnktXFx1MDAzZWRlc3RydWN0b3JfcHJpdiA9IGVudHJ5LVxcdTAwM2VzYW1wbGUucHNhbXBsZV9ncm91cDtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4gMzAwOlxcdFxcdFxcdFxcdFxcdFxcdHUzMiAqaW5kZXhfaW5jLCBib29sIGJpbmQsXFxuIDMwMTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMwMjpcXHR7XFxuIDMwMzpcXHRcXHRpZiAoYmluZCkge1xcbiAzMDQ6XFx0XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSA9IGVudHJ5X2RhdGE7XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1NBTVBMRTtcXG4gMzA3OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VzYW1wbGUudHJ1bmNfc2l6ZSA9IHRjZl9zYW1wbGVfdHJ1bmNfc2l6ZShhY3QpO1xcbiAzMDg6XFx0XFx0XFx0ZW50cnktXFx1MDAzZXNhbXBsZS50cnVuY2F0ZSA9IHRjZl9zYW1wbGVfdHJ1bmNhdGUoYWN0KTtcXG4gMzA5OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VzYW1wbGUucmF0ZSA9IHRjZl9zYW1wbGVfcmF0ZShhY3QpO1xcbiAzMTA6XFx0XFx0XFx0dGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChlbnRyeSwgYWN0KTtcXG4gMzExOlxcdFxcdFxcdCppbmRleF9pbmMgPSAxO1xcbiAzMTI6XFx0XFx0fSBlbHNlIHtcXG4gMzEzOlxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfYWN0aW9uICpmbF9hY3Rpb24gPSBlbnRyeV9kYXRhO1xcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRcXHRmbF9hY3Rpb24tXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fU0FNUExFO1xcbiAzMTY6XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRyZXR1cm4gMDtcXG4gMzE5OlxcdH1cXG4gMzIwOlxcdFxcbiAzMjE6XFx0c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xcbiAzMjI6XFx0XFx0LmtpbmRcXHQgID0gXFxcInNhbXBsZVxcXCIsXFxuIDMyMzpcXHRcXHQuaWRcXHQgID0gVENBX0lEX1NBTVBMRSxcXG4gMzI0OlxcdFxcdC5vd25lclxcdCAgPSBUSElTX01PRFVMRSxcXG4gMzI1OlxcdFxcdC5hY3RcXHQgID0gdGNmX3NhbXBsZV9hY3QsXFxuIDMyNjpcXHRcXHQuc3RhdHNfdXBkYXRlID0gdGNmX3NhbXBsZV9zdGF0c191cGRhdGUsXFxuIDMyNzpcXHRcXHQuZHVtcFxcdCAgPSB0Y2Zfc2FtcGxlX2R1bXAsXFxuIDMyODpcXHRcXHQuaW5pdFxcdCAgPSB0Y2Zfc2FtcGxlX2luaXQsXFxuIDMyOTpcXHRcXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxuIDMzMDpcXHRcXHQuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCxcXG4gMzMxOlxcdFxcdC5vZmZsb2FkX2FjdF9zZXR1cCAgICA9IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuIDMzMjpcXHRcXHQuc2l6ZVxcdCAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLFxcbiAzMzM6XFx0fTtcXG4gMzM0OlxcdE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJzYW1wbGVcXFwiKTtcXG4gMzM1OlxcdFxcbiAzMzY6XFx0c3RhdGljIF9fbmV0X2luaXQgaW50IHNhbXBsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIDMzNzpcXHR7XFxuIDMzODpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9zYW1wbGVfb3BzLm5ldF9pZCk7XFxuIDMzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6Mjg6MjAuNjA1ODU3NDQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzEwMDI0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFRydW5jYXRpb24gSXNzdWUgaW4gQWN0aW9uIFJlcGxhY2VtZW50KipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgZmFpbHVyZSB0byByZXNldCBgcy1cdTAwM2V0cnVuY2F0ZWAgYW5kIGBzLVx1MDAzZXRydW5jX3NpemVgIHdoZW4gcmVwbGFjaW5nIGFuIGFjdGlvbi4gSXQncyBhIGNsYXNzaWMgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCB3aGljaCBpcyBhIHJlbGllZiEgTm93LCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBgc2Agc3RydWN0IGlzIHByb3Blcmx5IHplcm8taW5pdGlhbGl6ZWQgZHVyaW5nIGNyZWF0aW9uLiBJIHJlbWVtYmVyIGB0Y2ZfaWRyX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGFjdGlvbiBzdHJ1Y3QsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYHRjZl9pZHJfY3JlYXRlYCBmdW5jdGlvbiBkZWZpbml0aW9uLCB3aGljaCBzaG91bGQgYmUgaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyODo0Ny4zMTU4ODQyNTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTQyMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfaWRyX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9NzQyPXN0YXRpYyBpbnQgdGNmX2lkcl9kZWxldGVfaW5kZXgoc3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvLCB1MzIgaW5kZXgpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTc3NC1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjc3NTppbnQgdGNmX2lkcl9jcmVhdGUoc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuLCB1MzIgaW5kZXgsIHN0cnVjdCBubGF0dHIgKmVzdCxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTc3Ni1cXHRcXHQgICBzdHJ1Y3QgdGNfYWN0aW9uICoqYSwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtODMwLX1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjgzMTpFWFBPUlRfU1lNQk9MKHRjZl9pZHJfY3JlYXRlKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzMi1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjgzMzppbnQgdGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyhzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4sIHUzMiBpbmRleCxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy04MzgtXFx0LyogU2V0IGNwdXN0YXRzIGFjY29yZGluZyB0byBhY3Rpb25zIGZsYWdzLiAqL1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODM5OlxcdHJldHVybiB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSwgb3BzLCBiaW5kLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtODQwLVxcdFxcdFxcdCAgICAgICEoZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX05PX1BFUkNQVV9TVEFUUyksIGZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0MS19XFxubmV0L3NjaGVkL2FjdF9hcGkuYzo4NDI6RVhQT1JUX1NZTUJPTCh0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6Mjg6NDcuNjg1MzE0OTY5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTU2MTg3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y2ZfaWRyX2NyZWF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBhY3Rpb24gQVBJIHN0dWZmLiBJJ20gc3RhcnRpbmcgd2l0aCBgdGNmX2lkcl9jcmVhdGVgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4gU2VlbXMgbGlrZSB0aGlzIGlzIHdoZXJlIHdlJ3JlIGluaXRpYWxseSBzZXR0aW5nIHVwIHRoZSBJRFIgc3RydWN0dXJlIGZvciBvdXIgdHJhZmZpYyBjb250cm9sIGZpbHRlcnMuIEdvdHRhIHVuZGVyc3RhbmQgaG93IHRoZXNlIElEUnMgYXJlIGluaXRpYWxpemVkIOKAkyBob3cgdGhlIGtleXMgYXJlIGFzc2lnbmVkLCBob3cgY29sbGlzaW9ucyBhcmUgaGFuZGxlZCAob3IgYXJlIHRoZXk/KS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBhIG5ldyBjbGFzc2lmaWVyIHRoYXQgbmVlZHMgYW4gSURSLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGFyZSB3ZSBhbGxvY2F0aW5nIG1lbW9yeSBoZXJlIGRpcmVjdGx5PyBPciBpcyB0aGVyZSBzb21lIGtpbmQgb2YgcG9vbD8gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IHdoZW4gd29ya2luZyB3aXRoIHRoaXMgSURSIHN0cnVjdHVyZT8gVGhlIGNvcmUgb2YgYW55IGFjdGlvbiBmcmFtZXdvcmsgaXMgb3JnYW5pemluZyBvdXIgZmlsdGVycywgc28gdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGFuZCBmaW5kIHRoZXNlIGZpbHRlcnMgaW4gYSBxdWljayBtYW5uZXIgaXMgY3JpdGljYWwuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgbXV0ZXhlcyBvciBhdG9taWMgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IHByb3RlY3QgdGhpcyBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZXkgbGF5IGl0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjUxLjYwMDkzNjQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3NTpcXHRpbnQgdGNmX2lkcl9jcmVhdGUoc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuLCB1MzIgaW5kZXgsIHN0cnVjdCBubGF0dHIgKmVzdCxcXG4gNzc2OlxcdFxcdFxcdCAgIHN0cnVjdCB0Y19hY3Rpb24gKiphLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzLFxcbiA3Nzc6XFx0XFx0XFx0ICAgaW50IGJpbmQsIGJvb2wgY3B1c3RhdHMsIHUzMiBmbGFncylcXG4gNzc4OlxcdHtcXG4gNzc5OlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKnAgPSBremFsbG9jKG9wcy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8gPSB0bi1cXHUwMDNlaWRyaW5mbztcXG4gNzgxOlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiA3ODI6XFx0XFxuIDc4MzpcXHRcXHRpZiAodW5saWtlbHkoIXApKVxcbiA3ODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc4NTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnAtXFx1MDAzZXRjZmFfcmVmY250LCAxKTtcXG4gNzg2OlxcdFxcdGlmIChiaW5kKVxcbiA3ODc6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNldGNmYV9iaW5kY250LCAxKTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0aWYgKGNwdXN0YXRzKSB7XFxuIDc5MDpcXHRcXHRcXHRwLVxcdTAwM2VjcHVfYnN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XFxuIDc5MTpcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZWNwdV9ic3RhdHMpXFxuIDc5MjpcXHRcXHRcXHRcXHRnb3RvIGVycjE7XFxuIDc5MzpcXHRcXHRcXHRwLVxcdTAwM2VjcHVfYnN0YXRzX2h3ID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XFxuIDc5NDpcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZWNwdV9ic3RhdHNfaHcpXFxuIDc5NTpcXHRcXHRcXHRcXHRnb3RvIGVycjI7XFxuIDc5NjpcXHRcXHRcXHRwLVxcdTAwM2VjcHVfcXN0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKTtcXG4gNzk3OlxcdFxcdFxcdGlmICghcC1cXHUwMDNlY3B1X3FzdGF0cylcXG4gNzk4OlxcdFxcdFxcdFxcdGdvdG8gZXJyMztcXG4gNzk5OlxcdFxcdH1cXG4gODAwOlxcdFxcdGduZXRfc3RhdHNfYmFzaWNfc3luY19pbml0KFxcdTAwMjZwLVxcdTAwM2V0Y2ZhX2JzdGF0cyk7XFxuIDgwMTpcXHRcXHRnbmV0X3N0YXRzX2Jhc2ljX3N5bmNfaW5pdChcXHUwMDI2cC1cXHUwMDNldGNmYV9ic3RhdHNfaHcpO1xcbiA4MDI6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnAtXFx1MDAzZXRjZmFfbG9jayk7XFxuIDgwMzpcXHRcXHRwLVxcdTAwM2V0Y2ZhX2luZGV4ID0gaW5kZXg7XFxuIDgwNDpcXHRcXHRwLVxcdTAwM2V0Y2ZhX3RtLmluc3RhbGwgPSBqaWZmaWVzO1xcbiA4MDU6XFx0XFx0cC1cXHUwMDNldGNmYV90bS5sYXN0dXNlID0gamlmZmllcztcXG4gODA2OlxcdFxcdHAtXFx1MDAzZXRjZmFfdG0uZmlyc3R1c2UgPSAwO1xcbiA4MDc6XFx0XFx0cC1cXHUwMDNldGNmYV9mbGFncyA9IGZsYWdzO1xcbiA4MDg6XFx0XFx0aWYgKGVzdCkge1xcbiA4MDk6XFx0XFx0XFx0ZXJyID0gZ2VuX25ld19lc3RpbWF0b3IoXFx1MDAyNnAtXFx1MDAzZXRjZmFfYnN0YXRzLCBwLVxcdTAwM2VjcHVfYnN0YXRzLFxcbiA4MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnAtXFx1MDAzZXRjZmFfcmF0ZV9lc3QsXFxuIDgxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cC1cXHUwMDNldGNmYV9sb2NrLCBmYWxzZSwgZXN0KTtcXG4gODEyOlxcdFxcdFxcdGlmIChlcnIpXFxuIDgxMzpcXHRcXHRcXHRcXHRnb3RvIGVycjQ7XFxuIDgxNDpcXHRcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdHAtXFx1MDAzZWlkcmluZm8gPSBpZHJpbmZvO1xcbiA4MTc6XFx0XFx0X19tb2R1bGVfZ2V0KG9wcy1cXHUwMDNlb3duZXIpO1xcbiA4MTg6XFx0XFx0cC1cXHUwMDNlb3BzID0gb3BzO1xcbiA4MTk6XFx0XFx0KmEgPSBwO1xcbiA4MjA6XFx0XFx0cmV0dXJuIDA7XFxuIDgyMTpcXHRlcnI0OlxcbiA4MjI6XFx0XFx0ZnJlZV9wZXJjcHUocC1cXHUwMDNlY3B1X3FzdGF0cyk7XFxuIDgyMzpcXHRlcnIzOlxcbiA4MjQ6XFx0XFx0ZnJlZV9wZXJjcHUocC1cXHUwMDNlY3B1X2JzdGF0c19odyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjUxLjYwMTEyMTIxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NzE2NTYyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBNZW1vcnkgU2FmZXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgZXhhbWluZWQgdGhpcyBwYXRjaCwgYW5kIEkndmUgY29uZmlybWVkIHRoYXQgYGt6YWxsb2NgICppcyogYmVpbmcgdXNlZCwgc28gYHMtXHUwMDNldHJ1bmNhdGVgIGFuZCBgcy1cdTAwM2V0cnVuY19zaXplYCBhcmUgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSB3aGVuIHRoZSBhY3Rpb24gaXMgY3JlYXRlZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGEgcHJvYmxlbSB0aGF0IGFyaXNlcyB3aGVuIGFuIGV4aXN0aW5nIGFjdGlvbiBpcyAqdXBkYXRlZCogb3IgKnJlcGxhY2VkKiwgYW5kIHRoZSBpbmNvbWluZyBuZXRsaW5rIG1lc3NhZ2UgZG9lc24ndCBpbmNsdWRlIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIEVzc2VudGlhbGx5LCB0aGUgKm9sZCogdmFsdWVzIGFyZSBiZWluZyByZXRhaW5lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc2V0IGluIHRoaXMgdXBkYXRlIHNjZW5hcmlvLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGl0J3MgYSBzdGF0ZSByZXRlbnRpb24gYnVnIG9uIGFuIHVwZGF0ZS4gSSd2ZSBxdWlja2x5IHJlLXJldmlld2VkIHRoZSBLTVNBTiB2cy4gS0FTQU4gcnVsZXMgdG8gY29uZmlybSB0aGlzIGFzc2Vzc21lbnQuIEp1c3QgdG8gYmUgY2xlYXIsIHRob3NlIHJ1bGVzIHN0YXRlIEtNU0FOIGlzIG5lZWRlZCBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHRoaW5ncyBsaWtlIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlci1yZWFjaGFibGUgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIHZ1bG5lcmFiaWxpdGllcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgbGVhZCB0byBhY2Nlc3Mgb2YgdW5pbml0aWFsaXplZCBieXRlcy5cblxuSW4gdGhpcyBjYXNlLCB0aGUgbWVtb3J5ICppcyogZnVsbHkgaW5pdGlhbGl6ZWQgdGhhbmtzIHRvIGBremFsbG9jYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY29kZSBpc24ndCByZXNldHRpbmcgdGhvc2UgZmllbGRzIHRvIHRoZWlyIGNvcnJlY3QgaW5pdGlhbCB2YWx1ZXMgZHVyaW5nIHRoZSB1cGRhdGUsIG5vdCB0aGF0IGl0J3MgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNvLCBoZXJlJ3MgbXkgZm9ybWFsIEtNU0FOIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYHRjZl9zYW1wbGVfaW5pdGAuIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGB0Y2Agc2FtcGxlIGFjdGlvbiwgaXQgZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIGRvZXNuJ3QgaW5jbHVkZSB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBDcnVjaWFsbHksIHRoZSBhY3Rpb24gc3RydWN0dXJlIGlzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHNvIHRoZSBtZW1vcnkgaXMgKmFsd2F5cyogZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHBvaW50IG9mIGFsbG9jYXRpb24uIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYWJvdXQgcmV0YWluaW5nIHN0YWxlIHN0YXRlIGR1cmluZyBhbiB1cGRhdGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBpbiB0aGlzIGNvZGUuIFdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY3MiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyOTowMC4yNzI3ODAzNjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 17:50:02 +0000 UTC FinishedAt: 2026-08-25 18:29:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT", "NET_ACT_SAMPLE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT", "NET_ACT_SAMPLE" ], "series_id": "852379a0-8a3b-4915-b4ee-51dcb26d4934" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_sample_init", "tcf_sample_act" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9zYW1wbGVfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX3NhbXBsZV9pbml0YCBpbiBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzIG5vdCBwcm92aWRlZC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgdGMgc2FtcGxlIGFjdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXRhaW4gdGhlIG9sZCB0cnVuY2F0aW9uIHNldHRpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAodGMgYWN0aW9ucykgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTM0OThlZDBhZGY2OTMxYWZlZGFkMWNkNjhkY2UzOGI2NmI0MzY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6MjM6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjJiZGM3YTBlYjZkNjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMTE2LDYgJiM0MzsxMTYsOSBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbiBcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XG4gXHRcdHMtXHUwMDNldHJ1bmNhdGUgPSB0cnVlO1xuIFx0XHRzLVx1MDAzZXRydW5jX3NpemUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cy1cdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO1xuJiM0MztcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gMDtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9TQU1QTEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2Zfc2FtcGxlX2luaXQmIzM0OywKICAgICYjMzQ7dGNmX3NhbXBsZV9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9zYW1wbGVfaW5pdGAgaW4gYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgIHRvIGV4cGxpY2l0bHkgcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgd2hlbiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBub3QgcHJvdmlkZWQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHRjIHNhbXBsZSBhY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0YWluIHRoZSBvbGQgdHJ1bmNhdGlvbiBzZXR0aW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBzdWJzeXN0ZW0gKHRjIGFjdGlvbnMpIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDEzNDk4ZWQwYWRmNjkzMWFmZWRhZDFjZDY4ZGNlMzhiNjZiNDM2OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE4OjIzOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKaW5kZXggMmNlYjRkMTQxYjcxMy4uMmJkYzdhMGViNmQ2OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCkBAIC0xMTYsNiAmIzQzOzExNiw5IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLAogCWlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7CiAJCXMtJmd0O3RydW5jYXRlID0gdHJ1ZTsKIAkJcy0mZ3Q7dHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcy0mZ3Q7dHJ1bmNhdGUgPSBmYWxzZTsKJiM0MzsJCXMtJmd0O3RydW5jX3NpemUgPSAwOwogCX0KIAlzcGluX3VubG9ja19iaCgmYW1wO3MtJmd0O3RjZl9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhlIGB0Y2Zfc2FtcGxlX2luaXRgIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBoYW5kbGluZyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBJdCYjMzk7cyBhZGRpbmcgYW4gYGVsc2VgIGJyYW5jaCB0byB0aGUgZXhpc3RpbmcgYGlmYCBzdGF0ZW1lbnQgY2hlY2tpbmcgZm9yIHRoYXQgYXR0cmlidXRlLgoKQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgICp3YXNuJiMzOTt0KiBwcm92aWRlZCwgdGhlIGBzLSZndDt0cnVuY2F0ZWAgZmxhZyBhbmQgYHMtJmd0O3RydW5jX3NpemVgIG1lbWJlcnMgKndvdWxkbiYjMzk7dCogYmUgZXhwbGljaXRseSBtb2RpZmllZC4gVGhleSYjMzk7ZCBqdXN0IGtlZXAgd2hhdGV2ZXIgcHJldmlvdXMgdmFsdWUgdGhleSBoZWxkLCB3aGljaCBjb3VsZCBsZWFkIHRvIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBwcm9ibGVtIHdpdGggYWxsb2NhdGlvbiwgc2luY2UgYHNgIGlzIHByZXN1bWFibHkgYW4gZXhpc3RpbmcgYWN0aW9uIGJlaW5nIHVwZGF0ZWQuIFJpZ2h0LCBpdCBpcyBhbGxvY2F0ZWQgb3IgcmV0cmlldmVkLgoKU28sIHRoZSBuZXcgYGVsc2VgIGJyYW5jaCBleHBsaWNpdGx5IHNldHMgYHMtJmd0O3RydW5jYXRlID0gZmFsc2U7YCBhbmQgYHMtJmd0O3RydW5jX3NpemUgPSAwO2AgaWYgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJiMzOTt0IHByZXNlbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgY2xlYXJseS4gSSBuZWVkIHRvIGRpZyBpbnRvIGB0Y2Zfc2FtcGxlX2luaXRgIGl0c2VsZiB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBjb25zaWRlciBhbnkgZWRnZSBjYXNlcyBpdCBtaWdodCBpbnRyb2R1Y2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX3NhbXBsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9zYW1wbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzYW1wbGVfcG9saWN5W1RDQV9TQU1QTEVfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzUtXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jOjM2OnN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zNy1cdFx0XHQgICBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM9MzIxPXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyNy1cdC5kdW1wXHQgID0gdGNmX3NhbXBsZV9kdW1wLFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMjg6XHQuaW5pdFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMzI5LVx0LmNsZWFudXAgID0gdGNmX3NhbXBsZV9jbGVhbnVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipEZWNpcGhlcmluZyBgc2AgaW4gYHRjZl9zYW1wbGVfaW5pdGAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGB0Y2Zfc2FtcGxlX2luaXRgIG5vdy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbmF0dXJlIG9mIGBzYC4gSXMgaXQgYSBwb2ludGVyPyBBIHN0cnVjdHVyZT8gQSBzaW1wbGUgdmFyaWFibGU/IEFuZCBlcXVhbGx5IGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2AgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gS25vd2luZyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSDigJMgaXMgaXQgc3RhdGljLCBvbiB0aGUgc3RhY2ssIGR5bmFtaWNhbGx5IG9uIHRoZSBoZWFwPyDigJMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgVENGLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uOiB3aGF0IGlzIHRoaXMgYHNgLCBhbmQgaG93IGRvZXMgaXQgbGl2ZT8gSSYjMzk7bGwgYmUgbG9va2luZyB2ZXJ5IGNsb3NlbHkgYXQgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGhlcmUuIFRoZSBhbnN3ZXJzIHRvIHRoZXNlIHF1ZXN0aW9ucyBhcmUgZm91bmRhdGlvbmFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIFRDRiBjb2RlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNjpcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuICAzNzpcdFx0XHRcdCAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4gIDM4Olx0XHRcdFx0ICAgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gIDM5Olx0XHRcdFx0ICAgdTMyIGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gIDQwOlx0e1xuICA0MTpcdFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3Rfc2FtcGxlX29wcy5uZXRfaWQpO1xuICA0MjpcdFx0Ym9vbCBiaW5kID0gZmxhZ3MgXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcbiAgNDM6XHRcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9TQU1QTEVfTUFYICYjNDM7IDFdO1xuICA0NDpcdFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XG4gIDQ1Olx0XHR1MzIgcHNhbXBsZV9ncm91cF9udW0sIHJhdGUsIGluZGV4O1xuICA0NjpcdFx0c3RydWN0IHRjZl9jaGFpbiAqZ290b19jaCA9IE5VTEw7XG4gIDQ3Olx0XHRzdHJ1Y3QgdGNfc2FtcGxlICpwYXJtO1xuICA0ODpcdFx0c3RydWN0IHRjZl9zYW1wbGUgKnM7XG4gIDQ5Olx0XHRib29sIGV4aXN0cyA9IGZhbHNlO1xuICA1MDpcdFx0aW50IHJldCwgZXJyO1xuICA1MTpcdFxuICA1MjpcdFx0aWYgKCFubGEpXG4gIDUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA1NDpcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfU0FNUExFX01BWCwgbmxhLFxuICA1NTpcdFx0XHRcdFx0XHQgIHNhbXBsZV9wb2xpY3ksIE5VTEwpO1xuICA1NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAgNTc6XHRcdFx0cmV0dXJuIHJldDtcbiAgNTg6XHRcbiAgNTk6XHRcdGlmICghdGJbVENBX1NBTVBMRV9QQVJNU10pXG4gIDYwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA2MTpcdFxuICA2MjpcdFx0cGFybSA9IG5sYV9kYXRhKHRiW1RDQV9TQU1QTEVfUEFSTVNdKTtcbiAgNjM6XHRcdGluZGV4ID0gcGFybS1cdTAwM2VpbmRleDtcbiAgNjQ6XHRcdGVyciA9IHRjZl9pZHJfY2hlY2tfYWxsb2ModG4sIFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcbiAgNjU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gIDY2Olx0XHRcdHJldHVybiBlcnI7XG4gIDY3Olx0XHRleGlzdHMgPSBlcnI7XG4gIDY4Olx0XHRpZiAoZXhpc3RzIFx1MDAyNlx1MDAyNiBiaW5kKVxuICA2OTpcdFx0XHRyZXR1cm4gQUNUX1BfQk9VTkQ7XG4gIDcwOlx0XG4gIDcxOlx0XHRpZiAoIWV4aXN0cykge1xuICA3MjpcdFx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSxcbiAgNzM6XHRcdFx0XHRcdCAgICAgXHUwMDI2YWN0X3NhbXBsZV9vcHMsIGJpbmQsIHRydWUsIGZsYWdzKTtcbiAgNzQ6XHRcdFx0aWYgKHJldCkge1xuICA3NTpcdFx0XHRcdHRjZl9pZHJfY2xlYW51cCh0biwgaW5kZXgpO1xuICA3NjpcdFx0XHRcdHJldHVybiByZXQ7XG4gIDc3Olx0XHRcdH1cbiAgNzg6XHRcdFx0cmV0ID0gQUNUX1BfQ1JFQVRFRDtcbiAgNzk6XHRcdH0gZWxzZSBpZiAoIShmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19SRVBMQUNFKSkge1xuICA4MDpcdFx0XHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xuICA4MTpcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiAgODI6XHRcdH1cbiAgODM6XHRcbiAgODQ6XHRcdGlmICghdGJbVENBX1NBTVBMRV9SQVRFXSB8fCAhdGJbVENBX1NBTVBMRV9QU0FNUExFX0dST1VQXSkge1xuICA4NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NhbXBsZSByYXRlIGFuZCBncm91cCBhcmUgcmVxdWlyZWRcJiMzNDspO1xuICA4NjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuICA4NzpcdFx0XHRnb3RvIHJlbGVhc2VfaWRyO1xuICA4ODpcdFx0fVxuICA4OTpcdFxuICA5MDpcdFx0ZXJyID0gdGNmX2FjdGlvbl9jaGVja19jdHJsYWN0KHBhcm0tXHUwMDNlYWN0aW9uLCB0cCwgXHUwMDI2Z290b19jaCwgZXh0YWNrKTtcbiAgOTE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gIDkyOlx0XHRcdGdvdG8gcmVsZWFzZV9pZHI7XG4gIDkzOlx0XG4gIDk0Olx0XHRyYXRlID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9SQVRFXSk7XG4gIDk1Olx0XHRpZiAoIXJhdGUpIHtcbiAgOTY6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtpbnZhbGlkIHNhbXBsZSByYXRlXCYjMzQ7KTtcbiAgOTc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAgOTg6XHRcdFx0Z290byBwdXRfY2hhaW47XG4gIDk5Olx0XHR9XG4gMTAwOlx0XHRwc2FtcGxlX2dyb3VwX251bSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUF0pO1xuIDEwMTpcdFx0cHNhbXBsZV9ncm91cCA9IHBzYW1wbGVfZ3JvdXBfZ2V0KG5ldCwgcHNhbXBsZV9ncm91cF9udW0pO1xuIDEwMjpcdFx0aWYgKCFwc2FtcGxlX2dyb3VwKSB7XG4gMTAzOlx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTA0Olx0XHRcdGdvdG8gcHV0X2NoYWluO1xuIDEwNTpcdFx0fVxuIDEwNjpcdFxuIDEwNzpcdFx0cyA9IHRvX3NhbXBsZSgqYSk7XG4gMTA4Olx0XG4gMTA5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cy1cdTAwM2V0Y2ZfbG9jayk7XG4gMTEwOlx0XHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cdTAwM2VhY3Rpb24sIGdvdG9fY2gpO1xuIDExMTpcdFx0cy1cdTAwM2VyYXRlID0gcmF0ZTtcbiAxMTI6XHRcdHMtXHUwMDNlcHNhbXBsZV9ncm91cF9udW0gPSBwc2FtcGxlX2dyb3VwX251bTtcbiAxMTM6XHRcdHBzYW1wbGVfZ3JvdXAgPSByY3VfcmVwbGFjZV9wb2ludGVyKHMtXHUwMDNlcHNhbXBsZV9ncm91cCwgcHNhbXBsZV9ncm91cCxcbiAxMTQ6XHRcdFx0XHRcdFx0ICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKSk7XG4gMTE1Olx0XG4gMTE2Olx0XHRpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkge1xuIDExNzpcdFx0XHRzLVx1MDAzZXRydW5jYXRlID0gdHJ1ZTtcbiAxMTg6XHRcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSk7XG4gMTE5Olx0XHR9IGVsc2Uge1xuIDEyMDpcdFx0XHRzLVx1MDAzZXRydW5jYXRlID0gZmFsc2U7XG4gMTIxOlx0XHRcdHMtXHUwMDNldHJ1bmNfc2l6ZSA9IDA7XG4gMTIyOlx0XHR9XG4gMTIzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiAxMjQ6XHRcbiAxMjU6XHRcdGlmIChwc2FtcGxlX2dyb3VwKVxuIDEyNjpcdFx0XHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcbiAxMjc6XHRcdGlmIChnb3RvX2NoKVxuIDEyODpcdFx0XHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcbiAxMjk6XHRcbiAxMzA6XHRcdHJldHVybiByZXQ7XG4gMTMxOlx0cHV0X2NoYWluOlxuIDEzMjpcdFx0aWYgKGdvdG9fY2gpXG4gMTMzOlx0XHRcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xuIDEzNDpcdHJlbGVhc2VfaWRyOlxuIDEzNTpcdFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGtleSBhZGp1c3RtZW50IGlzIHdpdGhpbiBgdGNmX3NhbXBsZV9pbml0YC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgYSBjaGVjayB0aGF0IGV4cGxpY2l0bHkgcmVzZXRzIHRoZSBgcy0mZ3Q7dHJ1bmNhdGVgIGFuZCBgcy0mZ3Q7dHJ1bmNfc2l6ZWAgdmFyaWFibGVzICppZiogdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZSBpc24mIzM5O3QgcHJvdmlkZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgY3J1Y2lhbDogaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGJ1ZyB3aGVuIGFuIGV4aXN0aW5nIGFjdGlvbiBpcyBiZWluZyAqcmVwbGFjZWQqIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYGV4aXN0c2AgaXMgdHJ1ZSBhbmQgdGhlIGBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0VgIGZsYWcgaXMgYWN0aXZlLiBXaXRob3V0IHRoaXMgcmVzZXQsIHdlJiMzOTtkIGJlIHJldGFpbmluZyBvbGQgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgdmFsdWVzIGluIHRoZSBuZXcgY29uZmlndXJhdGlvbi4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIuCgpUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAoc3BlY2lmaWNhbGx5LCB0aGUgYHRjYCBhY3Rpb25zKSBoYW5kbGVzIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGlzIHR5cGUgb2YgbW9kaWZpY2F0aW9uLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHJpZ29yb3VzIGZ1enppbmcgdG8gZW5zdXJlIHN0YWJpbGl0eSBhbmQgY2F0Y2ggYW55IGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gb3Zlcmxvb2tlZC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgdGhlIGBhY3Rfc2FtcGxlYCBhY3Rpb24uIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9TQU1QTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz03NDI9Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzUxLVxubmV0L3NjaGVkL0tjb25maWc6NzUyOmNvbmZpZyBORVRfQUNUX1NBTVBMRVxubmV0L3NjaGVkL0tjb25maWctNzUzLVx0dHJpc3RhdGUgXCYjMzQ7VHJhZmZpYyBTYW1wbGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLgoKKipVbnBhY2tpbmcgdGhlIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmc7IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBlbGVtZW50cyB0aGF0IHVuZGVycGluIHRoZSBzaXR1YXRpb24uIFdoYXQgYXJlIHRoZSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBkcml2ZSB0aGlzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBNeSBmb2N1cyBpcyB0byBjcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgdG8gZXhwbGFpbiB0aGlzIHByb2JsZW0uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBwbGFjZSB0byBzdGFydCB0byBnbyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTI6XHRjb25maWcgTkVUX0FDVF9TQU1QTEVcbiA3NTM6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYWZmaWMgU2FtcGxpbmdcJiMzNDtcbiA3NTQ6XHRcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcbiA3NTU6XHRcdHNlbGVjdCBQU0FNUExFXG4gNzU2Olx0XHRoZWxwXG4gNzU3Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0IHNhbXBsaW5nIHRjIGFjdGlvbi4gVGhlIHBhY2tldCBzYW1wbGVcbiA3NTg6XHRcdCAgYWN0aW9uIGNvbnNpc3RzIG9mIHN0YXRpc3RpY2FsbHkgY2hvb3NpbmcgcGFja2V0cyBhbmQgc2FtcGxpbmdcbiA3NTk6XHRcdCAgdGhlbSB1c2luZyB0aGUgcHNhbXBsZSBtb2R1bGUuXG4gNzYwOlx0XG4gNzYxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3NjI6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9zYW1wbGUuXG4gNzYzOlx0XG4gNzY0Olx0Y29uZmlnIE5FVF9BQ1RfTkFUXG4gNzY1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdGF0ZWxlc3MgTkFUXCYjMzQ7XG4gNzY2Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gNzY3Olx0XHRoZWxwXG4gNzY4Olx0XHQgIFNheSBZIGhlcmUgdG8gZG8gc3RhdGVsZXNzIE5BVCBvbiBJUHY0IHBhY2tldHMuICBZb3Ugc2hvdWxkIHVzZVxuIDc2OTpcdFx0ICBuZXRmaWx0ZXIgZm9yIE5BVCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuIDc3MDpcdFxuIDc3MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOgoKKipUaGlua2luZyBUaHJvdWdoIE5ldHdvcmsgQWN0aXZhdGlvbiBhbmQgU2FtcGxpbmcgUmVxdWlyZW1lbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JrIGFjdGl2YXRpb24gYW5kIGNsYXNzaWZpY2F0aW9uIGFjdGl2aXR5IG5vdy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYE5FVF9BQ1RfU0FNUExFYCBhbmQgYE5FVF9DTFNfQUNUYCBkZWZpbmVkLiBUaG9zZSBhcmUgY3JpdGljYWwuIEFuZCBJIHNlZSB0aGF0IGBQU0FNUExFYCBoYXMgYmVlbiBzZWxlY3RlZDsgdGhhdCYjMzk7cyBnb29kLiBOb3csIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQ0xTX0FDVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBldmVyeXRoaW5nIHRoYXQgKml0KiBkZXBlbmRzIG9uIGlzIGFsc28gc2V0IGNvcnJlY3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBjb25mbGljdHMgb3IgbWlzc2luZyBwaWVjZXMgdGhhdCB3aWxsIGJpdGUgbWUgbGF0ZXIuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzAxLVxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxubmV0L3NjaGVkL0tjb25maWctNzAzLVx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTkVUX0NMU19BQ1QgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGZvY3VzIGlzIGNsZWFyOiB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19BQ1RgLiBHaXZlbiB0aGF0LCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBhcmVhcyBvZiBjb25jZXJuLiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBtb2R1bGVzPyBVc2Vyc3BhY2UgdXRpbGl0aWVzPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IC0gYXJlIHdlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBuZXR3b3JraW5nIHN0YWNrLCBvciBhIG1vcmUgZ2VuZXJhbCBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZS4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIG5hdmlnYXRlIGEgZGVwZW5kZW5jeSB0cmVlLiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5OiBhcmUgd2UgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWxpdHksIGhhcmR3YXJlIHN1cHBvcnQsIG9yIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGRlcGVuZGVuY3k/IFNlY3VyaXR5PyBQZXJmb3JtYW5jZT8gUmVzb3VyY2UgY29uc3VtcHRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIG1peCBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IGxpbmtzIOKAkyBjYXNjYWRpbmcgZGVwZW5kZW5jaWVzIGFyZSBhbG1vc3QgaW5ldml0YWJsZSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBwb3RlbnRpYWwgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFzIHdlbGwsIGFsdGhvdWdoIHRoZSBrZXJuZWwgdHJpZXMgaXRzIGJlc3QgdG8gcHJldmVudCB0aGlzLCBvZiBjb3Vyc2UuCgpNeSBpbW1lZGlhdGUgZ29hbHMgYXJlIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHZ1bG5lcmFiaWxpdGllcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgYXJjaGl0ZWN0dXJhbCBmbGF3cywgb3IgcG90ZW50aWFsIHBvaW50cyBvZiBmcmFnaWxpdHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yayBlbGVtZW50cy4gSSYjMzk7bSBhbHNvIHByZXBhcmluZyB0byBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdmFyaW91cyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zIG9yIHJ1bnRpbWUgb3B0aW9ucy4gVGhlIGRldGFpbHMgaW4gdGhlIGFjdHVhbCBkZXBlbmRlbmN5IGdyYXBoIGFyZSB3aGF0IHRydWx5IG1hdHRlcnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMjpcdGNvbmZpZyBORVRfQ0xTX0FDVFxuIDcwMzpcdFx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4gNzA0Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDcwNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1NcbiA3MDY6XHRcdGhlbHBcbiA3MDc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMuIEFjdGlvbnNcbiA3MDg6XHRcdCAgZ2V0IGF0dGFjaGVkIHRvIGNsYXNzaWZpZXJzIGFuZCBhcmUgaW52b2tlZCBhZnRlciBhIHN1Y2Nlc3NmdWxcbiA3MDk6XHRcdCAgY2xhc3NpZmljYXRpb24uIFRoZXkgYXJlIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBjbGFzc2lmaWNhdGlvblxuIDcxMDpcdFx0ICByZXN1bHQsIGluc3RhbnRseSBkcm9wIG9yIHJlZGlyZWN0IHBhY2tldHMsIGV0Yy5cbiA3MTE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVENGIFNhbXBsaW5nIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMuIGBORVRfQUNUX1NBTVBMRWAgYW5kIGBORVRfQ0xTX0FDVGAg4oCTIHRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVsZW1lbnRzIGhlcmUuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBmb3Igc2FtcGxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIHdpdGhpbiB0aGlzIG5ldHdvcmtpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGUgc2FtcGxpbmcgbWVjaGFuaXNtLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGFjdGlvbiBmdW5jdGlvbj8gV2hhdCBhYm91dCBgdGNmX3NhbXBsZV9hY3RgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW4gYXNzb2NpYXRlZCBhY3Rpb24gb3IgcHJvY2Vzc2luZyBjb21wb25lbnQgdGhhdCBkaXJlY3RseSB3b3JrcyB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gR2V0dGluZyB0aGUgd2hvbGUgcGljdHVyZSBpcyBrZXkgZm9yIGEgdHJ1bHkgZWZmZWN0aXZlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9zYW1wbGUuYz0xNTE9c3RhdGljIGJvb2wgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMtMTY2LVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzoxNjc6VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9zYW1wbGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTE2OC1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTMyMT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMjQtXHQub3duZXJcdCAgPSBUSElTX01PRFVMRSxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzI1Olx0LmFjdFx0ICA9IHRjZl9zYW1wbGVfYWN0LFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMjYtXHQuc3RhdHNfdXBkYXRlID0gdGNmX3NhbXBsZV9zdGF0c191cGRhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipJbml0aWFsIEFjdGlvbiBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbiBhbmQgQ29udGV4dHVhbGl6YXRpb24qKgoKUmlnaHQsIHNvLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdGNmX3NhbXBsZV9hY3RgIGlzIGluZGVlZCB0aGUgYWN0aW9uIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MgZ2V0IHRob3NlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBhcmUgY29ycmVjdGx5IGFkZGVkIHRvIHRoYXQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBzeXN0ZW0gdG8gcmVjb2duaXplIGFuZCBoYW5kbGUgdGhlbSBwcm9wZXJseS4KCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byByZXZpc2l0IGBORVRfQUNUX1NBTVBMRWAuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAsIHdoaWNoIGlzIG5lc3RlZCB1bmRlciBgTkVUX1NDSEVEYC4gU28sIHRoZSBzdHJ1Y3R1cmUgaXMgY2xlYXIuIE5vIHJlZCBmbGFncyBhdCB0aGlzIHN0YWdlLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IHN0cnVjdHVyZSBhbGlnbnMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGludGVuZGVkIGZsb3cgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE5FVF9BQ1RfU0FNUExFYCBkb2VzbiYjMzk7dCBuZWVkIGFueSBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzMKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgdGhlIG5lZWQgZm9yIGBORVRfU0NIRURgIGhlcmUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlLiBMb29raW5nIGF0IHRoZSBjb25maWdzLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGFuZCBgTkVUX0FDVF9TQU1QTEVgLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiB0aG9zZSBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBzeW1ib2xzLgoKVGhlIGdpc3Qgb2YgaXQgaXMgYSBidWcgZml4IGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYC4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBmbGF3IHdpdGhpbiB0aGUgYHRjZl9zYW1wbGVfaW5pdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyB0cnVuY2F0aW9uIHNldHRpbmdzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcgYSB0cmFmZmljIGNvbnRyb2wgKHRjKSBzYW1wbGUgYWN0aW9uLiBJdCBzZWVtcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzbiYjMzk7dCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlIG9sZCB0cnVuY2F0aW9uIHZhbHVlcyB3b3VsZCBwZXJzaXN0LCB3aGljaCBpcyBjbGVhcmx5IHVuaW50ZW5kZWQuIFRoaXMgd291bGQgZGVmaW5pdGVseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWsgaW5mb3JtYXRpb24gb3IgY2F1c2Ugb3RoZXIgaXNzdWVzLCBtYWtpbmcgdGhpcyBhIGNyaXRpY2FsIGZpeC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbGV2ZWwsIGNvbmNlcm5pbmcgdGMgYWN0aW9ucywgYW5kIGlzIGV4cG9zZWQgdmlhIG5ldGxpbmsuIEdpdmVuIHRoaXMgdXNlcnNwYWNlIGFjY2Vzc2liaWxpdHksIEkmIzM5O2Qgc2F5IHRoaXMgYXJlYSBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZyB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHJlZ3Jlc3Npb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHByb2NlZWQgd2l0aCB0aGUgc2V0LXJlc3VsdHMgY2FsbC4gVGltZSB0byBldmFsdWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9zYW1wbGVfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX3NhbXBsZV9pbml0YCBpbiBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzIG5vdCBwcm92aWRlZC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgdGMgc2FtcGxlIGFjdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXRhaW4gdGhlIG9sZCB0cnVuY2F0aW9uIHNldHRpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAodGMgYWN0aW9ucykgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX1NBTVBMRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9zYW1wbGVfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y2Zfc2FtcGxlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX3NhbXBsZV9pbml0YCBpbiBgbmV0L3NjaGVkL2FjdF9zYW1wbGUuY2AgdG8gZXhwbGljaXRseSByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyB3aGVuIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGlzIG5vdCBwcm92aWRlZC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgdGMgc2FtcGxlIGFjdGlvbiB3b3VsZCBpbmNvcnJlY3RseSByZXRhaW4gdGhlIG9sZCB0cnVuY2F0aW9uIHNldHRpbmdzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBzY2hlZHVsaW5nIHN1YnN5c3RlbSAodGMgYWN0aW9ucykgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIGluIGB0Y2Zfc2FtcGxlX2luaXRgIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyBgdGNgIHNhbXBsZSBhY3Rpb24gZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIG9taXRzIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIFRoZSBhY3Rpb24gc3RydWN0dXJlIGlzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHNvIHRoZSBtZW1vcnkgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHJldGFpbmluZyBzdGFsZSBzdGF0ZSBkdXJpbmcgYW4gdXBkYXRlLCByYXRoZXIgdGhhbiBleHBvc2luZyBvciBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxMzQ5OGVkMGFkZjY5MzFhZmVkYWQxY2Q2OGRjZTM4YjY2YjQzNjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxODoyMzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jCmluZGV4IDJjZWI0ZDE0MWI3MTMuLjJiZGM3YTBlYjZkNjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYwpAQCAtMTE2LDYgJiM0MzsxMTYsOSBAQCBzdGF0aWMgaW50IHRjZl9zYW1wbGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwKIAlpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkgewogCQlzLSZndDt0cnVuY2F0ZSA9IHRydWU7CiAJCXMtJmd0O3RydW5jX3NpemUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXMtJmd0O3RydW5jYXRlID0gZmFsc2U7CiYjNDM7CQlzLSZndDt0cnVuY19zaXplID0gMDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzLSZndDt0Y2ZfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZS4gVGhlIG9yaWdpbmFsIGNvZGUgb25seSBzZXRzIGBzLSZndDt0cnVuY2F0ZWAgYW5kIGBzLSZndDt0cnVuY19zaXplYCBpZiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBwcmVzZW50IGluIHRoZSB0YWJsZSBgdGJgLiBUaGlzIG5ldyBjb2RlIGFkZHMgYSBkZWZhdWx0IGluaXRpYWxpemF0aW9uOyBzbywgaWYgdGhlIGF0dHJpYnV0ZSBpcyAqbm90KiBwcmVzZW50LCBgcy0mZ3Q7dHJ1bmNhdGVgIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBmYWxzZWAgYW5kIGBzLSZndDt0cnVuY19zaXplYCBpcyBzZXQgdG8gYDBgLgoKTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0IGEgc2Vjb25kLi4uIGBzYCBpcyBhIGBzdHJ1Y3QgdGNmX3NhbXBsZWAsIHJpZ2h0PyBNeSBndXQgdGVsbHMgbWUgdGhhdCBgc2Agc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiB0aGlzIHBhdGNoIGlzIHJlZHVuZGFudCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlcyBvdmVyaGVhZC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbiB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBhbHJlYWR5IHplcm9pbmcgdGhlIHN0cnVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NhbXBsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9zYW1wbGVfb3BzLm5ldF9pZCk7XG4gIDQyOlx0XHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuICA0MzpcdFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1NBTVBMRV9NQVggJiM0MzsgMV07XG4gIDQ0Olx0XHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqcHNhbXBsZV9ncm91cDtcbiAgNDU6XHRcdHUzMiBwc2FtcGxlX2dyb3VwX251bSwgcmF0ZSwgaW5kZXg7XG4gIDQ2Olx0XHRzdHJ1Y3QgdGNmX2NoYWluICpnb3RvX2NoID0gTlVMTDtcbiAgNDc6XHRcdHN0cnVjdCB0Y19zYW1wbGUgKnBhcm07XG4gIDQ4Olx0XHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcztcbiAgNDk6XHRcdGJvb2wgZXhpc3RzID0gZmFsc2U7XG4gIDUwOlx0XHRpbnQgcmV0LCBlcnI7XG4gIDUxOlx0XG4gIDUyOlx0XHRpZiAoIW5sYSlcbiAgNTM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDU0Olx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9TQU1QTEVfTUFYLCBubGEsXG4gIDU1Olx0XHRcdFx0XHRcdCAgc2FtcGxlX3BvbGljeSwgTlVMTCk7XG4gIDU2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA1NzpcdFx0XHRyZXR1cm4gcmV0O1xuICA1ODpcdFxuICA1OTpcdFx0aWYgKCF0YltUQ0FfU0FNUExFX1BBUk1TXSlcbiAgNjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDYxOlx0XG4gIDYyOlx0XHRwYXJtID0gbmxhX2RhdGEodGJbVENBX1NBTVBMRV9QQVJNU10pO1xuICA2MzpcdFx0aW5kZXggPSBwYXJtLVx1MDAzZWluZGV4O1xuICA2NDpcdFx0ZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgXHUwMDI2aW5kZXgsIGEsIGJpbmQpO1xuICA2NTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAgNjY6XHRcdFx0cmV0dXJuIGVycjtcbiAgNjc6XHRcdGV4aXN0cyA9IGVycjtcbiAgNjg6XHRcdGlmIChleGlzdHMgXHUwMDI2XHUwMDI2IGJpbmQpXG4gIDY5Olx0XHRcdHJldHVybiBBQ1RfUF9CT1VORDtcbiAgNzA6XHRcbiAgNzE6XHRcdGlmICghZXhpc3RzKSB7XG4gIDcyOlx0XHRcdHJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLFxuICA3MzpcdFx0XHRcdFx0ICAgICBcdTAwMjZhY3Rfc2FtcGxlX29wcywgYmluZCwgdHJ1ZSwgZmxhZ3MpO1xuICA3NDpcdFx0XHRpZiAocmV0KSB7XG4gIDc1Olx0XHRcdFx0dGNmX2lkcl9jbGVhbnVwKHRuLCBpbmRleCk7XG4gIDc2Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAgNzc6XHRcdFx0fVxuICA3ODpcdFx0XHRyZXQgPSBBQ1RfUF9DUkVBVEVEO1xuICA3OTpcdFx0fSBlbHNlIGlmICghKGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0UpKSB7XG4gIDgwOlx0XHRcdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XG4gIDgxOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuICA4MjpcdFx0fVxuICA4MzpcdFxuICA4NDpcdFx0aWYgKCF0YltUQ0FfU0FNUExFX1JBVEVdIHx8ICF0YltUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVBdKSB7XG4gIDg1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7c2FtcGxlIHJhdGUgYW5kIGdyb3VwIGFyZSByZXF1aXJlZFwmIzM0Oyk7XG4gIDg2Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gIDg3Olx0XHRcdGdvdG8gcmVsZWFzZV9pZHI7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRlcnIgPSB0Y2ZfYWN0aW9uX2NoZWNrX2N0cmxhY3QocGFybS1cdTAwM2VhY3Rpb24sIHRwLCBcdTAwMjZnb3RvX2NoLCBleHRhY2spO1xuICA5MTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAgOTI6XHRcdFx0Z290byByZWxlYXNlX2lkcjtcbiAgOTM6XHRcbiAgOTQ6XHRcdHJhdGUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1JBVEVdKTtcbiAgOTU6XHRcdGlmICghcmF0ZSkge1xuICA5NjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O2ludmFsaWQgc2FtcGxlIHJhdGVcJiMzNDspO1xuICA5NzpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuICA5ODpcdFx0XHRnb3RvIHB1dF9jaGFpbjtcbiAgOTk6XHRcdH1cbiAxMDA6XHRcdHBzYW1wbGVfZ3JvdXBfbnVtID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9QU0FNUExFX0dST1VQXSk7XG4gMTAxOlx0XHRwc2FtcGxlX2dyb3VwID0gcHNhbXBsZV9ncm91cF9nZXQobmV0LCBwc2FtcGxlX2dyb3VwX251bSk7XG4gMTAyOlx0XHRpZiAoIXBzYW1wbGVfZ3JvdXApIHtcbiAxMDM6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxMDQ6XHRcdFx0Z290byBwdXRfY2hhaW47XG4gMTA1Olx0XHR9XG4gMTA2Olx0XG4gMTA3Olx0XHRzID0gdG9fc2FtcGxlKCphKTtcbiAxMDg6XHRcbiAxMDk6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiAxMTA6XHRcdGdvdG9fY2ggPSB0Y2ZfYWN0aW9uX3NldF9jdHJsYWN0KCphLCBwYXJtLVx1MDAzZWFjdGlvbiwgZ290b19jaCk7XG4gMTExOlx0XHRzLVx1MDAzZXJhdGUgPSByYXRlO1xuIDExMjpcdFx0cy1cdTAwM2Vwc2FtcGxlX2dyb3VwX251bSA9IHBzYW1wbGVfZ3JvdXBfbnVtO1xuIDExMzpcdFx0cHNhbXBsZV9ncm91cCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocy1cdTAwM2Vwc2FtcGxlX2dyb3VwLCBwc2FtcGxlX2dyb3VwLFxuIDExNDpcdFx0XHRcdFx0XHQgICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spKTtcbiAxMTU6XHRcbiAxMTY6XHRcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XG4gMTE3Olx0XHRcdHMtXHUwMDNldHJ1bmNhdGUgPSB0cnVlO1xuIDExODpcdFx0XHRzLVx1MDAzZXRydW5jX3NpemUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKTtcbiAxMTk6XHRcdH0gZWxzZSB7XG4gMTIwOlx0XHRcdHMtXHUwMDNldHJ1bmNhdGUgPSBmYWxzZTtcbiAxMjE6XHRcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gMDtcbiAxMjI6XHRcdH1cbiAxMjM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spO1xuIDEyNDpcdFxuIDEyNTpcdFx0aWYgKHBzYW1wbGVfZ3JvdXApXG4gMTI2Olx0XHRcdHBzYW1wbGVfZ3JvdXBfcHV0KHBzYW1wbGVfZ3JvdXApO1xuIDEyNzpcdFx0aWYgKGdvdG9fY2gpXG4gMTI4Olx0XHRcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xuIDEyOTpcdFxuIDEzMDpcdFx0cmV0dXJuIHJldDtcbiAxMzE6XHRwdXRfY2hhaW46XG4gMTMyOlx0XHRpZiAoZ290b19jaClcbiAxMzM6XHRcdFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XG4gMTM0Olx0cmVsZWFzZV9pZHI6XG4gMTM1Olx0XHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xuIDEzNjpcdFx0cmV0dXJuIGVycjtcbiAxMzc6XHR9XG4gMTM4Olx0XG4gMTM5Olx0c3RhdGljIHZvaWQgdGNmX3NhbXBsZV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGNmX3NhbXBsZWAgQWN0aW9uIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcyBhbiBgZWxzZWAgYnJhbmNoIHRvIGluaXRpYWxpemUgYHMtJmd0O3RydW5jYXRlYCBhbmQgYHMtJmd0O3RydW5jX3NpemVgIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJiMzOTt0IHByZXNlbnQgaW4gdGhlIG5ldGxpbmsgbWVzc2FnZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgaG93IGBzYCBpcyBhbGxvY2F0ZWQuIEkgcmVtZW1iZXIgdGhhdCBgc2AgaXMgYWxsb2NhdGVkIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHdoaWNoIGNhbGxzIGBremFsbG9jYCBvciBzaW1pbGFyLCBzbyBpdCYjMzk7cyAqemVyby1pbml0aWFsaXplZCogd2hlbiBjcmVhdGVkLgoKU28sIHdoeSB0aGUgcGF0Y2g/IFRoYXTigJlzIHRoZSBrZXkuIFRoZW4gaXQgaGl0cyBtZSEgYHRjZl9zYW1wbGVfaW5pdGAgY2FuIGJlIHVzZWQgdG8gKnJlcGxhY2UqIGFuIGV4aXN0aW5nIGFjdGlvbi4gT2theSwgdGhlIGltcG9ydGFudCBjb2RlIHNuaXBwZXQgaXM6CgpgYGBjCglpZiAoIWV4aXN0cykgewoJCXJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLAoJCQkJICAgICAmYW1wO2FjdF9zYW1wbGVfb3BzLCBiaW5kLCB0cnVlLCBmbGFncyk7Ci4uLgoJfSBlbHNlIGlmICghKGZsYWdzICZhbXA7IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRSkpIHsKCQl0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpOwoJCXJldHVybiAtRUVYSVNUOwoJfQpgYGAKCklmIHRoZSBhY3Rpb24gYWxyZWFkeSAqZXhpc3RzKiBhbmQgYFRDQV9BQ1RfRkxBR1NfUkVQTEFDRWAgaXMgc2V0LCBpdCB1cGRhdGVzIHRoZSBleGlzdGluZyBhY3Rpb24gYHNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIElmIHRoZSBvbGQgYWN0aW9uIGhhZCBgcy0mZ3Q7dHJ1bmNhdGUgPSB0cnVlYCBhbmQgYHMtJmd0O3RydW5jX3NpemUgPSBYYCwgYW5kIHRoZSBuZXcgbmV0bGluayBtZXNzYWdlICpkb2VzbiYjMzk7dCogcHJvdmlkZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCwgdGhlIG9sZCB2YWx1ZXMgd291bGQgYmUgcmV0YWluZWQhIFRoaXMgcGF0Y2ggZXNzZW50aWFsbHkgcmVzZXRzIGBzLSZndDt0cnVuY2F0ZWAgYW5kIGBzLSZndDt0cnVuY19zaXplYCB0byBgZmFsc2VgIGFuZCBgMGAgd2hlbiB0aGUgYXR0cmlidXRlIGlzbiYjMzk7dCBwcm92aWRlZCwgd2hpY2ggZml4ZXMgdGhlIGZhaWx1cmUgdG8gY2xlYXIgdGhlIHRydW5jYXRpb24gc2V0dGluZ3Mgd2hlbiByZXBsYWNpbmcgYW4gYWN0aW9uLgoKU28sIGlzIHRoaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IE5vLCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgYnkgYWxsb2NhdGlvbi4gSG93ZXZlciwgdGhpcyBpcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGZhaWxzIHRvIGNsZWFyIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcHJldmlvdXMgYWN0aW9uLgoKRG9lcyB0aGlzIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBqdXN0IHJldXNlcyBvbGQsIHBvdGVudGlhbGx5IHN0YWxlLCB2YWx1ZXMuIERvZXMgaXQgY2F1c2UgYW4gaW5mb3JtYXRpb24gbGVhaz8gTm90IGRpcmVjdGx5LCBpdCYjMzk7cyBqdXN0IGEgbG9naWMgYnVnIHdoZXJlIGEgZmllbGQgaXNuJiMzOTt0IGNsZWFyZWQuCgpUaGUgbmV4dCB0aGluZyB0byBjaGVjayBpcywgYXJlIGBzLSZndDt0cnVuY2F0ZWAgb3IgYHMtJmd0O3RydW5jX3NpemVgIHVzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gTG9va3MgbGlrZSB0aGV5IGFyZSB1c2VkIGluIGB0Y2Zfc2FtcGxlX2FjdGAgKG9yIHNpbWlsYXIpLiBUaGF0IHdpbGwgYmUgd29ydGggY2hlY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9zYW1wbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdHtcbiAxNDE6XHRcdHN0cnVjdCB0Y2Zfc2FtcGxlICpzID0gdG9fc2FtcGxlKGEpO1xuIDE0MjpcdFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XG4gMTQzOlx0XG4gMTQ0Olx0XHQvKiBsYXN0IHJlZmVyZW5jZSB0byBhY3Rpb24sIG5vIG5lZWQgdG8gbG9jayAqL1xuIDE0NTpcdFx0cHNhbXBsZV9ncm91cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy1cdTAwM2Vwc2FtcGxlX2dyb3VwLCAxKTtcbiAxNDY6XHRcdFJDVV9JTklUX1BPSU5URVIocy1cdTAwM2Vwc2FtcGxlX2dyb3VwLCBOVUxMKTtcbiAxNDc6XHRcdGlmIChwc2FtcGxlX2dyb3VwKVxuIDE0ODpcdFx0XHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcbiAxNDk6XHR9XG4gMTUwOlx0XG4gMTUxOlx0c3RhdGljIGJvb2wgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDE1MjpcdHtcbiAxNTM6XHRcdHN3aXRjaCAoZGV2LVx1MDAzZXR5cGUpIHtcbiAxNTQ6XHRcdGNhc2UgQVJQSFJEX1RVTk5FTDpcbiAxNTU6XHRcdGNhc2UgQVJQSFJEX1RVTk5FTDY6XG4gMTU2Olx0XHRjYXNlIEFSUEhSRF9TSVQ6XG4gMTU3Olx0XHRjYXNlIEFSUEhSRF9JUEdSRTpcbiAxNTg6XHRcdGNhc2UgQVJQSFJEX0lQNkdSRTpcbiAxNTk6XHRcdGNhc2UgQVJQSFJEX1ZPSUQ6XG4gMTYwOlx0XHRjYXNlIEFSUEhSRF9OT05FOlxuIDE2MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTYyOlx0XHRkZWZhdWx0OlxuIDE2MzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAxNjQ6XHRcdH1cbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9zYW1wbGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gMTY4Olx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gMTY5Olx0XHRcdFx0XHQgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXG4gMTcwOlx0e1xuIDE3MTpcdFx0c3RydWN0IHRjZl9zYW1wbGUgKnMgPSB0b19zYW1wbGUoYSk7XG4gMTcyOlx0XHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqcHNhbXBsZV9ncm91cDtcbiAxNzM6XHRcdHU4IGNvb2tpZV9kYXRhW1RDX0NPT0tJRV9NQVhfU0laRV07XG4gMTc0Olx0XHRzdHJ1Y3QgcHNhbXBsZV9tZXRhZGF0YSBtZCA9IHt9O1xuIDE3NTpcdFx0c3RydWN0IHRjX2Nvb2tpZSAqdXNlcl9jb29raWU7XG4gMTc2Olx0XHRpbnQgcmV0dmFsO1xuIDE3NzpcdFxuIDE3ODpcdFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNnMtXHUwMDNldGNmX3RtKTtcbiAxNzk6XHRcdGJzdGF0c191cGRhdGUodGhpc19jcHVfcHRyKHMtXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xuIDE4MDpcdFx0cmV0dmFsID0gUkVBRF9PTkNFKHMtXHUwMDNldGNmX2FjdGlvbik7XG4gMTgxOlx0XG4gMTgyOlx0XHRwc2FtcGxlX2dyb3VwID0gcmN1X2RlcmVmZXJlbmNlX2JoKHMtXHUwMDNlcHNhbXBsZV9ncm91cCk7XG4gMTgzOlx0XG4gMTg0Olx0XHQvKiByYW5kb21seSBzYW1wbGUgcGFja2V0cyBhY2NvcmRpbmcgdG8gcmF0ZSAqL1xuIDE4NTpcdFx0aWYgKHBzYW1wbGVfZ3JvdXAgXHUwMDI2XHUwMDI2IChnZXRfcmFuZG9tX3UzMl9iZWxvdyhzLVx1MDAzZXJhdGUpID09IDApKSB7XG4gMTg2Olx0XHRcdGlmICghc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkge1xuIDE4NzpcdFx0XHRcdG1kLmluX2lmaW5kZXggPSBza2ItXHUwMDNlc2tiX2lpZjtcbiAxODg6XHRcdFx0XHRtZC5vdXRfaWZpbmRleCA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleDtcbiAxODk6XHRcdFx0fSBlbHNlIHtcbiAxOTA6XHRcdFx0XHRtZC5pbl9pZmluZGV4ID0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xuIDE5MTpcdFx0XHR9XG4gMTkyOlx0XG4gMTkzOlx0XHRcdC8qIG9uIGluZ3Jlc3MsIHRoZSBtYWMgaGVhZGVyIGdldHMgcG9wcGVkLCBzbyBwdXNoIGl0IGJhY2sgKi9cbiAxOTQ6XHRcdFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2IHRjZl9zYW1wbGVfZGV2X29rX3B1c2goc2tiLVx1MDAzZWRldikpXG4gMTk1Olx0XHRcdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gMTk2Olx0XG4gMTk3Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxOTg6XHRcdFx0dXNlcl9jb29raWUgPSByY3VfZGVyZWZlcmVuY2UoYS1cdTAwM2V1c2VyX2Nvb2tpZSk7XG4gMTk5Olx0XHRcdGlmICh1c2VyX2Nvb2tpZSkge1xuIDIwMDpcdFx0XHRcdG1lbWNweShjb29raWVfZGF0YSwgdXNlcl9jb29raWUtXHUwMDNlZGF0YSxcbiAyMDE6XHRcdFx0XHQgICAgICAgdXNlcl9jb29raWUtXHUwMDNlbGVuKTtcbiAyMDI6XHRcdFx0XHRtZC51c2VyX2Nvb2tpZSA9IGNvb2tpZV9kYXRhO1xuIDIwMzpcdFx0XHRcdG1kLnVzZXJfY29va2llX2xlbiA9IHVzZXJfY29va2llLVx1MDAzZWxlbjtcbiAyMDQ6XHRcdFx0fVxuIDIwNTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAyMDY6XHRcbiAyMDc6XHRcdFx0bWQudHJ1bmNfc2l6ZSA9IHMtXHUwMDNldHJ1bmNhdGUgPyBzLVx1MDAzZXRydW5jX3NpemUgOiBza2ItXHUwMDNlbGVuO1xuIDIwODpcdFx0XHRwc2FtcGxlX3NhbXBsZV9wYWNrZXQocHNhbXBsZV9ncm91cCwgc2tiLCBzLVx1MDAzZXJhdGUsIFx1MDAyNm1kKTtcbiAyMDk6XHRcbiAyMTA6XHRcdFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikgXHUwMDI2XHUwMDI2IHRjZl9zYW1wbGVfZGV2X29rX3B1c2goc2tiLVx1MDAzZWRldikpXG4gMjExOlx0XHRcdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gMjEyOlx0XHR9XG4gMjEzOlx0XG4gMjE0Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDIxNTpcdH1cbiAyMTY6XHRcbiAyMTc6XHRzdGF0aWMgdm9pZCB0Y2Zfc2FtcGxlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxuIDIxODpcdFx0XHRcdFx0ICAgIHU2NCBkcm9wcywgdTY0IGxhc3R1c2UsIGJvb2wgaHcpXG4gMjE5Olx0e1xuIDIyMDpcdFx0c3RydWN0IHRjZl9zYW1wbGUgKnMgPSB0b19zYW1wbGUoYSk7XG4gMjIxOlx0XHRzdHJ1Y3QgdGNmX3QgKnRtID0gXHUwMDI2cy1cdTAwM2V0Y2ZfdG07XG4gMjIyOlx0XG4gMjIzOlx0XHR0Y2ZfYWN0aW9uX3VwZGF0ZV9zdGF0cyhhLCBieXRlcywgcGFja2V0cywgZHJvcHMsIGh3KTtcbiAyMjQ6XHRcdHRtLVx1MDAzZWxhc3R1c2UgPSBtYXhfdCh1NjQsIHRtLVx1MDAzZWxhc3R1c2UsIGxhc3R1c2UpO1xuIDIyNTpcdH1cbiAyMjY6XHRcbiAyMjc6XHRzdGF0aWMgaW50IHRjZl9zYW1wbGVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIDIyODpcdFx0XHRcdCAgIGludCBiaW5kLCBpbnQgcmVmKVxuIDIyOTpcdHtcbiAyMzA6XHRcdHVuc2lnbmVkIGNoYXIgKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG4gMjMxOlx0XHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcbiAyMzI6XHRcdHN0cnVjdCB0Y19zYW1wbGUgb3B0ID0ge1xuIDIzMzpcdFx0XHQuaW5kZXggICAgICA9IHMtXHUwMDNldGNmX2luZGV4LFxuIDIzNDpcdFx0XHQucmVmY250ICAgICA9IHJlZmNvdW50X3JlYWQoXHUwMDI2cy1cdTAwM2V0Y2ZfcmVmY250KSAtIHJlZixcbiAyMzU6XHRcdFx0LmJpbmRjbnQgICAgPSBhdG9taWNfcmVhZChcdTAwMjZzLVx1MDAzZXRjZl9iaW5kY250KSAtIGJpbmQsXG4gMjM2Olx0XHR9O1xuIDIzNzpcdFx0c3RydWN0IHRjZl90IHQ7XG4gMjM4Olx0XG4gMjM5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cy1cdTAwM2V0Y2ZfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHByZXNlbnRlZCB3aXRoIGEgZmlsZSwgbGlrZWx5IGEgZGF0YSBkdW1wIG9yIGEgbG9nLCBuYW1lZCBgdGNmX3NhbXBsZV9kdW1wYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuJiMzNDsKCioqRGVjb25zdHJ1Y3RpbmcgYHRjZl9zYW1wbGVfZHVtcGAqKgoKTXkgZXhwZXJ0IGV5ZSBpcyBhbHJlYWR5IHNjYW5uaW5nLCBtZW50YWxseSBjYXRhbG9naW5nIHBvc3NpYmlsaXRpZXMuIElzIHRoaXMgYSB0ZXh0IGZpbGUsIGEgYmluYXJ5IGZpbGUsIGEgZGF0YWJhc2UgZHVtcCwgYSBuZXR3b3JrIHRyYWNlPyBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCAmIzM0O1RDRiYjMzQ7IHByb2JhYmx5IHN0YW5kcyBmb3Igc29tZXRoaW5nIHJlbGV2YW50IHRvIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvdG9jb2wsIGZyYW1ld29yaywgb3IgZXZlbiBhIHN5c3RlbSBhcmNoaXRlY3R1cmUgdGhhdCBJJiMzOTttIGZhbWlsaWFyIHdpdGguIFRoZSAmIzM0O3NhbXBsZSYjMzQ7IHBhcnQgc3VnZ2VzdHMgdGhpcyBpc24mIzM5O3QgdGhlIHByaW1hcnkgcHJvZHVjdGlvbiBkYXRhLCB3aGljaCBpcyBnb29kLiBFYXNpZXIgdG8gYW5hbHl6ZSEgSXQmIzM5O3MgYSBzYW1wbGUsIHNvIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGEgbWFuYWdlYWJsZSBzaXplIGFuZCBkb2VzbiYjMzk7dCBjb250YWluIGFueSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFRoZSAmIzM0O2R1bXAmIzM0OyB0ZWxscyBtZSB3ZSBhcmUgbGlrZWx5IGxvb2tpbmcgYXQgYSBzbmFwc2hvdCwgd2hpY2ggSSBjYW4gdXNlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcsIHByb2ZpbGluZywgYW5kIGFuYWx5emluZyBkYXRhIHBhdHRlcm5zLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBoeXBvdGhlc2VzIGFib3V0IHRoZSB0eXBlIG9mIGluc2lnaHRzIEkgY2FuIGdsZWFuIGZyb20gdGhpcywgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kIHdpdGhpbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaW4gdGhpcyB0aGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X3NhbXBsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XHRvcHQuYWN0aW9uID0gcy1cdTAwM2V0Y2ZfYWN0aW9uO1xuIDI0MTpcdFx0aWYgKG5sYV9wdXQoc2tiLCBUQ0FfU0FNUExFX1BBUk1TLCBzaXplb2Yob3B0KSwgXHUwMDI2b3B0KSlcbiAyNDI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjQzOlx0XG4gMjQ0Olx0XHR0Y2ZfdG1fZHVtcChcdTAwMjZ0LCBcdTAwMjZzLVx1MDAzZXRjZl90bSk7XG4gMjQ1Olx0XHRpZiAobmxhX3B1dF82NGJpdChza2IsIFRDQV9TQU1QTEVfVE0sIHNpemVvZih0KSwgXHUwMDI2dCwgVENBX1NBTVBMRV9QQUQpKVxuIDI0NjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyNDc6XHRcbiAyNDg6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIFRDQV9TQU1QTEVfUkFURSwgcy1cdTAwM2VyYXRlKSlcbiAyNDk6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjUwOlx0XG4gMjUxOlx0XHRpZiAocy1cdTAwM2V0cnVuY2F0ZSlcbiAyNTI6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1NBTVBMRV9UUlVOQ19TSVpFLCBzLVx1MDAzZXRydW5jX3NpemUpKVxuIDI1MzpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDI1NDpcdFxuIDI1NTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1NBTVBMRV9QU0FNUExFX0dST1VQLCBzLVx1MDAzZXBzYW1wbGVfZ3JvdXBfbnVtKSlcbiAyNTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjU3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiAyNTg6XHRcbiAyNTk6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuIDI2MDpcdFxuIDI2MTpcdG5sYV9wdXRfZmFpbHVyZTpcbiAyNjI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spO1xuIDI2MzpcdFx0bmxtc2dfdHJpbShza2IsIGIpO1xuIDI2NDpcdFx0cmV0dXJuIC0xO1xuIDI2NTpcdH1cbiAyNjY6XHRcbiAyNjc6XHRzdGF0aWMgdm9pZCB0Y2ZfcHNhbXBsZV9ncm91cF9wdXQodm9pZCAqcHJpdilcbiAyNjg6XHR7XG4gMjY5Olx0XHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqZ3JvdXAgPSBwcml2O1xuIDI3MDpcdFxuIDI3MTpcdFx0cHNhbXBsZV9ncm91cF9wdXQoZ3JvdXApO1xuIDI3MjpcdH1cbiAyNzM6XHRcbiAyNzQ6XHRzdGF0aWMgc3RydWN0IHBzYW1wbGVfZ3JvdXAgKlxuIDI3NTpcdHRjZl9zYW1wbGVfZ2V0X2dyb3VwKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gMjc2Olx0XHRcdCAgICAgdGNfYWN0aW9uX3ByaXZfZGVzdHJ1Y3RvciAqZGVzdHJ1Y3RvcilcbiAyNzc6XHR7XG4gMjc4Olx0XHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcbiAyNzk6XHRcdHN0cnVjdCBwc2FtcGxlX2dyb3VwICpncm91cDtcbiAyODA6XHRcbiAyODE6XHRcdGdyb3VwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzLVx1MDAzZXBzYW1wbGVfZ3JvdXAsXG4gMjgyOlx0XHRcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnMtXHUwMDNldGNmX2xvY2spKTtcbiAyODM6XHRcdGlmIChncm91cCkge1xuIDI4NDpcdFx0XHRwc2FtcGxlX2dyb3VwX3Rha2UoZ3JvdXApO1xuIDI4NTpcdFx0XHQqZGVzdHJ1Y3RvciA9IHRjZl9wc2FtcGxlX2dyb3VwX3B1dDtcbiAyODY6XHRcdH1cbiAyODc6XHRcbiAyODg6XHRcdHJldHVybiBncm91cDtcbiAyODk6XHR9XG4gMjkwOlx0XG4gMjkxOlx0c3RhdGljIHZvaWQgdGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5LFxuIDI5MjpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxuIDI5MzpcdHtcbiAyOTQ6XHRcdGVudHJ5LVx1MDAzZXNhbXBsZS5wc2FtcGxlX2dyb3VwID1cbiAyOTU6XHRcdFx0YWN0LVx1MDAzZW9wcy1cdTAwM2VnZXRfcHNhbXBsZV9ncm91cChhY3QsIFx1MDAyNmVudHJ5LVx1MDAzZWRlc3RydWN0b3IpO1xuIDI5NjpcdFx0ZW50cnktXHUwMDNlZGVzdHJ1Y3Rvcl9wcml2ID0gZW50cnktXHUwMDNlc2FtcGxlLnBzYW1wbGVfZ3JvdXA7XG4gMjk3Olx0fVxuIDI5ODpcdFxuIDI5OTpcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG4gMzAwOlx0XHRcdFx0XHRcdHUzMiAqaW5kZXhfaW5jLCBib29sIGJpbmQsXG4gMzAxOlx0XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMDI6XHR7XG4gMzAzOlx0XHRpZiAoYmluZCkge1xuIDMwNDpcdFx0XHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5ID0gZW50cnlfZGF0YTtcbiAzMDU6XHRcbiAzMDY6XHRcdFx0ZW50cnktXHUwMDNlaWQgPSBGTE9XX0FDVElPTl9TQU1QTEU7XG4gMzA3Olx0XHRcdGVudHJ5LVx1MDAzZXNhbXBsZS50cnVuY19zaXplID0gdGNmX3NhbXBsZV90cnVuY19zaXplKGFjdCk7XG4gMzA4Olx0XHRcdGVudHJ5LVx1MDAzZXNhbXBsZS50cnVuY2F0ZSA9IHRjZl9zYW1wbGVfdHJ1bmNhdGUoYWN0KTtcbiAzMDk6XHRcdFx0ZW50cnktXHUwMDNlc2FtcGxlLnJhdGUgPSB0Y2Zfc2FtcGxlX3JhdGUoYWN0KTtcbiAzMTA6XHRcdFx0dGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChlbnRyeSwgYWN0KTtcbiAzMTE6XHRcdFx0KmluZGV4X2luYyA9IDE7XG4gMzEyOlx0XHR9IGVsc2Uge1xuIDMxMzpcdFx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX2FjdGlvbiAqZmxfYWN0aW9uID0gZW50cnlfZGF0YTtcbiAzMTQ6XHRcbiAzMTU6XHRcdFx0ZmxfYWN0aW9uLVx1MDAzZWlkID0gRkxPV19BQ1RJT05fU0FNUExFO1xuIDMxNjpcdFx0fVxuIDMxNzpcdFxuIDMxODpcdFx0cmV0dXJuIDA7XG4gMzE5Olx0fVxuIDMyMDpcdFxuIDMyMTpcdHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3Rfc2FtcGxlX29wcyA9IHtcbiAzMjI6XHRcdC5raW5kXHQgID0gXCYjMzQ7c2FtcGxlXCYjMzQ7LFxuIDMyMzpcdFx0LmlkXHQgID0gVENBX0lEX1NBTVBMRSxcbiAzMjQ6XHRcdC5vd25lclx0ICA9IFRISVNfTU9EVUxFLFxuIDMyNTpcdFx0LmFjdFx0ICA9IHRjZl9zYW1wbGVfYWN0LFxuIDMyNjpcdFx0LnN0YXRzX3VwZGF0ZSA9IHRjZl9zYW1wbGVfc3RhdHNfdXBkYXRlLFxuIDMyNzpcdFx0LmR1bXBcdCAgPSB0Y2Zfc2FtcGxlX2R1bXAsXG4gMzI4Olx0XHQuaW5pdFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcbiAzMjk6XHRcdC5jbGVhbnVwICA9IHRjZl9zYW1wbGVfY2xlYW51cCxcbiAzMzA6XHRcdC5nZXRfcHNhbXBsZV9ncm91cCA9IHRjZl9zYW1wbGVfZ2V0X2dyb3VwLFxuIDMzMTpcdFx0Lm9mZmxvYWRfYWN0X3NldHVwICAgID0gdGNmX3NhbXBsZV9vZmZsb2FkX2FjdF9zZXR1cCxcbiAzMzI6XHRcdC5zaXplXHQgID0gc2l6ZW9mKHN0cnVjdCB0Y2Zfc2FtcGxlKSxcbiAzMzM6XHR9O1xuIDMzNDpcdE1PRFVMRV9BTElBU19ORVRfQUNUKFwmIzM0O3NhbXBsZVwmIzM0Oyk7XG4gMzM1Olx0XG4gMzM2Olx0c3RhdGljIF9fbmV0X2luaXQgaW50IHNhbXBsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gMzM3Olx0e1xuIDMzODpcdFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3Rfc2FtcGxlX29wcy5uZXRfaWQpO1xuIDMzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgVHJ1bmNhdGlvbiBJc3N1ZSBpbiBBY3Rpb24gUmVwbGFjZW1lbnQqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgZmFpbHVyZSB0byByZXNldCBgcy0mZ3Q7dHJ1bmNhdGVgIGFuZCBgcy0mZ3Q7dHJ1bmNfc2l6ZWAgd2hlbiByZXBsYWNpbmcgYW4gYWN0aW9uLiBJdCYjMzk7cyBhIGNsYXNzaWMgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCB3aGljaCBpcyBhIHJlbGllZiEgTm93LCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBgc2Agc3RydWN0IGlzIHByb3Blcmx5IHplcm8taW5pdGlhbGl6ZWQgZHVyaW5nIGNyZWF0aW9uLiBJIHJlbWVtYmVyIGB0Y2ZfaWRyX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGFjdGlvbiBzdHJ1Y3QsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGB0Y2ZfaWRyX2NyZWF0ZWAgZnVuY3Rpb24gZGVmaW5pdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9pZHJfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jPTc0Mj1zdGF0aWMgaW50IHRjZl9pZHJfZGVsZXRlX2luZGV4KHN0cnVjdCB0Y2ZfaWRyaW5mbyAqaWRyaW5mbywgdTMyIGluZGV4KVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtNzc0LVxubmV0L3NjaGVkL2FjdF9hcGkuYzo3NzU6aW50IHRjZl9pZHJfY3JlYXRlKHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biwgdTMyIGluZGV4LCBzdHJ1Y3QgbmxhdHRyICplc3QsXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTc3Ni1cdFx0ICAgc3RydWN0IHRjX2FjdGlvbiAqKmEsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMsXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy04MzAtfVxubmV0L3NjaGVkL2FjdF9hcGkuYzo4MzE6RVhQT1JUX1NZTUJPTCh0Y2ZfaWRyX2NyZWF0ZSk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzMi1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODMzOmludCB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biwgdTMyIGluZGV4LFxubmV0L3NjaGVkL2FjdF9hcGkuYy04MzQtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzOC1cdC8qIFNldCBjcHVzdGF0cyBhY2NvcmRpbmcgdG8gYWN0aW9ucyBmbGFncy4gKi9cbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODM5Olx0cmV0dXJuIHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLCBvcHMsIGJpbmQsXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0MC1cdFx0XHQgICAgICAhKGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX05PX1BFUkNQVV9TVEFUUyksIGZsYWdzKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtODQxLX1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODQyOkVYUE9SVF9TWU1CT0wodGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgdGNmX2lkcl9jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBhY3Rpb24gQVBJIHN0dWZmLiBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYHRjZl9pZHJfY3JlYXRlYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFNlZW1zIGxpa2UgdGhpcyBpcyB3aGVyZSB3ZSYjMzk7cmUgaW5pdGlhbGx5IHNldHRpbmcgdXAgdGhlIElEUiBzdHJ1Y3R1cmUgZm9yIG91ciB0cmFmZmljIGNvbnRyb2wgZmlsdGVycy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlc2UgSURScyBhcmUgaW5pdGlhbGl6ZWQg4oCTIGhvdyB0aGUga2V5cyBhcmUgYXNzaWduZWQsIGhvdyBjb2xsaXNpb25zIGFyZSBoYW5kbGVkIChvciBhcmUgdGhleT8pLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBhIG5ldyBjbGFzc2lmaWVyIHRoYXQgbmVlZHMgYW4gSURSLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBhcmUgd2UgYWxsb2NhdGluZyBtZW1vcnkgaGVyZSBkaXJlY3RseT8gT3IgaXMgdGhlcmUgc29tZSBraW5kIG9mIHBvb2w/IFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb25jdXJyZW5jeSB3aGVuIHdvcmtpbmcgd2l0aCB0aGlzIElEUiBzdHJ1Y3R1cmU/IFRoZSBjb3JlIG9mIGFueSBhY3Rpb24gZnJhbWV3b3JrIGlzIG9yZ2FuaXppbmcgb3VyIGZpbHRlcnMsIHNvIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhbmQgZmluZCB0aGVzZSBmaWx0ZXJzIGluIGEgcXVpY2sgbWFubmVyIGlzIGNyaXRpY2FsLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBtdXRleGVzIG9yIGF0b21pYyBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgcHJvdGVjdCB0aGlzIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgbGF5IGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzU6XHRpbnQgdGNmX2lkcl9jcmVhdGUoc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuLCB1MzIgaW5kZXgsIHN0cnVjdCBubGF0dHIgKmVzdCxcbiA3NzY6XHRcdFx0ICAgc3RydWN0IHRjX2FjdGlvbiAqKmEsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMsXG4gNzc3Olx0XHRcdCAgIGludCBiaW5kLCBib29sIGNwdXN0YXRzLCB1MzIgZmxhZ3MpXG4gNzc4Olx0e1xuIDc3OTpcdFx0c3RydWN0IHRjX2FjdGlvbiAqcCA9IGt6YWxsb2Mob3BzLVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuIDc4MDpcdFx0c3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvID0gdG4tXHUwMDNlaWRyaW5mbztcbiA3ODE6XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuIDc4MjpcdFxuIDc4MzpcdFx0aWYgKHVubGlrZWx5KCFwKSlcbiA3ODQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNzg1Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cC1cdTAwM2V0Y2ZhX3JlZmNudCwgMSk7XG4gNzg2Olx0XHRpZiAoYmluZClcbiA3ODc6XHRcdFx0YXRvbWljX3NldChcdTAwMjZwLVx1MDAzZXRjZmFfYmluZGNudCwgMSk7XG4gNzg4Olx0XG4gNzg5Olx0XHRpZiAoY3B1c3RhdHMpIHtcbiA3OTA6XHRcdFx0cC1cdTAwM2VjcHVfYnN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XG4gNzkxOlx0XHRcdGlmICghcC1cdTAwM2VjcHVfYnN0YXRzKVxuIDc5MjpcdFx0XHRcdGdvdG8gZXJyMTtcbiA3OTM6XHRcdFx0cC1cdTAwM2VjcHVfYnN0YXRzX2h3ID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XG4gNzk0Olx0XHRcdGlmICghcC1cdTAwM2VjcHVfYnN0YXRzX2h3KVxuIDc5NTpcdFx0XHRcdGdvdG8gZXJyMjtcbiA3OTY6XHRcdFx0cC1cdTAwM2VjcHVfcXN0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKTtcbiA3OTc6XHRcdFx0aWYgKCFwLVx1MDAzZWNwdV9xc3RhdHMpXG4gNzk4Olx0XHRcdFx0Z290byBlcnIzO1xuIDc5OTpcdFx0fVxuIDgwMDpcdFx0Z25ldF9zdGF0c19iYXNpY19zeW5jX2luaXQoXHUwMDI2cC1cdTAwM2V0Y2ZhX2JzdGF0cyk7XG4gODAxOlx0XHRnbmV0X3N0YXRzX2Jhc2ljX3N5bmNfaW5pdChcdTAwMjZwLVx1MDAzZXRjZmFfYnN0YXRzX2h3KTtcbiA4MDI6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnAtXHUwMDNldGNmYV9sb2NrKTtcbiA4MDM6XHRcdHAtXHUwMDNldGNmYV9pbmRleCA9IGluZGV4O1xuIDgwNDpcdFx0cC1cdTAwM2V0Y2ZhX3RtLmluc3RhbGwgPSBqaWZmaWVzO1xuIDgwNTpcdFx0cC1cdTAwM2V0Y2ZhX3RtLmxhc3R1c2UgPSBqaWZmaWVzO1xuIDgwNjpcdFx0cC1cdTAwM2V0Y2ZhX3RtLmZpcnN0dXNlID0gMDtcbiA4MDc6XHRcdHAtXHUwMDNldGNmYV9mbGFncyA9IGZsYWdzO1xuIDgwODpcdFx0aWYgKGVzdCkge1xuIDgwOTpcdFx0XHRlcnIgPSBnZW5fbmV3X2VzdGltYXRvcihcdTAwMjZwLVx1MDAzZXRjZmFfYnN0YXRzLCBwLVx1MDAzZWNwdV9ic3RhdHMsXG4gODEwOlx0XHRcdFx0XHRcdFx1MDAyNnAtXHUwMDNldGNmYV9yYXRlX2VzdCxcbiA4MTE6XHRcdFx0XHRcdFx0XHUwMDI2cC1cdTAwM2V0Y2ZhX2xvY2ssIGZhbHNlLCBlc3QpO1xuIDgxMjpcdFx0XHRpZiAoZXJyKVxuIDgxMzpcdFx0XHRcdGdvdG8gZXJyNDtcbiA4MTQ6XHRcdH1cbiA4MTU6XHRcbiA4MTY6XHRcdHAtXHUwMDNlaWRyaW5mbyA9IGlkcmluZm87XG4gODE3Olx0XHRfX21vZHVsZV9nZXQob3BzLVx1MDAzZW93bmVyKTtcbiA4MTg6XHRcdHAtXHUwMDNlb3BzID0gb3BzO1xuIDgxOTpcdFx0KmEgPSBwO1xuIDgyMDpcdFx0cmV0dXJuIDA7XG4gODIxOlx0ZXJyNDpcbiA4MjI6XHRcdGZyZWVfcGVyY3B1KHAtXHUwMDNlY3B1X3FzdGF0cyk7XG4gODIzOlx0ZXJyMzpcbiA4MjQ6XHRcdGZyZWVfcGVyY3B1KHAtXHUwMDNlY3B1X2JzdGF0c19odyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjcyCgkJCQkJCQlvdXRwdXQ6IDE4OAoJCQkJCQkJdGhvdWdodHM6IDQ1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGt6YWxsb2NgICppcyogYmVpbmcgdXNlZCwgc28gYHMtJmd0O3RydW5jYXRlYCBhbmQgYHMtJmd0O3RydW5jX3NpemVgIGFyZSBpbml0aWFsaXplZCB0byAwL2ZhbHNlIHdoZW4gdGhlIGFjdGlvbiBpcyBjcmVhdGVkLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgYSBwcm9ibGVtIHRoYXQgYXJpc2VzIHdoZW4gYW4gZXhpc3RpbmcgYWN0aW9uIGlzICp1cGRhdGVkKiBvciAqcmVwbGFjZWQqLCBhbmQgdGhlIGluY29taW5nIG5ldGxpbmsgbWVzc2FnZSBkb2VzbiYjMzk7dCBpbmNsdWRlIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIEVzc2VudGlhbGx5LCB0aGUgKm9sZCogdmFsdWVzIGFyZSBiZWluZyByZXRhaW5lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc2V0IGluIHRoaXMgdXBkYXRlIHNjZW5hcmlvLgoKVGhlcmVmb3JlLCB0aGlzIGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgaXQmIzM5O3MgYSBzdGF0ZSByZXRlbnRpb24gYnVnIG9uIGFuIHVwZGF0ZS4gSSYjMzk7dmUgcXVpY2tseSByZS1yZXZpZXdlZCB0aGUgS01TQU4gdnMuIEtBU0FOIHJ1bGVzIHRvIGNvbmZpcm0gdGhpcyBhc3Nlc3NtZW50LiBKdXN0IHRvIGJlIGNsZWFyLCB0aG9zZSBydWxlcyBzdGF0ZSBLTVNBTiBpcyBuZWVkZWQgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGluZ3MgbGlrZSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXItcmVhY2hhYmxlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciB2dWxuZXJhYmlsaXRpZXMgaW4gYm91bmRzIGNoZWNrcyB0aGF0IGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpJbiB0aGlzIGNhc2UsIHRoZSBtZW1vcnkgKmlzKiBmdWxseSBpbml0aWFsaXplZCB0aGFua3MgdG8gYGt6YWxsb2NgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjb2RlIGlzbiYjMzk7dCByZXNldHRpbmcgdGhvc2UgZmllbGRzIHRvIHRoZWlyIGNvcnJlY3QgaW5pdGlhbCB2YWx1ZXMgZHVyaW5nIHRoZSB1cGRhdGUsIG5vdCB0aGF0IGl0JiMzOTtzIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIGhlcmUmIzM5O3MgbXkgZm9ybWFsIEtNU0FOIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYHRjZl9zYW1wbGVfaW5pdGAuIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGB0Y2Agc2FtcGxlIGFjdGlvbiwgaXQgZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIGRvZXNuJiMzOTt0IGluY2x1ZGUgdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZS4gQ3J1Y2lhbGx5LCB0aGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGF0IHRoZSBwb2ludCBvZiBhbGxvY2F0aW9uLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHJldGFpbmluZyBzdGFsZSBzdGF0ZSBkdXJpbmcgYW4gdXBkYXRlLCByYXRoZXIgdGhhbiBleHBvc2luZyBvciBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQgKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgaW4gdGhpcyBjb2RlLiBXZSBkb24mIzM5O3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIGluIGB0Y2Zfc2FtcGxlX2luaXRgIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyBgdGNgIHNhbXBsZSBhY3Rpb24gZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIG9taXRzIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIFRoZSBhY3Rpb24gc3RydWN0dXJlIGlzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHNvIHRoZSBtZW1vcnkgaXMgYWx3YXlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGFib3V0IHJldGFpbmluZyBzdGFsZSBzdGF0ZSBkdXJpbmcgYW4gdXBkYXRlLCByYXRoZXIgdGhhbiBleHBvc2luZyBvciBvcGVyYXRpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhpcyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjIzOjA5LjgyODM5Mjk5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDQ0NDQyNzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORVRfQUNUX1NBTVBMRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9zYW1wbGVfaW5pdFwiLFxuICAgIFwidGNmX3NhbXBsZV9hY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2Zfc2FtcGxlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYCB0byBleHBsaWNpdGx5IHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXMgbm90IHByb3ZpZGVkLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyB0YyBzYW1wbGUgYWN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldGFpbiB0aGUgb2xkIHRydW5jYXRpb24gc2V0dGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtICh0YyBhY3Rpb25zKSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjM6MDkuODI4Mzk5MzQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjAzMjExMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MTM0OThlZDBhZGY2OTMxYWZlZGFkMWNkNjhkY2UzOGI2NmI0MzY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE4OjIzOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuaW5kZXggMmNlYjRkMTQxYjcxMy4uMmJkYzdhMGViNmQ2OCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXFxuKysrIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xcbkBAIC0xMTYsNiArMTE2LDkgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuIFxcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XFxuIFxcdFxcdHMtXFx1MDAzZXRydW5jYXRlID0gdHJ1ZTtcXG4gXFx0XFx0cy1cXHUwMDNldHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzLVxcdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO1xcbitcXHRcXHRzLVxcdTAwM2V0cnVuY19zaXplID0gMDtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cy1cXHUwMDNldGNmX2xvY2spO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjM6MTAuMTg5NTQ0NDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQwNTM2ODAzMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfU0FNUExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3NhbXBsZV9pbml0XCIsXG4gICAgXCJ0Y2Zfc2FtcGxlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2Zfc2FtcGxlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYCB0byBleHBsaWNpdGx5IHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXMgbm90IHByb3ZpZGVkLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyB0YyBzYW1wbGUgYWN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldGFpbiB0aGUgb2xkIHRydW5jYXRpb24gc2V0dGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtICh0YyBhY3Rpb25zKSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzNDk4ZWQwYWRmNjkzMWFmZWRhZDFjZDY4ZGNlMzhiNjZiNDM2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE4OjIzOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbmluZGV4IDJjZWI0ZDE0MWI3MTMuLjJiZGM3YTBlYjZkNjggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jXG5AQCAtMTE2LDYgKzExNiw5IEBAIHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIFx0aWYgKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pIHtcbiBcdFx0cy1cdTAwM2V0cnVuY2F0ZSA9IHRydWU7XG4gXHRcdHMtXHUwMDNldHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0cy1cdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO1xuK1x0XHRzLVx1MDAzZXRydW5jX3NpemUgPSAwO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cy1cdTAwM2V0Y2ZfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyMzoxMC4xODk1NDU5MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY3MTk3OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmV0L3NjaGVkL2FjdF9zYW1wbGUuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdGhlIGB0Y2Zfc2FtcGxlX2luaXRgIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhhbmRsaW5nIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIEl0J3MgYWRkaW5nIGFuIGBlbHNlYCBicmFuY2ggdG8gdGhlIGV4aXN0aW5nIGBpZmAgc3RhdGVtZW50IGNoZWNraW5nIGZvciB0aGF0IGF0dHJpYnV0ZS5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIGlmIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgICp3YXNuJ3QqIHByb3ZpZGVkLCB0aGUgYHMtXHUwMDNldHJ1bmNhdGVgIGZsYWcgYW5kIGBzLVx1MDAzZXRydW5jX3NpemVgIG1lbWJlcnMgKndvdWxkbid0KiBiZSBleHBsaWNpdGx5IG1vZGlmaWVkLiBUaGV5J2QganVzdCBrZWVwIHdoYXRldmVyIHByZXZpb3VzIHZhbHVlIHRoZXkgaGVsZCwgd2hpY2ggY291bGQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGF0IHRoaXMgaXNuJ3QgYSBwcm9ibGVtIHdpdGggYWxsb2NhdGlvbiwgc2luY2UgYHNgIGlzIHByZXN1bWFibHkgYW4gZXhpc3RpbmcgYWN0aW9uIGJlaW5nIHVwZGF0ZWQuIFJpZ2h0LCBpdCBpcyBhbGxvY2F0ZWQgb3IgcmV0cmlldmVkLlxuXG5TbywgdGhlIG5ldyBgZWxzZWAgYnJhbmNoIGV4cGxpY2l0bHkgc2V0cyBgcy1cdTAwM2V0cnVuY2F0ZSA9IGZhbHNlO2AgYW5kIGBzLVx1MDAzZXRydW5jX3NpemUgPSAwO2AgaWYgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJ3QgcHJlc2VudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBjbGVhcmx5LiBJIG5lZWQgdG8gZGlnIGludG8gYHRjZl9zYW1wbGVfaW5pdGAgaXRzZWxmIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGNvbnNpZGVyIGFueSBlZGdlIGNhc2VzIGl0IG1pZ2h0IGludHJvZHVjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjIzOjE0Ljc1Njc0NjI3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg0ODgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2Zfc2FtcGxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzYW1wbGVfcG9saWN5W1RDQV9TQU1QTEVfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTM1LVxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzY6c3RhdGljIGludCB0Y2Zfc2FtcGxlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zNy1cXHRcXHRcXHQgICBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYz0zMjE9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYy0zMjctXFx0LmR1bXBcXHQgID0gdGNmX3NhbXBsZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmM6MzI4OlxcdC5pbml0XFx0ICA9IHRjZl9zYW1wbGVfaW5pdCxcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyOS1cXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjIzOjE0LjgwNjU5OTM4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczOTE4Mzk3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkRlY2lwaGVyaW5nIGBzYCBpbiBgdGNmX3NhbXBsZV9pbml0YCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBwdWxsIHVwIGB0Y2Zfc2FtcGxlX2luaXRgIG5vdy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbmF0dXJlIG9mIGBzYC4gSXMgaXQgYSBwb2ludGVyPyBBIHN0cnVjdHVyZT8gQSBzaW1wbGUgdmFyaWFibGU/IEFuZCBlcXVhbGx5IGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2AgaXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gS25vd2luZyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSDigJMgaXMgaXQgc3RhdGljLCBvbiB0aGUgc3RhY2ssIGR5bmFtaWNhbGx5IG9uIHRoZSBoZWFwPyDigJMgd2lsbCBiZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgVENGLiBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb246IHdoYXQgaXMgdGhpcyBgc2AsIGFuZCBob3cgZG9lcyBpdCBsaXZlPyBJJ2xsIGJlIGxvb2tpbmcgdmVyeSBjbG9zZWx5IGF0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBoZXJlLiBUaGUgYW5zd2VycyB0byB0aGVzZSBxdWVzdGlvbnMgYXJlIGZvdW5kYXRpb25hbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBUQ0YgY29kZSBmdW5jdGlvbnMuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI0OjI4LjcyNDk5OTE4NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM2OlxcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbiAgMzc6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG4gIDM4OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgdTMyIGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICA0MDpcXHR7XFxuICA0MTpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9zYW1wbGVfb3BzLm5ldF9pZCk7XFxuICA0MjpcXHRcXHRib29sIGJpbmQgPSBmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfQklORDtcXG4gIDQzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9TQU1QTEVfTUFYICsgMV07XFxuICA0NDpcXHRcXHRzdHJ1Y3QgcHNhbXBsZV9ncm91cCAqcHNhbXBsZV9ncm91cDtcXG4gIDQ1OlxcdFxcdHUzMiBwc2FtcGxlX2dyb3VwX251bSwgcmF0ZSwgaW5kZXg7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgdGNmX2NoYWluICpnb3RvX2NoID0gTlVMTDtcXG4gIDQ3OlxcdFxcdHN0cnVjdCB0Y19zYW1wbGUgKnBhcm07XFxuICA0ODpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcztcXG4gIDQ5OlxcdFxcdGJvb2wgZXhpc3RzID0gZmFsc2U7XFxuICA1MDpcXHRcXHRpbnQgcmV0LCBlcnI7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdGlmICghbmxhKVxcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA1NDpcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9TQU1QTEVfTUFYLCBubGEsXFxuICA1NTpcXHRcXHRcXHRcXHRcXHRcXHQgIHNhbXBsZV9wb2xpY3ksIE5VTEwpO1xcbiAgNTY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuICA1NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHRpZiAoIXRiW1RDQV9TQU1QTEVfUEFSTVNdKVxcbiAgNjA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdHBhcm0gPSBubGFfZGF0YSh0YltUQ0FfU0FNUExFX1BBUk1TXSk7XFxuICA2MzpcXHRcXHRpbmRleCA9IHBhcm0tXFx1MDAzZWluZGV4O1xcbiAgNjQ6XFx0XFx0ZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgXFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcXG4gIDY1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAgNjY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gIDY3OlxcdFxcdGV4aXN0cyA9IGVycjtcXG4gIDY4OlxcdFxcdGlmIChleGlzdHMgXFx1MDAyNlxcdTAwMjYgYmluZClcXG4gIDY5OlxcdFxcdFxcdHJldHVybiBBQ1RfUF9CT1VORDtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKCFleGlzdHMpIHtcXG4gIDcyOlxcdFxcdFxcdHJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLFxcbiAgNzM6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2YWN0X3NhbXBsZV9vcHMsIGJpbmQsIHRydWUsIGZsYWdzKTtcXG4gIDc0OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gIDc1OlxcdFxcdFxcdFxcdHRjZl9pZHJfY2xlYW51cCh0biwgaW5kZXgpO1xcbiAgNzY6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDc3OlxcdFxcdFxcdH1cXG4gIDc4OlxcdFxcdFxcdHJldCA9IEFDVF9QX0NSRUFURUQ7XFxuICA3OTpcXHRcXHR9IGVsc2UgaWYgKCEoZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0UpKSB7XFxuICA4MDpcXHRcXHRcXHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xcbiAgODE6XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuICA4MjpcXHRcXHR9XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdGlmICghdGJbVENBX1NBTVBMRV9SQVRFXSB8fCAhdGJbVENBX1NBTVBMRV9QU0FNUExFX0dST1VQXSkge1xcbiAgODU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2FtcGxlIHJhdGUgYW5kIGdyb3VwIGFyZSByZXF1aXJlZFxcXCIpO1xcbiAgODY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gIDg3OlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9pZHI7XFxuICA4ODpcXHRcXHR9XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdGVyciA9IHRjZl9hY3Rpb25fY2hlY2tfY3RybGFjdChwYXJtLVxcdTAwM2VhY3Rpb24sIHRwLCBcXHUwMDI2Z290b19jaCwgZXh0YWNrKTtcXG4gIDkxOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAgOTI6XFx0XFx0XFx0Z290byByZWxlYXNlX2lkcjtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0cmF0ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfUkFURV0pO1xcbiAgOTU6XFx0XFx0aWYgKCFyYXRlKSB7XFxuICA5NjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJpbnZhbGlkIHNhbXBsZSByYXRlXFxcIik7XFxuICA5NzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAgOTg6XFx0XFx0XFx0Z290byBwdXRfY2hhaW47XFxuICA5OTpcXHRcXHR9XFxuIDEwMDpcXHRcXHRwc2FtcGxlX2dyb3VwX251bSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUF0pO1xcbiAxMDE6XFx0XFx0cHNhbXBsZV9ncm91cCA9IHBzYW1wbGVfZ3JvdXBfZ2V0KG5ldCwgcHNhbXBsZV9ncm91cF9udW0pO1xcbiAxMDI6XFx0XFx0aWYgKCFwc2FtcGxlX2dyb3VwKSB7XFxuIDEwMzpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxMDQ6XFx0XFx0XFx0Z290byBwdXRfY2hhaW47XFxuIDEwNTpcXHRcXHR9XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdHMgPSB0b19zYW1wbGUoKmEpO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnMtXFx1MDAzZXRjZl9sb2NrKTtcXG4gMTEwOlxcdFxcdGdvdG9fY2ggPSB0Y2ZfYWN0aW9uX3NldF9jdHJsYWN0KCphLCBwYXJtLVxcdTAwM2VhY3Rpb24sIGdvdG9fY2gpO1xcbiAxMTE6XFx0XFx0cy1cXHUwMDNlcmF0ZSA9IHJhdGU7XFxuIDExMjpcXHRcXHRzLVxcdTAwM2Vwc2FtcGxlX2dyb3VwX251bSA9IHBzYW1wbGVfZ3JvdXBfbnVtO1xcbiAxMTM6XFx0XFx0cHNhbXBsZV9ncm91cCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIocy1cXHUwMDNlcHNhbXBsZV9ncm91cCwgcHNhbXBsZV9ncm91cCxcXG4gMTE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnMtXFx1MDAzZXRjZl9sb2NrKSk7XFxuIDExNTpcXHRcXG4gMTE2OlxcdFxcdGlmICh0YltUQ0FfU0FNUExFX1RSVU5DX1NJWkVdKSB7XFxuIDExNzpcXHRcXHRcXHRzLVxcdTAwM2V0cnVuY2F0ZSA9IHRydWU7XFxuIDExODpcXHRcXHRcXHRzLVxcdTAwM2V0cnVuY19zaXplID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSk7XFxuIDExOTpcXHRcXHR9IGVsc2Uge1xcbiAxMjA6XFx0XFx0XFx0cy1cXHUwMDNldHJ1bmNhdGUgPSBmYWxzZTtcXG4gMTIxOlxcdFxcdFxcdHMtXFx1MDAzZXRydW5jX3NpemUgPSAwO1xcbiAxMjI6XFx0XFx0fVxcbiAxMjM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnMtXFx1MDAzZXRjZl9sb2NrKTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0aWYgKHBzYW1wbGVfZ3JvdXApXFxuIDEyNjpcXHRcXHRcXHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcXG4gMTI3OlxcdFxcdGlmIChnb3RvX2NoKVxcbiAxMjg6XFx0XFx0XFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdFxcdHJldHVybiByZXQ7XFxuIDEzMTpcXHRwdXRfY2hhaW46XFxuIDEzMjpcXHRcXHRpZiAoZ290b19jaClcXG4gMTMzOlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbiAxMzQ6XFx0cmVsZWFzZV9pZHI6XFxuIDEzNTpcXHRcXHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDoyOC43MjUwODEwOTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI5MTc2MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUga2V5IGFkanVzdG1lbnQgaXMgd2l0aGluIGB0Y2Zfc2FtcGxlX2luaXRgLiBJdCBzZWVtcyB0aGV5J3ZlIGltcGxlbWVudGVkIGEgY2hlY2sgdGhhdCBleHBsaWNpdGx5IHJlc2V0cyB0aGUgYHMtXHUwMDNldHJ1bmNhdGVgIGFuZCBgcy1cdTAwM2V0cnVuY19zaXplYCB2YXJpYWJsZXMgKmlmKiB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlIGlzbid0IHByb3ZpZGVkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGNydWNpYWw6IGl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBidWcgd2hlbiBhbiBleGlzdGluZyBhY3Rpb24gaXMgYmVpbmcgKnJlcGxhY2VkKiDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGBleGlzdHNgIGlzIHRydWUgYW5kIHRoZSBgVENBX0FDVF9GTEFHU19SRVBMQUNFYCBmbGFnIGlzIGFjdGl2ZS4gV2l0aG91dCB0aGlzIHJlc2V0LCB3ZSdkIGJlIHJldGFpbmluZyBvbGQgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgdmFsdWVzIGluIHRoZSBuZXcgY29uZmlndXJhdGlvbi4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvdXIuXG5cblRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtIChzcGVjaWZpY2FsbHksIHRoZSBgdGNgIGFjdGlvbnMpIGhhbmRsZXMgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoaXMgdHlwZSBvZiBtb2RpZmljYXRpb24sIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyByaWdvcm91cyBmdXp6aW5nIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIGNhdGNoIGFueSBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG92ZXJsb29rZWQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgdGhlIGBhY3Rfc2FtcGxlYCBhY3Rpb24uIFRoYXQncyB0aGUgbmV4dCBzdGVwIGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjQ6MzQuMDU0MjU5NzQzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzMwNTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9TQU1QTEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NzQyPWNvbmZpZyBORVRfQUNUX01JUlJFRFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzUxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjc1Mjpjb25maWcgTkVUX0FDVF9TQU1QTEVcXG5uZXQvc2NoZWQvS2NvbmZpZy03NTMtXFx0dHJpc3RhdGUgXFxcIlRyYWZmaWMgU2FtcGxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI0OjM0LjQyMTU2OTkwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjY0MDI4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0J3Mgc3RhcnQgYnJlYWtpbmcgdGhpcyBkb3duLlxuXG4qKlVucGFja2luZyB0aGUgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBmaWd1cmUgb3V0IHRoZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgYXQgcGxheSBoZXJlLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgYSBzdXJmYWNlLWxldmVsIHVuZGVyc3RhbmRpbmc7IEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBlbGVtZW50cyB0aGF0IHVuZGVycGluIHRoZSBzaXR1YXRpb24uIFdoYXQgYXJlIHRoZSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBkcml2ZSB0aGlzPyBBcmUgdGhlcmUgYW55IGhpZGRlbiBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkPyBNeSBmb2N1cyBpcyB0byBjcmVhdGUgYSBzdHJ1Y3R1cmUgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgdG8gZXhwbGFpbiB0aGlzIHByb2JsZW0uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLCBhbmQgdGhhdCdzIHRoZSBvbmx5IHBsYWNlIHRvIHN0YXJ0IHRvIGdvIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI0OjM3LjY4Nzk3NTc5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTI6XFx0Y29uZmlnIE5FVF9BQ1RfU0FNUExFXFxuIDc1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBTYW1wbGluZ1xcXCJcXG4gNzU0OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzU1OlxcdFxcdHNlbGVjdCBQU0FNUExFXFxuIDc1NjpcXHRcXHRoZWxwXFxuIDc1NzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0IHNhbXBsaW5nIHRjIGFjdGlvbi4gVGhlIHBhY2tldCBzYW1wbGVcXG4gNzU4OlxcdFxcdCAgYWN0aW9uIGNvbnNpc3RzIG9mIHN0YXRpc3RpY2FsbHkgY2hvb3NpbmcgcGFja2V0cyBhbmQgc2FtcGxpbmdcXG4gNzU5OlxcdFxcdCAgdGhlbSB1c2luZyB0aGUgcHNhbXBsZSBtb2R1bGUuXFxuIDc2MDpcXHRcXG4gNzYxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA3NjI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NhbXBsZS5cXG4gNzYzOlxcdFxcbiA3NjQ6XFx0Y29uZmlnIE5FVF9BQ1RfTkFUXFxuIDc2NTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3RhdGVsZXNzIE5BVFxcXCJcXG4gNzY2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzY3OlxcdFxcdGhlbHBcXG4gNzY4OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBkbyBzdGF0ZWxlc3MgTkFUIG9uIElQdjQgcGFja2V0cy4gIFlvdSBzaG91bGQgdXNlXFxuIDc2OTpcXHRcXHQgIG5ldGZpbHRlciBmb3IgTkFUIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDozNy42ODgwNzQwNDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY2MDE0NjYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBOZXR3b3JrIEFjdGl2YXRpb24gYW5kIFNhbXBsaW5nIFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgYWN0aXZhdGlvbiBhbmQgY2xhc3NpZmljYXRpb24gYWN0aXZpdHkgbm93LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBgTkVUX0FDVF9TQU1QTEVgIGFuZCBgTkVUX0NMU19BQ1RgIGRlZmluZWQuIFRob3NlIGFyZSBjcml0aWNhbC4gQW5kIEkgc2VlIHRoYXQgYFBTQU1QTEVgIGhhcyBiZWVuIHNlbGVjdGVkOyB0aGF0J3MgZ29vZC4gTm93LCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIEkgc2hvdWxkIHJlYWxseSB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19BQ1RgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgZXZlcnl0aGluZyB0aGF0ICppdCogZGVwZW5kcyBvbiBpcyBhbHNvIHNldCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBjb25mbGljdHMgb3IgbWlzc2luZyBwaWVjZXMgdGhhdCB3aWxsIGJpdGUgbWUgbGF0ZXIuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDo0Ny4zNDgyMjMzNDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTk0Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNDo0Ny4zOTYyMjY0MjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0OTIxNTAzOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTkVUX0NMU19BQ1QgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgY2xlYXI6IHdlJ3JlIGRpdmluZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9DTFNfQUNUYC4gR2l2ZW4gdGhhdCwgSSBpbW1lZGlhdGVseSBzdGFydCBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgYXJlYXMgb2YgY29uY2Vybi4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbW9kdWxlcz8gVXNlcnNwYWNlIHV0aWxpdGllcz8gV2hhdCdzIHRoZSBjb250ZXh0IC0gYXJlIHdlIGxvb2tpbmcgYXQgYSBzcGVjaWZpYyBuZXR3b3JraW5nIHN0YWNrLCBvciBhIG1vcmUgZ2VuZXJhbCBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBzY29wZS5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyB0byBuYXZpZ2F0ZSBhIGRlcGVuZGVuY3kgdHJlZS4gVW5kZXJzdGFuZGluZyB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleTogYXJlIHdlIGRlYWxpbmcgd2l0aCBmdW5jdGlvbmFsaXR5LCBoYXJkd2FyZSBzdXBwb3J0LCBvciBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBkZXBlbmRlbmN5PyBTZWN1cml0eT8gUGVyZm9ybWFuY2U/IFJlc291cmNlIGNvbnN1bXB0aW9uPyBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIG1peCBvZiBkaXJlY3QgYW5kIGluZGlyZWN0IGxpbmtzIOKAkyBjYXNjYWRpbmcgZGVwZW5kZW5jaWVzIGFyZSBhbG1vc3QgaW5ldml0YWJsZSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuIEknbGwgbmVlZCB0byB3YXRjaCBvdXQgZm9yIHBvdGVudGlhbCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYXMgd2VsbCwgYWx0aG91Z2ggdGhlIGtlcm5lbCB0cmllcyBpdHMgYmVzdCB0byBwcmV2ZW50IHRoaXMsIG9mIGNvdXJzZS5cblxuTXkgaW1tZWRpYXRlIGdvYWxzIGFyZSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCB2dWxuZXJhYmlsaXRpZXMsIG9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgYXJjaGl0ZWN0dXJhbCBmbGF3cywgb3IgcG90ZW50aWFsIHBvaW50cyBvZiBmcmFnaWxpdHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbmV0d29yayBlbGVtZW50cy4gSSdtIGFsc28gcHJlcGFyaW5nIHRvIG1hcCBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgb3IgcnVudGltZSBvcHRpb25zLiBUaGUgZGV0YWlscyBpbiB0aGUgYWN0dWFsIGRlcGVuZGVuY3kgZ3JhcGggYXJlIHdoYXQgdHJ1bHkgbWF0dGVycyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTg1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI2OjUyLjMxNzczNDE4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDI6XFx0Y29uZmlnIE5FVF9DTFNfQUNUXFxuIDcwMzpcXHRcXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcbiA3MDQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNzA1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXFxuIDcwODpcXHRcXHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXFxuIDcwOTpcXHRcXHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cXG4gNzEwOlxcdFxcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXFxuIDcxMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjY6NTIuMzE3ODIzMTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI2MzI3MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVENGIFNhbXBsaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gemVyb2luZyBpbiBvbiB0aGUgY29yZSBvZiB0aGlzLiBgTkVUX0FDVF9TQU1QTEVgIGFuZCBgTkVUX0NMU19BQ1RgIOKAkyB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbGVtZW50cyBoZXJlLiBUaGV5J3JlIGxpa2VseSB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlcyBmb3Igc2FtcGxpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIHdpdGhpbiB0aGlzIG5ldHdvcmtpbmcgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBzYW1wbGluZyBtZWNoYW5pc20uIEl04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgYWN0aW9uIGZ1bmN0aW9uPyBXaGF0IGFib3V0IGB0Y2Zfc2FtcGxlX2FjdGA/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgYWN0aW9uIG9yIHByb2Nlc3NpbmcgY29tcG9uZW50IHRoYXQgZGlyZWN0bHkgd29ya3Mgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIEdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUgaXMga2V5IGZvciBhIHRydWx5IGVmZmVjdGl2ZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6MjY6NTUuNjEwNDU5MjExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc1NDc3MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX3NhbXBsZV9hY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTE1MT1zdGF0aWMgYm9vbCB0Y2Zfc2FtcGxlX2Rldl9va19wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTE2Ni1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jOjE2NzpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NhbXBsZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTE2OC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jPTMyMT1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X3NhbXBsZV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyNC1cXHQub3duZXJcXHQgID0gVEhJU19NT0RVTEUsXFxubmV0L3NjaGVkL2FjdF9zYW1wbGUuYzozMjU6XFx0LmFjdFxcdCAgPSB0Y2Zfc2FtcGxlX2FjdCxcXG5uZXQvc2NoZWQvYWN0X3NhbXBsZS5jLTMyNi1cXHQuc3RhdHNfdXBkYXRlID0gdGNmX3NhbXBsZV9zdGF0c191cGRhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI2OjU2LjAwODAxMTg2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc4MzI1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipJbml0aWFsIEFjdGlvbiBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbiBhbmQgQ29udGV4dHVhbGl6YXRpb24qKlxuXG5SaWdodCwgc28sIEkndmUgY29uZmlybWVkIHRoYXQgYHRjZl9zYW1wbGVfYWN0YCBpcyBpbmRlZWQgdGhlIGFjdGlvbiBmdW5jdGlvbi4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MgZ2V0IHRob3NlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBhcmUgY29ycmVjdGx5IGFkZGVkIHRvIHRoYXQuIEl0J3MgY3J1Y2lhbCBmb3IgdGhlIHN5c3RlbSB0byByZWNvZ25pemUgYW5kIGhhbmRsZSB0aGVtIHByb3Blcmx5LlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gcmV2aXNpdCBgTkVUX0FDVF9TQU1QTEVgLiBJJ20gZ29pbmcgdG8gcnVuIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAsIHdoaWNoIGlzIG5lc3RlZCB1bmRlciBgTkVUX1NDSEVEYC4gU28sIHRoZSBzdHJ1Y3R1cmUgaXMgY2xlYXIuIE5vIHJlZCBmbGFncyBhdCB0aGlzIHN0YWdlLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGRlcGVuZGVuY3kgc3RydWN0dXJlIGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgaW50ZW5kZWQgZmxvdyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkVUX0FDVF9TQU1QTEVgIGRvZXNuJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBzdXBwb3J0aW5nIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzowMC44ODYzNDExNTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODMyMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkVUX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzowMC45MzUxODIwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzAyMzY1NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIHRoZSBuZWVkIGZvciBgTkVUX1NDSEVEYCBoZXJlLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBzY29wZS4gTG9va2luZyBhdCB0aGUgY29uZmlncywgd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGFuZCBgTkVUX0FDVF9TQU1QTEVgLiBUaGUgcHJpbWFyeSBmb2N1cyBzZWVtcyB0byBiZSBvbiB0aG9zZSBgdGNmX3NhbXBsZV9pbml0YCBhbmQgYHRjZl9zYW1wbGVfYWN0YCBzeW1ib2xzLlxuXG5UaGUgZ2lzdCBvZiBpdCBpcyBhIGJ1ZyBmaXggaW4gYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgLiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGZsYXcgd2l0aGluIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHRydW5jYXRpb24gc2V0dGluZ3MgYXJlIGhhbmRsZWQgd2hlbiB1cGRhdGluZyBhIHRyYWZmaWMgY29udHJvbCAodGMpIHNhbXBsZSBhY3Rpb24uIEl0IHNlZW1zIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXNuJ3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBvbGQgdHJ1bmNhdGlvbiB2YWx1ZXMgd291bGQgcGVyc2lzdCwgd2hpY2ggaXMgY2xlYXJseSB1bmludGVuZGVkLiBUaGlzIHdvdWxkIGRlZmluaXRlbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIGluZm9ybWF0aW9uIG9yIGNhdXNlIG90aGVyIGlzc3VlcywgbWFraW5nIHRoaXMgYSBjcml0aWNhbCBmaXguXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgbGV2ZWwsIGNvbmNlcm5pbmcgdGMgYWN0aW9ucywgYW5kIGlzIGV4cG9zZWQgdmlhIG5ldGxpbmsuIEdpdmVuIHRoaXMgdXNlcnNwYWNlIGFjY2Vzc2liaWxpdHksIEknZCBzYXkgdGhpcyBhcmVhIG5lZWRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmVuJ3QgaW50cm9kdWNlZCBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciByZWdyZXNzaW9ucy5cblxuQWxyaWdodCwgbGV0J3MgcHJvY2VlZCB3aXRoIHRoZSBzZXQtcmVzdWx0cyBjYWxsLiBUaW1lIHRvIGV2YWx1YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjczLCJPdXRwdXRUb2tlbnMiOjE3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzoxMC42Mzc1NTE4NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODc5MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0FDVF9TQU1QTEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2Zfc2FtcGxlX2luaXRcIixcbiAgICBcInRjZl9zYW1wbGVfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9zYW1wbGVfaW5pdGAgaW4gYG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNgIHRvIGV4cGxpY2l0bHkgcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgd2hlbiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBub3QgcHJvdmlkZWQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHRjIHNhbXBsZSBhY3Rpb24gd291bGQgaW5jb3JyZWN0bHkgcmV0YWluIHRoZSBvbGQgdHJ1bmNhdGlvbiBzZXR0aW5ncy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgc2NoZWR1bGluZyBzdWJzeXN0ZW0gKHRjIGFjdGlvbnMpIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfU0FNUExFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3NhbXBsZV9pbml0XCIsXG4gICAgXCJ0Y2Zfc2FtcGxlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2Zfc2FtcGxlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYCB0byBleHBsaWNpdGx5IHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIHdoZW4gYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgaXMgbm90IHByb3ZpZGVkLiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIHJlcGxhY2luZyBhbiBleGlzdGluZyB0YyBzYW1wbGUgYWN0aW9uIHdvdWxkIGluY29ycmVjdGx5IHJldGFpbiB0aGUgb2xkIHRydW5jYXRpb24gc2V0dGluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIHNjaGVkdWxpbmcgc3Vic3lzdGVtICh0YyBhY3Rpb25zKSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6Mjc6MTAuNzI2MzUzNDM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NDY0NTUzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzoxMC43MjY5NzE4MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NTQ1ODI2MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2dpYyBidWcgaW4gYHRjZl9zYW1wbGVfaW5pdGAgd2hlcmUgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGB0Y2Agc2FtcGxlIGFjdGlvbiBmYWlscyB0byByZXNldCB0aGUgYHRydW5jYXRlYCBhbmQgYHRydW5jX3NpemVgIGZpZWxkcyBpZiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gb21pdHMgdGhlIGBUQ0FfU0FNUExFX1RSVU5DX1NJWkVgIGF0dHJpYnV0ZS4gVGhlIGFjdGlvbiBzdHJ1Y3R1cmUgaXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgaW4gYHRjZl9pZHJfY3JlYXRlYCwgc28gdGhlIG1lbW9yeSBpcyBhbHdheXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYWJvdXQgcmV0YWluaW5nIHN0YWxlIHN0YXRlIGR1cmluZyBhbiB1cGRhdGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGlzIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzIGluIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTM0OThlZDBhZGY2OTMxYWZlZGFkMWNkNjhkY2UzOGI2NmI0MzY5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6MjM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X3NhbXBsZS5jIGIvbmV0L3NjaGVkL2FjdF9zYW1wbGUuY1xuaW5kZXggMmNlYjRkMTQxYjcxMy4uMmJkYzdhMGViNmQ2OCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbisrKyBiL25ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcbkBAIC0xMTYsNiArMTE2LDkgQEAgc3RhdGljIGludCB0Y2Zfc2FtcGxlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkge1xuIFx0XHRzLVx1MDAzZXRydW5jYXRlID0gdHJ1ZTtcbiBcdFx0cy1cdTAwM2V0cnVuY19zaXplID0gbmxhX2dldF91MzIodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRzLVx1MDAzZXRydW5jYXRlID0gZmFsc2U7XG4rXHRcdHMtXHUwMDNldHJ1bmNfc2l6ZSA9IDA7XG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzLVx1MDAzZXRjZl9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI3OjEwLjcyNjk3MzY1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk1NjE3Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG5ldC9zY2hlZC9hY3Rfc2FtcGxlLmMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvYWN0X3NhbXBsZS5jYC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgdGNmX3NhbXBsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgb3JpZ2luYWwgY29kZSBvbmx5IHNldHMgYHMtXHUwMDNldHJ1bmNhdGVgIGFuZCBgcy1cdTAwM2V0cnVuY19zaXplYCBpZiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpcyBwcmVzZW50IGluIHRoZSB0YWJsZSBgdGJgLiBUaGlzIG5ldyBjb2RlIGFkZHMgYSBkZWZhdWx0IGluaXRpYWxpemF0aW9uOyBzbywgaWYgdGhlIGF0dHJpYnV0ZSBpcyAqbm90KiBwcmVzZW50LCBgcy1cdTAwM2V0cnVuY2F0ZWAgaXMgZXhwbGljaXRseSBzZXQgdG8gYGZhbHNlYCBhbmQgYHMtXHUwMDNldHJ1bmNfc2l6ZWAgaXMgc2V0IHRvIGAwYC5cblxuTm93LCBteSBpbml0aWFsIHJlYWN0aW9uIGlzLCB3YWl0IGEgc2Vjb25kLi4uIGBzYCBpcyBhIGBzdHJ1Y3QgdGNmX3NhbXBsZWAsIHJpZ2h0PyBNeSBndXQgdGVsbHMgbWUgdGhhdCBgc2Agc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoaXMgcGF0Y2ggaXMgcmVkdW5kYW50IGFuZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIG92ZXJoZWFkLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGB0Y2Zfc2FtcGxlX2luaXRgIGZ1bmN0aW9uIHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgYWxyZWFkeSB6ZXJvaW5nIHRoZSBzdHJ1Y3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzo1OC42ODMxNDk4MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3Rfc2FtcGxlX29wcy5uZXRfaWQpO1xcbiAgNDI6XFx0XFx0Ym9vbCBiaW5kID0gZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX0JJTkQ7XFxuICA0MzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfU0FNUExFX01BWCArIDFdO1xcbiAgNDQ6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XFxuICA0NTpcXHRcXHR1MzIgcHNhbXBsZV9ncm91cF9udW0sIHJhdGUsIGluZGV4O1xcbiAgNDY6XFx0XFx0c3RydWN0IHRjZl9jaGFpbiAqZ290b19jaCA9IE5VTEw7XFxuICA0NzpcXHRcXHRzdHJ1Y3QgdGNfc2FtcGxlICpwYXJtO1xcbiAgNDg6XFx0XFx0c3RydWN0IHRjZl9zYW1wbGUgKnM7XFxuICA0OTpcXHRcXHRib29sIGV4aXN0cyA9IGZhbHNlO1xcbiAgNTA6XFx0XFx0aW50IHJldCwgZXJyO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRpZiAoIW5sYSlcXG4gIDUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNTQ6XFx0XFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfU0FNUExFX01BWCwgbmxhLFxcbiAgNTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzYW1wbGVfcG9saWN5LCBOVUxMKTtcXG4gIDU2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNTc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0aWYgKCF0YltUQ0FfU0FNUExFX1BBUk1TXSlcXG4gIDYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRwYXJtID0gbmxhX2RhdGEodGJbVENBX1NBTVBMRV9QQVJNU10pO1xcbiAgNjM6XFx0XFx0aW5kZXggPSBwYXJtLVxcdTAwM2VpbmRleDtcXG4gIDY0OlxcdFxcdGVyciA9IHRjZl9pZHJfY2hlY2tfYWxsb2ModG4sIFxcdTAwMjZpbmRleCwgYSwgYmluZCk7XFxuICA2NTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gIDY2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA2NzpcXHRcXHRleGlzdHMgPSBlcnI7XFxuICA2ODpcXHRcXHRpZiAoZXhpc3RzIFxcdTAwMjZcXHUwMDI2IGJpbmQpXFxuICA2OTpcXHRcXHRcXHRyZXR1cm4gQUNUX1BfQk9VTkQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGlmICghZXhpc3RzKSB7XFxuICA3MjpcXHRcXHRcXHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSxcXG4gIDczOlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmFjdF9zYW1wbGVfb3BzLCBiaW5kLCB0cnVlLCBmbGFncyk7XFxuICA3NDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuICA3NTpcXHRcXHRcXHRcXHR0Y2ZfaWRyX2NsZWFudXAodG4sIGluZGV4KTtcXG4gIDc2OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3NzpcXHRcXHRcXHR9XFxuICA3ODpcXHRcXHRcXHRyZXQgPSBBQ1RfUF9DUkVBVEVEO1xcbiAgNzk6XFx0XFx0fSBlbHNlIGlmICghKGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19SRVBMQUNFKSkge1xcbiAgODA6XFx0XFx0XFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcXG4gIDgxOlxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHRpZiAoIXRiW1RDQV9TQU1QTEVfUkFURV0gfHwgIXRiW1RDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUF0pIHtcXG4gIDg1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInNhbXBsZSByYXRlIGFuZCBncm91cCBhcmUgcmVxdWlyZWRcXFwiKTtcXG4gIDg2OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuICA4NzpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfaWRyO1xcbiAgODg6XFx0XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRlcnIgPSB0Y2ZfYWN0aW9uX2NoZWNrX2N0cmxhY3QocGFybS1cXHUwMDNlYWN0aW9uLCB0cCwgXFx1MDAyNmdvdG9fY2gsIGV4dGFjayk7XFxuICA5MTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gIDkyOlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9pZHI7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHJhdGUgPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1JBVEVdKTtcXG4gIDk1OlxcdFxcdGlmICghcmF0ZSkge1xcbiAgOTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiaW52YWxpZCBzYW1wbGUgcmF0ZVxcXCIpO1xcbiAgOTc6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gIDk4OlxcdFxcdFxcdGdvdG8gcHV0X2NoYWluO1xcbiAgOTk6XFx0XFx0fVxcbiAxMDA6XFx0XFx0cHNhbXBsZV9ncm91cF9udW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfU0FNUExFX1BTQU1QTEVfR1JPVVBdKTtcXG4gMTAxOlxcdFxcdHBzYW1wbGVfZ3JvdXAgPSBwc2FtcGxlX2dyb3VwX2dldChuZXQsIHBzYW1wbGVfZ3JvdXBfbnVtKTtcXG4gMTAyOlxcdFxcdGlmICghcHNhbXBsZV9ncm91cCkge1xcbiAxMDM6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTA0OlxcdFxcdFxcdGdvdG8gcHV0X2NoYWluO1xcbiAxMDU6XFx0XFx0fVxcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRzID0gdG9fc2FtcGxlKCphKTtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDExMDpcXHRcXHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cXHUwMDNlYWN0aW9uLCBnb3RvX2NoKTtcXG4gMTExOlxcdFxcdHMtXFx1MDAzZXJhdGUgPSByYXRlO1xcbiAxMTI6XFx0XFx0cy1cXHUwMDNlcHNhbXBsZV9ncm91cF9udW0gPSBwc2FtcGxlX2dyb3VwX251bTtcXG4gMTEzOlxcdFxcdHBzYW1wbGVfZ3JvdXAgPSByY3VfcmVwbGFjZV9wb2ludGVyKHMtXFx1MDAzZXBzYW1wbGVfZ3JvdXAsIHBzYW1wbGVfZ3JvdXAsXFxuIDExNDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jaykpO1xcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAodGJbVENBX1NBTVBMRV9UUlVOQ19TSVpFXSkge1xcbiAxMTc6XFx0XFx0XFx0cy1cXHUwMDNldHJ1bmNhdGUgPSB0cnVlO1xcbiAxMTg6XFx0XFx0XFx0cy1cXHUwMDNldHJ1bmNfc2l6ZSA9IG5sYV9nZXRfdTMyKHRiW1RDQV9TQU1QTEVfVFJVTkNfU0laRV0pO1xcbiAxMTk6XFx0XFx0fSBlbHNlIHtcXG4gMTIwOlxcdFxcdFxcdHMtXFx1MDAzZXRydW5jYXRlID0gZmFsc2U7XFxuIDEyMTpcXHRcXHRcXHRzLVxcdTAwM2V0cnVuY19zaXplID0gMDtcXG4gMTIyOlxcdFxcdH1cXG4gMTIzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdGlmIChwc2FtcGxlX2dyb3VwKVxcbiAxMjY6XFx0XFx0XFx0cHNhbXBsZV9ncm91cF9wdXQocHNhbXBsZV9ncm91cCk7XFxuIDEyNzpcXHRcXHRpZiAoZ290b19jaClcXG4gMTI4OlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMzE6XFx0cHV0X2NoYWluOlxcbiAxMzI6XFx0XFx0aWYgKGdvdG9fY2gpXFxuIDEzMzpcXHRcXHRcXHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcXG4gMTM0OlxcdHJlbGVhc2VfaWRyOlxcbiAxMzU6XFx0XFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcXG4gMTM2OlxcdFxcdHJldHVybiBlcnI7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdHN0YXRpYyB2b2lkIHRjZl9zYW1wbGVfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICphKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyNzo1OC42ODMyNDMyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTYyNjM4MTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0Y2Zfc2FtcGxlYCBBY3Rpb24gSW5pdGlhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHMgYW4gYGVsc2VgIGJyYW5jaCB0byBpbml0aWFsaXplIGBzLVx1MDAzZXRydW5jYXRlYCBhbmQgYHMtXHUwMDNldHJ1bmNfc2l6ZWAgd2hlbiBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBpc24ndCBwcmVzZW50IGluIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgaG93IGBzYCBpcyBhbGxvY2F0ZWQuIEkgcmVtZW1iZXIgdGhhdCBgc2AgaXMgYWxsb2NhdGVkIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHdoaWNoIGNhbGxzIGBremFsbG9jYCBvciBzaW1pbGFyLCBzbyBpdCdzICp6ZXJvLWluaXRpYWxpemVkKiB3aGVuIGNyZWF0ZWQuXG5cblNvLCB3aHkgdGhlIHBhdGNoPyBUaGF04oCZcyB0aGUga2V5LiBUaGVuIGl0IGhpdHMgbWUhIGB0Y2Zfc2FtcGxlX2luaXRgIGNhbiBiZSB1c2VkIHRvICpyZXBsYWNlKiBhbiBleGlzdGluZyBhY3Rpb24uIE9rYXksIHRoZSBpbXBvcnRhbnQgY29kZSBzbmlwcGV0IGlzOlxuXG5gYGBjXG5cdGlmICghZXhpc3RzKSB7XG5cdFx0cmV0ID0gdGNmX2lkcl9jcmVhdGUodG4sIGluZGV4LCBlc3QsIGEsXG5cdFx0XHRcdCAgICAgXHUwMDI2YWN0X3NhbXBsZV9vcHMsIGJpbmQsIHRydWUsIGZsYWdzKTtcbi4uLlxuXHR9IGVsc2UgaWYgKCEoZmxhZ3MgXHUwMDI2IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRSkpIHtcblx0XHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xuXHRcdHJldHVybiAtRUVYSVNUO1xuXHR9XG5gYGBcblxuSWYgdGhlIGFjdGlvbiBhbHJlYWR5ICpleGlzdHMqIGFuZCBgVENBX0FDVF9GTEFHU19SRVBMQUNFYCBpcyBzZXQsIGl0IHVwZGF0ZXMgdGhlIGV4aXN0aW5nIGFjdGlvbiBgc2AuIFRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSBsaWVzLiBJZiB0aGUgb2xkIGFjdGlvbiBoYWQgYHMtXHUwMDNldHJ1bmNhdGUgPSB0cnVlYCBhbmQgYHMtXHUwMDNldHJ1bmNfc2l6ZSA9IFhgLCBhbmQgdGhlIG5ldyBuZXRsaW5rIG1lc3NhZ2UgKmRvZXNuJ3QqIHByb3ZpZGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAsIHRoZSBvbGQgdmFsdWVzIHdvdWxkIGJlIHJldGFpbmVkISBUaGlzIHBhdGNoIGVzc2VudGlhbGx5IHJlc2V0cyBgcy1cdTAwM2V0cnVuY2F0ZWAgYW5kIGBzLVx1MDAzZXRydW5jX3NpemVgIHRvIGBmYWxzZWAgYW5kIGAwYCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXNuJ3QgcHJvdmlkZWQsIHdoaWNoIGZpeGVzIHRoZSBmYWlsdXJlIHRvIGNsZWFyIHRoZSB0cnVuY2F0aW9uIHNldHRpbmdzIHdoZW4gcmVwbGFjaW5nIGFuIGFjdGlvbi5cblxuU28sIGlzIHRoaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU/IE5vLCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgYnkgYWxsb2NhdGlvbi4gSG93ZXZlciwgdGhpcyBpcyBhIGJ1ZyB3aGVyZSByZXBsYWNpbmcgYSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGZhaWxzIHRvIGNsZWFyIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcHJldmlvdXMgYWN0aW9uLlxuXG5Eb2VzIHRoaXMgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGl0IGp1c3QgcmV1c2VzIG9sZCwgcG90ZW50aWFsbHkgc3RhbGUsIHZhbHVlcy4gRG9lcyBpdCBjYXVzZSBhbiBpbmZvcm1hdGlvbiBsZWFrPyBOb3QgZGlyZWN0bHksIGl0J3MganVzdCBhIGxvZ2ljIGJ1ZyB3aGVyZSBhIGZpZWxkIGlzbid0IGNsZWFyZWQuXG5cblRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrIGlzLCBhcmUgYHMtXHUwMDNldHJ1bmNhdGVgIG9yIGBzLVx1MDAzZXRydW5jX3NpemVgIHVzZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcz8gTG9va3MgbGlrZSB0aGV5IGFyZSB1c2VkIGluIGB0Y2Zfc2FtcGxlX2FjdGAgKG9yIHNpbWlsYXIpLiBUaGF0IHdpbGwgYmUgd29ydGggY2hlY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyODoxMC4zMDk2Mjc0NjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3Rfc2FtcGxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHR7XFxuIDE0MTpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcXG4gMTQyOlxcdFxcdHN0cnVjdCBwc2FtcGxlX2dyb3VwICpwc2FtcGxlX2dyb3VwO1xcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQvKiBsYXN0IHJlZmVyZW5jZSB0byBhY3Rpb24sIG5vIG5lZWQgdG8gbG9jayAqL1xcbiAxNDU6XFx0XFx0cHNhbXBsZV9ncm91cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy1cXHUwMDNlcHNhbXBsZV9ncm91cCwgMSk7XFxuIDE0NjpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHMtXFx1MDAzZXBzYW1wbGVfZ3JvdXAsIE5VTEwpO1xcbiAxNDc6XFx0XFx0aWYgKHBzYW1wbGVfZ3JvdXApXFxuIDE0ODpcXHRcXHRcXHRwc2FtcGxlX2dyb3VwX3B1dChwc2FtcGxlX2dyb3VwKTtcXG4gMTQ5OlxcdH1cXG4gMTUwOlxcdFxcbiAxNTE6XFx0c3RhdGljIGJvb2wgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxNTI6XFx0e1xcbiAxNTM6XFx0XFx0c3dpdGNoIChkZXYtXFx1MDAzZXR5cGUpIHtcXG4gMTU0OlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDpcXG4gMTU1OlxcdFxcdGNhc2UgQVJQSFJEX1RVTk5FTDY6XFxuIDE1NjpcXHRcXHRjYXNlIEFSUEhSRF9TSVQ6XFxuIDE1NzpcXHRcXHRjYXNlIEFSUEhSRF9JUEdSRTpcXG4gMTU4OlxcdFxcdGNhc2UgQVJQSFJEX0lQNkdSRTpcXG4gMTU5OlxcdFxcdGNhc2UgQVJQSFJEX1ZPSUQ6XFxuIDE2MDpcXHRcXHRjYXNlIEFSUEhSRF9OT05FOlxcbiAxNjE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNjI6XFx0XFx0ZGVmYXVsdDpcXG4gMTYzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAxNjQ6XFx0XFx0fVxcbiAxNjU6XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHRUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX3NhbXBsZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTY4OlxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcylcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdFxcdHN0cnVjdCB0Y2Zfc2FtcGxlICpzID0gdG9fc2FtcGxlKGEpO1xcbiAxNzI6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKnBzYW1wbGVfZ3JvdXA7XFxuIDE3MzpcXHRcXHR1OCBjb29raWVfZGF0YVtUQ19DT09LSUVfTUFYX1NJWkVdO1xcbiAxNzQ6XFx0XFx0c3RydWN0IHBzYW1wbGVfbWV0YWRhdGEgbWQgPSB7fTtcXG4gMTc1OlxcdFxcdHN0cnVjdCB0Y19jb29raWUgKnVzZXJfY29va2llO1xcbiAxNzY6XFx0XFx0aW50IHJldHZhbDtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0dGNmX2xhc3R1c2VfdXBkYXRlKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfdG0pO1xcbiAxNzk6XFx0XFx0YnN0YXRzX3VwZGF0ZSh0aGlzX2NwdV9wdHIocy1cXHUwMDNlY29tbW9uLmNwdV9ic3RhdHMpLCBza2IpO1xcbiAxODA6XFx0XFx0cmV0dmFsID0gUkVBRF9PTkNFKHMtXFx1MDAzZXRjZl9hY3Rpb24pO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRwc2FtcGxlX2dyb3VwID0gcmN1X2RlcmVmZXJlbmNlX2JoKHMtXFx1MDAzZXBzYW1wbGVfZ3JvdXApO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHQvKiByYW5kb21seSBzYW1wbGUgcGFja2V0cyBhY2NvcmRpbmcgdG8gcmF0ZSAqL1xcbiAxODU6XFx0XFx0aWYgKHBzYW1wbGVfZ3JvdXAgXFx1MDAyNlxcdTAwMjYgKGdldF9yYW5kb21fdTMyX2JlbG93KHMtXFx1MDAzZXJhdGUpID09IDApKSB7XFxuIDE4NjpcXHRcXHRcXHRpZiAoIXNrYl9hdF90Y19pbmdyZXNzKHNrYikpIHtcXG4gMTg3OlxcdFxcdFxcdFxcdG1kLmluX2lmaW5kZXggPSBza2ItXFx1MDAzZXNrYl9paWY7XFxuIDE4ODpcXHRcXHRcXHRcXHRtZC5vdXRfaWZpbmRleCA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4O1xcbiAxODk6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTkwOlxcdFxcdFxcdFxcdG1kLmluX2lmaW5kZXggPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0Lyogb24gaW5ncmVzcywgdGhlIG1hYyBoZWFkZXIgZ2V0cyBwb3BwZWQsIHNvIHB1c2ggaXQgYmFjayAqL1xcbiAxOTQ6XFx0XFx0XFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikgXFx1MDAyNlxcdTAwMjYgdGNmX3NhbXBsZV9kZXZfb2tfcHVzaChza2ItXFx1MDAzZWRldikpXFxuIDE5NTpcXHRcXHRcXHRcXHRza2JfcHVzaChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTk4OlxcdFxcdFxcdHVzZXJfY29va2llID0gcmN1X2RlcmVmZXJlbmNlKGEtXFx1MDAzZXVzZXJfY29va2llKTtcXG4gMTk5OlxcdFxcdFxcdGlmICh1c2VyX2Nvb2tpZSkge1xcbiAyMDA6XFx0XFx0XFx0XFx0bWVtY3B5KGNvb2tpZV9kYXRhLCB1c2VyX2Nvb2tpZS1cXHUwMDNlZGF0YSxcXG4gMjAxOlxcdFxcdFxcdFxcdCAgICAgICB1c2VyX2Nvb2tpZS1cXHUwMDNlbGVuKTtcXG4gMjAyOlxcdFxcdFxcdFxcdG1kLnVzZXJfY29va2llID0gY29va2llX2RhdGE7XFxuIDIwMzpcXHRcXHRcXHRcXHRtZC51c2VyX2Nvb2tpZV9sZW4gPSB1c2VyX2Nvb2tpZS1cXHUwMDNlbGVuO1xcbiAyMDQ6XFx0XFx0XFx0fVxcbiAyMDU6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdFxcdG1kLnRydW5jX3NpemUgPSBzLVxcdTAwM2V0cnVuY2F0ZSA/IHMtXFx1MDAzZXRydW5jX3NpemUgOiBza2ItXFx1MDAzZWxlbjtcXG4gMjA4OlxcdFxcdFxcdHBzYW1wbGVfc2FtcGxlX3BhY2tldChwc2FtcGxlX2dyb3VwLCBza2IsIHMtXFx1MDAzZXJhdGUsIFxcdTAwMjZtZCk7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpIFxcdTAwMjZcXHUwMDI2IHRjZl9zYW1wbGVfZGV2X29rX3B1c2goc2tiLVxcdTAwM2VkZXYpKVxcbiAyMTE6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBza2ItXFx1MDAzZW1hY19sZW4pO1xcbiAyMTI6XFx0XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAyMTU6XFx0fVxcbiAyMTY6XFx0XFxuIDIxNzpcXHRzdGF0aWMgdm9pZCB0Y2Zfc2FtcGxlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgdGNfYWN0aW9uICphLCB1NjQgYnl0ZXMsIHU2NCBwYWNrZXRzLFxcbiAyMTg6XFx0XFx0XFx0XFx0XFx0ICAgIHU2NCBkcm9wcywgdTY0IGxhc3R1c2UsIGJvb2wgaHcpXFxuIDIxOTpcXHR7XFxuIDIyMDpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcXG4gMjIxOlxcdFxcdHN0cnVjdCB0Y2ZfdCAqdG0gPSBcXHUwMDI2cy1cXHUwMDNldGNmX3RtO1xcbiAyMjI6XFx0XFxuIDIyMzpcXHRcXHR0Y2ZfYWN0aW9uX3VwZGF0ZV9zdGF0cyhhLCBieXRlcywgcGFja2V0cywgZHJvcHMsIGh3KTtcXG4gMjI0OlxcdFxcdHRtLVxcdTAwM2VsYXN0dXNlID0gbWF4X3QodTY0LCB0bS1cXHUwMDNlbGFzdHVzZSwgbGFzdHVzZSk7XFxuIDIyNTpcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdHN0YXRpYyBpbnQgdGNmX3NhbXBsZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuIDIyODpcXHRcXHRcXHRcXHQgICBpbnQgYmluZCwgaW50IHJlZilcXG4gMjI5OlxcdHtcXG4gMjMwOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XFxuIDIzMTpcXHRcXHRzdHJ1Y3QgdGNmX3NhbXBsZSAqcyA9IHRvX3NhbXBsZShhKTtcXG4gMjMyOlxcdFxcdHN0cnVjdCB0Y19zYW1wbGUgb3B0ID0ge1xcbiAyMzM6XFx0XFx0XFx0LmluZGV4ICAgICAgPSBzLVxcdTAwM2V0Y2ZfaW5kZXgsXFxuIDIzNDpcXHRcXHRcXHQucmVmY250ICAgICA9IHJlZmNvdW50X3JlYWQoXFx1MDAyNnMtXFx1MDAzZXRjZl9yZWZjbnQpIC0gcmVmLFxcbiAyMzU6XFx0XFx0XFx0LmJpbmRjbnQgICAgPSBhdG9taWNfcmVhZChcXHUwMDI2cy1cXHUwMDNldGNmX2JpbmRjbnQpIC0gYmluZCxcXG4gMjM2OlxcdFxcdH07XFxuIDIzNzpcXHRcXHRzdHJ1Y3QgdGNmX3QgdDtcXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjEwLjMwOTczNTUyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI5NjAwNTk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBwcmVzZW50ZWQgd2l0aCBhIGZpbGUsIGxpa2VseSBhIGRhdGEgZHVtcCBvciBhIGxvZywgbmFtZWQgYHRjZl9zYW1wbGVfZHVtcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cIlxuXG4qKkRlY29uc3RydWN0aW5nIGB0Y2Zfc2FtcGxlX2R1bXBgKipcblxuTXkgZXhwZXJ0IGV5ZSBpcyBhbHJlYWR5IHNjYW5uaW5nLCBtZW50YWxseSBjYXRhbG9naW5nIHBvc3NpYmlsaXRpZXMuIElzIHRoaXMgYSB0ZXh0IGZpbGUsIGEgYmluYXJ5IGZpbGUsIGEgZGF0YWJhc2UgZHVtcCwgYSBuZXR3b3JrIHRyYWNlPyBCYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIG15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBcIlRDRlwiIHByb2JhYmx5IHN0YW5kcyBmb3Igc29tZXRoaW5nIHJlbGV2YW50IHRvIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvdG9jb2wsIGZyYW1ld29yaywgb3IgZXZlbiBhIHN5c3RlbSBhcmNoaXRlY3R1cmUgdGhhdCBJJ20gZmFtaWxpYXIgd2l0aC4gVGhlIFwic2FtcGxlXCIgcGFydCBzdWdnZXN0cyB0aGlzIGlzbid0IHRoZSBwcmltYXJ5IHByb2R1Y3Rpb24gZGF0YSwgd2hpY2ggaXMgZ29vZC4gRWFzaWVyIHRvIGFuYWx5emUhIEl0J3MgYSBzYW1wbGUsIHNvIEknbSBob3BpbmcgaXQncyBhIG1hbmFnZWFibGUgc2l6ZSBhbmQgZG9lc24ndCBjb250YWluIGFueSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFRoZSBcImR1bXBcIiB0ZWxscyBtZSB3ZSBhcmUgbGlrZWx5IGxvb2tpbmcgYXQgYSBzbmFwc2hvdCwgd2hpY2ggSSBjYW4gdXNlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcsIHByb2ZpbGluZywgYW5kIGFuYWx5emluZyBkYXRhIHBhdHRlcm5zLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBoeXBvdGhlc2VzIGFib3V0IHRoZSB0eXBlIG9mIGluc2lnaHRzIEkgY2FuIGdsZWFuIGZyb20gdGhpcywgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kIHdpdGhpbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGluIHRoaXMgdGhpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjIwLjYwNTc0NTc0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9zYW1wbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcdG9wdC5hY3Rpb24gPSBzLVxcdTAwM2V0Y2ZfYWN0aW9uO1xcbiAyNDE6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBUQ0FfU0FNUExFX1BBUk1TLCBzaXplb2Yob3B0KSwgXFx1MDAyNm9wdCkpXFxuIDI0MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0dGNmX3RtX2R1bXAoXFx1MDAyNnQsIFxcdTAwMjZzLVxcdTAwM2V0Y2ZfdG0pO1xcbiAyNDU6XFx0XFx0aWYgKG5sYV9wdXRfNjRiaXQoc2tiLCBUQ0FfU0FNUExFX1RNLCBzaXplb2YodCksIFxcdTAwMjZ0LCBUQ0FfU0FNUExFX1BBRCkpXFxuIDI0NjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1NBTVBMRV9SQVRFLCBzLVxcdTAwM2VyYXRlKSlcXG4gMjQ5OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRpZiAocy1cXHUwMDNldHJ1bmNhdGUpXFxuIDI1MjpcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBUQ0FfU0FNUExFX1RSVU5DX1NJWkUsIHMtXFx1MDAzZXRydW5jX3NpemUpKVxcbiAyNTM6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIFRDQV9TQU1QTEVfUFNBTVBMRV9HUk9VUCwgcy1cXHUwMDNlcHNhbXBsZV9ncm91cF9udW0pKVxcbiAyNTY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDI1NzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cy1cXHUwMDNldGNmX2xvY2spO1xcbiAyNTg6XFx0XFxuIDI1OTpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuIDI2MDpcXHRcXG4gMjYxOlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4gMjYyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDI2MzpcXHRcXHRubG1zZ190cmltKHNrYiwgYik7XFxuIDI2NDpcXHRcXHRyZXR1cm4gLTE7XFxuIDI2NTpcXHR9XFxuIDI2NjpcXHRcXG4gMjY3OlxcdHN0YXRpYyB2b2lkIHRjZl9wc2FtcGxlX2dyb3VwX3B1dCh2b2lkICpwcml2KVxcbiAyNjg6XFx0e1xcbiAyNjk6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKmdyb3VwID0gcHJpdjtcXG4gMjcwOlxcdFxcbiAyNzE6XFx0XFx0cHNhbXBsZV9ncm91cF9wdXQoZ3JvdXApO1xcbiAyNzI6XFx0fVxcbiAyNzM6XFx0XFxuIDI3NDpcXHRzdGF0aWMgc3RydWN0IHBzYW1wbGVfZ3JvdXAgKlxcbiAyNzU6XFx0dGNmX3NhbXBsZV9nZXRfZ3JvdXAoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gMjc2OlxcdFxcdFxcdCAgICAgdGNfYWN0aW9uX3ByaXZfZGVzdHJ1Y3RvciAqZGVzdHJ1Y3RvcilcXG4gMjc3OlxcdHtcXG4gMjc4OlxcdFxcdHN0cnVjdCB0Y2Zfc2FtcGxlICpzID0gdG9fc2FtcGxlKGEpO1xcbiAyNzk6XFx0XFx0c3RydWN0IHBzYW1wbGVfZ3JvdXAgKmdyb3VwO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRncm91cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy1cXHUwMDNlcHNhbXBsZV9ncm91cCxcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZzLVxcdTAwM2V0Y2ZfbG9jaykpO1xcbiAyODM6XFx0XFx0aWYgKGdyb3VwKSB7XFxuIDI4NDpcXHRcXHRcXHRwc2FtcGxlX2dyb3VwX3Rha2UoZ3JvdXApO1xcbiAyODU6XFx0XFx0XFx0KmRlc3RydWN0b3IgPSB0Y2ZfcHNhbXBsZV9ncm91cF9wdXQ7XFxuIDI4NjpcXHRcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdHJldHVybiBncm91cDtcXG4gMjg5OlxcdH1cXG4gMjkwOlxcdFxcbiAyOTE6XFx0c3RhdGljIHZvaWQgdGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5LFxcbiAyOTI6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4gMjkzOlxcdHtcXG4gMjk0OlxcdFxcdGVudHJ5LVxcdTAwM2VzYW1wbGUucHNhbXBsZV9ncm91cCA9XFxuIDI5NTpcXHRcXHRcXHRhY3QtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BzYW1wbGVfZ3JvdXAoYWN0LCBcXHUwMDI2ZW50cnktXFx1MDAzZWRlc3RydWN0b3IpO1xcbiAyOTY6XFx0XFx0ZW50cnktXFx1MDAzZWRlc3RydWN0b3JfcHJpdiA9IGVudHJ5LVxcdTAwM2VzYW1wbGUucHNhbXBsZV9ncm91cDtcXG4gMjk3OlxcdH1cXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCB0Y2Zfc2FtcGxlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG4gMzAwOlxcdFxcdFxcdFxcdFxcdFxcdHUzMiAqaW5kZXhfaW5jLCBib29sIGJpbmQsXFxuIDMwMTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMwMjpcXHR7XFxuIDMwMzpcXHRcXHRpZiAoYmluZCkge1xcbiAzMDQ6XFx0XFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSA9IGVudHJ5X2RhdGE7XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VpZCA9IEZMT1dfQUNUSU9OX1NBTVBMRTtcXG4gMzA3OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VzYW1wbGUudHJ1bmNfc2l6ZSA9IHRjZl9zYW1wbGVfdHJ1bmNfc2l6ZShhY3QpO1xcbiAzMDg6XFx0XFx0XFx0ZW50cnktXFx1MDAzZXNhbXBsZS50cnVuY2F0ZSA9IHRjZl9zYW1wbGVfdHJ1bmNhdGUoYWN0KTtcXG4gMzA5OlxcdFxcdFxcdGVudHJ5LVxcdTAwM2VzYW1wbGUucmF0ZSA9IHRjZl9zYW1wbGVfcmF0ZShhY3QpO1xcbiAzMTA6XFx0XFx0XFx0dGNmX29mZmxvYWRfc2FtcGxlX2dldF9ncm91cChlbnRyeSwgYWN0KTtcXG4gMzExOlxcdFxcdFxcdCppbmRleF9pbmMgPSAxO1xcbiAzMTI6XFx0XFx0fSBlbHNlIHtcXG4gMzEzOlxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfYWN0aW9uICpmbF9hY3Rpb24gPSBlbnRyeV9kYXRhO1xcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRcXHRmbF9hY3Rpb24tXFx1MDAzZWlkID0gRkxPV19BQ1RJT05fU0FNUExFO1xcbiAzMTY6XFx0XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRyZXR1cm4gMDtcXG4gMzE5OlxcdH1cXG4gMzIwOlxcdFxcbiAzMjE6XFx0c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9zYW1wbGVfb3BzID0ge1xcbiAzMjI6XFx0XFx0LmtpbmRcXHQgID0gXFxcInNhbXBsZVxcXCIsXFxuIDMyMzpcXHRcXHQuaWRcXHQgID0gVENBX0lEX1NBTVBMRSxcXG4gMzI0OlxcdFxcdC5vd25lclxcdCAgPSBUSElTX01PRFVMRSxcXG4gMzI1OlxcdFxcdC5hY3RcXHQgID0gdGNmX3NhbXBsZV9hY3QsXFxuIDMyNjpcXHRcXHQuc3RhdHNfdXBkYXRlID0gdGNmX3NhbXBsZV9zdGF0c191cGRhdGUsXFxuIDMyNzpcXHRcXHQuZHVtcFxcdCAgPSB0Y2Zfc2FtcGxlX2R1bXAsXFxuIDMyODpcXHRcXHQuaW5pdFxcdCAgPSB0Y2Zfc2FtcGxlX2luaXQsXFxuIDMyOTpcXHRcXHQuY2xlYW51cCAgPSB0Y2Zfc2FtcGxlX2NsZWFudXAsXFxuIDMzMDpcXHRcXHQuZ2V0X3BzYW1wbGVfZ3JvdXAgPSB0Y2Zfc2FtcGxlX2dldF9ncm91cCxcXG4gMzMxOlxcdFxcdC5vZmZsb2FkX2FjdF9zZXR1cCAgICA9IHRjZl9zYW1wbGVfb2ZmbG9hZF9hY3Rfc2V0dXAsXFxuIDMzMjpcXHRcXHQuc2l6ZVxcdCAgPSBzaXplb2Yoc3RydWN0IHRjZl9zYW1wbGUpLFxcbiAzMzM6XFx0fTtcXG4gMzM0OlxcdE1PRFVMRV9BTElBU19ORVRfQUNUKFxcXCJzYW1wbGVcXFwiKTtcXG4gMzM1OlxcdFxcbiAzMzY6XFx0c3RhdGljIF9fbmV0X2luaXQgaW50IHNhbXBsZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIDMzNzpcXHR7XFxuIDMzODpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9zYW1wbGVfb3BzLm5ldF9pZCk7XFxuIDMzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6Mjg6MjAuNjA1ODU3NDQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzEwMDI0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIFRydW5jYXRpb24gSXNzdWUgaW4gQWN0aW9uIFJlcGxhY2VtZW50KipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGEgZmFpbHVyZSB0byByZXNldCBgcy1cdTAwM2V0cnVuY2F0ZWAgYW5kIGBzLVx1MDAzZXRydW5jX3NpemVgIHdoZW4gcmVwbGFjaW5nIGFuIGFjdGlvbi4gSXQncyBhIGNsYXNzaWMgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCB3aGljaCBpcyBhIHJlbGllZiEgTm93LCBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgc3VyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBgc2Agc3RydWN0IGlzIHByb3Blcmx5IHplcm8taW5pdGlhbGl6ZWQgZHVyaW5nIGNyZWF0aW9uLiBJIHJlbWVtYmVyIGB0Y2ZfaWRyX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGFjdGlvbiBzdHJ1Y3QsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cC4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYHRjZl9pZHJfY3JlYXRlYCBmdW5jdGlvbiBkZWZpbml0aW9uLCB3aGljaCBzaG91bGQgYmUgaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyODo0Ny4zMTU4ODQyNTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTQyMzY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfaWRyX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9NzQyPXN0YXRpYyBpbnQgdGNmX2lkcl9kZWxldGVfaW5kZXgoc3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvLCB1MzIgaW5kZXgpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTc3NC1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjc3NTppbnQgdGNmX2lkcl9jcmVhdGUoc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuLCB1MzIgaW5kZXgsIHN0cnVjdCBubGF0dHIgKmVzdCxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTc3Ni1cXHRcXHQgICBzdHJ1Y3QgdGNfYWN0aW9uICoqYSwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtODMwLX1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjgzMTpFWFBPUlRfU1lNQk9MKHRjZl9pZHJfY3JlYXRlKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzMi1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjgzMzppbnQgdGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyhzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4sIHUzMiBpbmRleCxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTgzNC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy04MzgtXFx0LyogU2V0IGNwdXN0YXRzIGFjY29yZGluZyB0byBhY3Rpb25zIGZsYWdzLiAqL1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6ODM5OlxcdHJldHVybiB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSwgb3BzLCBiaW5kLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtODQwLVxcdFxcdFxcdCAgICAgICEoZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX05PX1BFUkNQVV9TVEFUUyksIGZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0MS19XFxubmV0L3NjaGVkL2FjdF9hcGkuYzo4NDI6RVhQT1JUX1NZTUJPTCh0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTg0My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6Mjg6NDcuNjg1MzE0OTY5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTU2MTg3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y2ZfaWRyX2NyZWF0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBhY3Rpb24gQVBJIHN0dWZmLiBJJ20gc3RhcnRpbmcgd2l0aCBgdGNmX2lkcl9jcmVhdGVgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4gU2VlbXMgbGlrZSB0aGlzIGlzIHdoZXJlIHdlJ3JlIGluaXRpYWxseSBzZXR0aW5nIHVwIHRoZSBJRFIgc3RydWN0dXJlIGZvciBvdXIgdHJhZmZpYyBjb250cm9sIGZpbHRlcnMuIEdvdHRhIHVuZGVyc3RhbmQgaG93IHRoZXNlIElEUnMgYXJlIGluaXRpYWxpemVkIOKAkyBob3cgdGhlIGtleXMgYXJlIGFzc2lnbmVkLCBob3cgY29sbGlzaW9ucyBhcmUgaGFuZGxlZCAob3IgYXJlIHRoZXk/KS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGZvciBhIG5ldyBjbGFzc2lmaWVyIHRoYXQgbmVlZHMgYW4gSURSLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIGFyZSB3ZSBhbGxvY2F0aW5nIG1lbW9yeSBoZXJlIGRpcmVjdGx5PyBPciBpcyB0aGVyZSBzb21lIGtpbmQgb2YgcG9vbD8gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IHdoZW4gd29ya2luZyB3aXRoIHRoaXMgSURSIHN0cnVjdHVyZT8gVGhlIGNvcmUgb2YgYW55IGFjdGlvbiBmcmFtZXdvcmsgaXMgb3JnYW5pemluZyBvdXIgZmlsdGVycywgc28gdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGFuZCBmaW5kIHRoZXNlIGZpbHRlcnMgaW4gYSBxdWljayBtYW5uZXIgaXMgY3JpdGljYWwuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgbXV0ZXhlcyBvciBhdG9taWMgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IHByb3RlY3QgdGhpcyBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZXkgbGF5IGl0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjUxLjYwMDkzNjQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3NTpcXHRpbnQgdGNmX2lkcl9jcmVhdGUoc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuLCB1MzIgaW5kZXgsIHN0cnVjdCBubGF0dHIgKmVzdCxcXG4gNzc2OlxcdFxcdFxcdCAgIHN0cnVjdCB0Y19hY3Rpb24gKiphLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzLFxcbiA3Nzc6XFx0XFx0XFx0ICAgaW50IGJpbmQsIGJvb2wgY3B1c3RhdHMsIHUzMiBmbGFncylcXG4gNzc4OlxcdHtcXG4gNzc5OlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKnAgPSBremFsbG9jKG9wcy1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8gPSB0bi1cXHUwMDNlaWRyaW5mbztcXG4gNzgxOlxcdFxcdGludCBlcnIgPSAtRU5PTUVNO1xcbiA3ODI6XFx0XFxuIDc4MzpcXHRcXHRpZiAodW5saWtlbHkoIXApKVxcbiA3ODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc4NTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNnAtXFx1MDAzZXRjZmFfcmVmY250LCAxKTtcXG4gNzg2OlxcdFxcdGlmIChiaW5kKVxcbiA3ODc6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cC1cXHUwMDNldGNmYV9iaW5kY250LCAxKTtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0aWYgKGNwdXN0YXRzKSB7XFxuIDc5MDpcXHRcXHRcXHRwLVxcdTAwM2VjcHVfYnN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XFxuIDc5MTpcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZWNwdV9ic3RhdHMpXFxuIDc5MjpcXHRcXHRcXHRcXHRnb3RvIGVycjE7XFxuIDc5MzpcXHRcXHRcXHRwLVxcdTAwM2VjcHVfYnN0YXRzX2h3ID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IGduZXRfc3RhdHNfYmFzaWNfc3luYyk7XFxuIDc5NDpcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZWNwdV9ic3RhdHNfaHcpXFxuIDc5NTpcXHRcXHRcXHRcXHRnb3RvIGVycjI7XFxuIDc5NjpcXHRcXHRcXHRwLVxcdTAwM2VjcHVfcXN0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlKTtcXG4gNzk3OlxcdFxcdFxcdGlmICghcC1cXHUwMDNlY3B1X3FzdGF0cylcXG4gNzk4OlxcdFxcdFxcdFxcdGdvdG8gZXJyMztcXG4gNzk5OlxcdFxcdH1cXG4gODAwOlxcdFxcdGduZXRfc3RhdHNfYmFzaWNfc3luY19pbml0KFxcdTAwMjZwLVxcdTAwM2V0Y2ZhX2JzdGF0cyk7XFxuIDgwMTpcXHRcXHRnbmV0X3N0YXRzX2Jhc2ljX3N5bmNfaW5pdChcXHUwMDI2cC1cXHUwMDNldGNmYV9ic3RhdHNfaHcpO1xcbiA4MDI6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnAtXFx1MDAzZXRjZmFfbG9jayk7XFxuIDgwMzpcXHRcXHRwLVxcdTAwM2V0Y2ZhX2luZGV4ID0gaW5kZXg7XFxuIDgwNDpcXHRcXHRwLVxcdTAwM2V0Y2ZhX3RtLmluc3RhbGwgPSBqaWZmaWVzO1xcbiA4MDU6XFx0XFx0cC1cXHUwMDNldGNmYV90bS5sYXN0dXNlID0gamlmZmllcztcXG4gODA2OlxcdFxcdHAtXFx1MDAzZXRjZmFfdG0uZmlyc3R1c2UgPSAwO1xcbiA4MDc6XFx0XFx0cC1cXHUwMDNldGNmYV9mbGFncyA9IGZsYWdzO1xcbiA4MDg6XFx0XFx0aWYgKGVzdCkge1xcbiA4MDk6XFx0XFx0XFx0ZXJyID0gZ2VuX25ld19lc3RpbWF0b3IoXFx1MDAyNnAtXFx1MDAzZXRjZmFfYnN0YXRzLCBwLVxcdTAwM2VjcHVfYnN0YXRzLFxcbiA4MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnAtXFx1MDAzZXRjZmFfcmF0ZV9lc3QsXFxuIDgxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cC1cXHUwMDNldGNmYV9sb2NrLCBmYWxzZSwgZXN0KTtcXG4gODEyOlxcdFxcdFxcdGlmIChlcnIpXFxuIDgxMzpcXHRcXHRcXHRcXHRnb3RvIGVycjQ7XFxuIDgxNDpcXHRcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdHAtXFx1MDAzZWlkcmluZm8gPSBpZHJpbmZvO1xcbiA4MTc6XFx0XFx0X19tb2R1bGVfZ2V0KG9wcy1cXHUwMDNlb3duZXIpO1xcbiA4MTg6XFx0XFx0cC1cXHUwMDNlb3BzID0gb3BzO1xcbiA4MTk6XFx0XFx0KmEgPSBwO1xcbiA4MjA6XFx0XFx0cmV0dXJuIDA7XFxuIDgyMTpcXHRlcnI0OlxcbiA4MjI6XFx0XFx0ZnJlZV9wZXJjcHUocC1cXHUwMDNlY3B1X3FzdGF0cyk7XFxuIDgyMzpcXHRlcnIzOlxcbiA4MjQ6XFx0XFx0ZnJlZV9wZXJjcHUocC1cXHUwMDNlY3B1X2JzdGF0c19odyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjI4OjUxLjYwMTEyMTIxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NzE2NTYyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBNZW1vcnkgU2FmZXR5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgZXhhbWluZWQgdGhpcyBwYXRjaCwgYW5kIEkndmUgY29uZmlybWVkIHRoYXQgYGt6YWxsb2NgICppcyogYmVpbmcgdXNlZCwgc28gYHMtXHUwMDNldHJ1bmNhdGVgIGFuZCBgcy1cdTAwM2V0cnVuY19zaXplYCBhcmUgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSB3aGVuIHRoZSBhY3Rpb24gaXMgY3JlYXRlZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGEgcHJvYmxlbSB0aGF0IGFyaXNlcyB3aGVuIGFuIGV4aXN0aW5nIGFjdGlvbiBpcyAqdXBkYXRlZCogb3IgKnJlcGxhY2VkKiwgYW5kIHRoZSBpbmNvbWluZyBuZXRsaW5rIG1lc3NhZ2UgZG9lc24ndCBpbmNsdWRlIHRoZSBgVENBX1NBTVBMRV9UUlVOQ19TSVpFYCBhdHRyaWJ1dGUuIEVzc2VudGlhbGx5LCB0aGUgKm9sZCogdmFsdWVzIGFyZSBiZWluZyByZXRhaW5lZCBpbnN0ZWFkIG9mIGJlaW5nIHJlc2V0IGluIHRoaXMgdXBkYXRlIHNjZW5hcmlvLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGl0J3MgYSBzdGF0ZSByZXRlbnRpb24gYnVnIG9uIGFuIHVwZGF0ZS4gSSd2ZSBxdWlja2x5IHJlLXJldmlld2VkIHRoZSBLTVNBTiB2cy4gS0FTQU4gcnVsZXMgdG8gY29uZmlybSB0aGlzIGFzc2Vzc21lbnQuIEp1c3QgdG8gYmUgY2xlYXIsIHRob3NlIHJ1bGVzIHN0YXRlIEtNU0FOIGlzIG5lZWRlZCBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHRoaW5ncyBsaWtlIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlci1yZWFjaGFibGUgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIHZ1bG5lcmFiaWxpdGllcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgbGVhZCB0byBhY2Nlc3Mgb2YgdW5pbml0aWFsaXplZCBieXRlcy5cblxuSW4gdGhpcyBjYXNlLCB0aGUgbWVtb3J5ICppcyogZnVsbHkgaW5pdGlhbGl6ZWQgdGhhbmtzIHRvIGBremFsbG9jYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY29kZSBpc24ndCByZXNldHRpbmcgdGhvc2UgZmllbGRzIHRvIHRoZWlyIGNvcnJlY3QgaW5pdGlhbCB2YWx1ZXMgZHVyaW5nIHRoZSB1cGRhdGUsIG5vdCB0aGF0IGl0J3MgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNvLCBoZXJlJ3MgbXkgZm9ybWFsIEtNU0FOIHJlYXNvbmluZzogdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYHRjZl9zYW1wbGVfaW5pdGAuIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGB0Y2Agc2FtcGxlIGFjdGlvbiwgaXQgZmFpbHMgdG8gcmVzZXQgdGhlIGB0cnVuY2F0ZWAgYW5kIGB0cnVuY19zaXplYCBmaWVsZHMgaWYgdGhlIG5ldyBjb25maWd1cmF0aW9uIGRvZXNuJ3QgaW5jbHVkZSB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBDcnVjaWFsbHksIHRoZSBhY3Rpb24gc3RydWN0dXJlIGlzIG9yaWdpbmFsbHkgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIGluIGB0Y2ZfaWRyX2NyZWF0ZWAsIHNvIHRoZSBtZW1vcnkgaXMgKmFsd2F5cyogZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHBvaW50IG9mIGFsbG9jYXRpb24uIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYWJvdXQgcmV0YWluaW5nIHN0YWxlIHN0YXRlIGR1cmluZyBhbiB1cGRhdGUsIHJhdGhlciB0aGFuIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCAqZG9lcyBub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBpbiB0aGlzIGNvZGUuIFdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY3MiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODoyOTowMC4yNzI3ODAzNjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGNmX3NhbXBsZV9pbml0YCB3aGVyZSByZXBsYWNpbmcgYW4gZXhpc3RpbmcgYHRjYCBzYW1wbGUgYWN0aW9uIGZhaWxzIHRvIHJlc2V0IHRoZSBgdHJ1bmNhdGVgIGFuZCBgdHJ1bmNfc2l6ZWAgZmllbGRzIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbiBvbWl0cyB0aGUgYFRDQV9TQU1QTEVfVFJVTkNfU0laRWAgYXR0cmlidXRlLiBUaGUgYWN0aW9uIHN0cnVjdHVyZSBpcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBpbiBgdGNmX2lkcl9jcmVhdGVgLCBzbyB0aGUgbWVtb3J5IGlzIGFsd2F5cyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGlzc3VlIGlzIHB1cmVseSBhYm91dCByZXRhaW5pbmcgc3RhbGUgc3RhdGUgZHVyaW5nIGFuIHVwZGF0ZSwgcmF0aGVyIHRoYW4gZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoaXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBpc3N1ZXMgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[1] Phase: Succeeded StartedAt: 2026-08-25 18:29:11 +0000 UTC FinishedAt: 2026-08-25 18:29:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 18:29:11 +0000 UTC FinishedAt: 2026-08-25 18:29:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2] Phase: Succeeded StartedAt: 2026-08-25 18:29:11 +0000 UTC FinishedAt: 2026-08-25 22:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 18:29:11 +0000 UTC FinishedAt: 2026-08-25 22:09:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 18:29:11 +0000 UTC FinishedAt: 2026-08-25 18:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 18:29:11 +0000 UTC FinishedAt: 2026-08-25 18:29:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowj7mm5/series-workflowj7mm5-convert-artifact-3755390672/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 18:29:21 +0000 UTC FinishedAt: 2026-08-25 18:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 18:29:21 +0000 UTC FinishedAt: 2026-08-25 18:46:47 +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:*ded9edeb-9295-45d0-8558-39859735751f,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-workflowj7mm5/series-workflowj7mm5-convert-artifact-3755390672/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": "e0514925-9d3c-4fa8-b292-cad703164547", "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-workflowj7mm5/series-workflowj7mm5-build-action-575251798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 18:29:21 +0000 UTC FinishedAt: 2026-08-25 18:46:36 +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:*ded9edeb-9295-45d0-8558-39859735751f,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-workflowj7mm5/series-workflowj7mm5-convert-artifact-3755390672/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": "e0514925-9d3c-4fa8-b292-cad703164547", "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-workflowj7mm5/series-workflowj7mm5-build-action-575251798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 18:46:47 +0000 UTC FinishedAt: 2026-08-25 18:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 18:46:47 +0000 UTC FinishedAt: 2026-08-25 18:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 18:46:47 +0000 UTC FinishedAt: 2026-08-25 18:46:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 18:46:47 +0000 UTC FinishedAt: 2026-08-25 18:46:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowj7mm5/series-workflowj7mm5-convert-artifact-135254327/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 18:46:57 +0000 UTC FinishedAt: 2026-08-25 18:49:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 18:46:57 +0000 UTC FinishedAt: 2026-08-25 18:48:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0514925-9d3c-4fa8-b292-cad703164547,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-workflowj7mm5/series-workflowj7mm5-build-action-575251798/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-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 18:49:03 +0000 UTC FinishedAt: 2026-08-25 18:49:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 18:49:03 +0000 UTC FinishedAt: 2026-08-25 18:49:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 18:49:03 +0000 UTC FinishedAt: 2026-08-25 19:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 18:49:03 +0000 UTC FinishedAt: 2026-08-25 19:05:05 +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:*ded9edeb-9295-45d0-8558-39859735751f,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-workflowj7mm5/series-workflowj7mm5-convert-artifact-135254327/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": "f005ff13-04ad-478b-9c79-c7a81b93b253", "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-workflowj7mm5/series-workflowj7mm5-build-action-1904423163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 18:49:03 +0000 UTC FinishedAt: 2026-08-25 19:04:55 +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:*ded9edeb-9295-45d0-8558-39859735751f,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-workflowj7mm5/series-workflowj7mm5-convert-artifact-135254327/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": "f005ff13-04ad-478b-9c79-c7a81b93b253", "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-workflowj7mm5/series-workflowj7mm5-build-action-1904423163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 19:05:05 +0000 UTC FinishedAt: 2026-08-25 19:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 19:05:05 +0000 UTC FinishedAt: 2026-08-25 19:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 19:05:05 +0000 UTC FinishedAt: 2026-08-25 19:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 19:05:05 +0000 UTC FinishedAt: 2026-08-25 19:06:55 +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:*f005ff13-04ad-478b-9c79-c7a81b93b253,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-workflowj7mm5/series-workflowj7mm5-build-action-1904423163/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-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 19:07:05 +0000 UTC FinishedAt: 2026-08-25 22:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 19:07:05 +0000 UTC FinishedAt: 2026-08-25 22:09:06 +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":["tcf_sample_init","tcf_sample_act"],"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:*e0514925-9d3c-4fa8-b292-cad703164547,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f005ff13-04ad-478b-9c79-c7a81b93b253,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-workflowj7mm5/series-workflowj7mm5-build-action-575251798/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-workflowj7mm5/series-workflowj7mm5-build-action-1904423163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 19:07:05 +0000 UTC FinishedAt: 2026-08-25 19:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 19:07:05 +0000 UTC FinishedAt: 2026-08-25 19:07:12 +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":["tcf_sample_init","tcf_sample_act"],"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-workflowj7mm5/series-workflowj7mm5-convert-artifact-1835033200/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 19:07:05 +0000 UTC FinishedAt: 2026-08-25 19:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 19:07:05 +0000 UTC FinishedAt: 2026-08-25 19:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 19:07:06 +0000 UTC FinishedAt: 2026-08-25 19:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 19:07:16 +0000 UTC FinishedAt: 2026-08-25 22:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj7mm5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_sample_init","tcf_sample_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT","NET_ACT_SAMPLE"],"series_id":"852379a0-8a3b-4915-b4ee-51dcb26d4934","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 19:07:16 +0000 UTC FinishedAt: 2026-08-25 22:08:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0514925-9d3c-4fa8-b292-cad703164547,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f005ff13-04ad-478b-9c79-c7a81b93b253,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-workflowj7mm5/series-workflowj7mm5-build-action-575251798/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-workflowj7mm5/series-workflowj7mm5-build-action-1904423163/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-workflowj7mm5/series-workflowj7mm5-convert-artifact-1835033200/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,}