Name: series-workflowdkkng Phase: Succeeded StartedAt: 2026-07-13 08:08:15 +0000 UTC FinishedAt: 2026-07-13 13:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[0] Phase: Succeeded StartedAt: 2026-07-13 08:08:15 +0000 UTC FinishedAt: 2026-07-13 08:32:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 08:08:15 +0000 UTC FinishedAt: 2026-07-13 08:32:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS", "EXT4_FS", "BTRFS_FS", "F2FS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS", "EXT4_FS", "BTRFS_FS", "F2FS_FS" ], "series_id": "e5b1b488-556f-45dd-bcc2-4889b6be7cc7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ifs_set_range_uptodate", "ifs_clear_range_dirty", "iomap_clear_range_dirty", "ifs_set_range_dirty", "iomap_invalidate_folio", "iomap_zero_iter", "iomap_zero_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O0YyRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZnNfc2V0X3JhbmdlX3VwdG9kYXRlJiMzNDssCiAgICAmIzM0O2lmc19jbGVhcl9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpZnNfc2V0X3JhbmdlX2RpcnR5JiMzNDssCiAgICAmIzM0O2lvbWFwX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAgICYjMzQ7aW9tYXBfemVyb19pdGVyJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8uIEl0IGFsc28gY2hhbmdlcyBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvIHRvIGNsZWFyIGRpcnR5IGJpdHMgZm9yIHRoZSBpbnZhbGlkYXRlZCByYW5nZSwgYW5kIGZpeGVzIGlvbWFwX3plcm9faXRlciB0byBjb3JyZWN0bHkgcmVwb3J0IGlmIHplcm9pbmcgb2NjdXJyZWQgYW5kIGhhbmRsZSBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFueSBtYWpvciBmaWxlc3lzdGVtcyAoWEZTLCBleHQ0LCBidHJmcywgZXRjLikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDg6Mjg6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbmluZGV4IGQ1NWI5MzZlNjk4NjI4Li5jMTIyMzdlZDdjZGU5YSAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC02NywxMSAmIzQzOzY3LDEzIEBAIHN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSBvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcbiBcbi1cdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIG5yX2Jsa3MpO1xuJiM0MztcdGlmIChsZW4pIHtcbiYjNDM7XHRcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdFx0bGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4mIzQzO1x0XHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xuIH1cbiBcbkBAIC0xNzEsMTggJiM0MzsxNzMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGlvbWFwX2ZpbmRfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdTY0ICpyYW5nZV9zdGFydCxcbiBcdHJldHVybiByYW5nZV9lbmQgLSAqcmFuZ2Vfc3RhcnQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiAmIzQzOyBAbGVuKSB3aXRoaW4gYVxuJiM0MzsgKiBmb2xpby4gIFRoZSByYW5nZSBpcyByb3VuZGVkIGlud2FyZHMgc28gdGhhdCBvbmx5IGJsb2NrcyBmdWxseSBjb3ZlcmVkIGJ5XG4mIzQzOyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpb1xuJiM0MzsgKiBpbnZhbGlkYXRpb24sIHdoZXJlIHdlIG11c3QgZW5zdXJlIGEgYmxvY2sgaXMgZnVsbHkgY2xlYW4gYmVmb3JlIGRpc2NhcmRpbmdcbiYjNDM7ICogaXQuXG4mIzQzOyAqL1xuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFx1MDAzZVx1MDAzZVxuJiM0MztcdFx0XHRcdCBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuJiM0MztcdGlmIChmaXJzdF9ibGsgXHUwMDNlPSBsYXN0X2JsaylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTtcbiYjNDM7XHRiaXRtYXBfY2xlYXIoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sXG4mIzQzO1x0XHQgICAgIGxhc3RfYmxrIC0gZmlyc3RfYmxrKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG5AQCAtMTk0LDE4ICYjNDM7MjA3LDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4gXHRcdGlmc19jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgaWZzLCBvZmYsIGxlbik7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTZXQgdGhlIHBlci1ibG9jayBkaXJ0eSBiaXRzIGZvciB0aGUgcmFuZ2UgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgd2l0aGluIGFcbiYjNDM7ICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxuJiM0MzsgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYVxuJiM0MzsgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nXG4mIzQzOyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxuJiM0MzsgKi9cbiBzdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gXHR1bnNpZ25lZCBpbnQgYmxrc19wZXJfZm9saW8gPSBpX2Jsb2Nrc19wZXJfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdHVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSAob2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHMpO1xuLVx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxO1xuJiM0MztcdHVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiYjNDM7XHRpZiAoIWxlbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4mIzQzO1x0bGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7XG4mIzQzO1x0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbyxcbiYjNDM7XHRcdCAgIGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC03NTcsNiAmIzQzOzc4MSw4IEBAIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuIFx0XHRXQVJOX09OX09OQ0UoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbiBcdFx0Zm9saW9fY2FuY2VsX2RpcnR5KGZvbGlvKTtcbiBcdFx0aWZzX2ZyZWUoZm9saW8pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbkBAIC0xNTM2LDYgJiM0MzsxNTYyLDcgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXG4ge1xuIFx0dTY0IGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpO1xuJiM0MztcdGJvb2wgemVyb2VkID0gZmFsc2U7XG4gXHRpbnQgc3RhdHVzO1xuIFxuIFx0ZG8ge1xuQEAgLTE1NTQsNiAmIzQzOzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdC8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSYjMzk7cmUgZG9uZSB3aXRoIGEgZm9saW8gYmF0Y2ggKi9cbiBcdFx0aWYgKCFmb2xpbykge1xuIFx0XHRcdHN0YXR1cyA9IGlvbWFwX2l0ZXJfYWR2YW5jZV9mdWxsKGl0ZXIpO1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzKVxuJiM0MztcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDYgJiM0MzsxNTkzLDcgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFx0XHRcdFx0Ynl0ZXMpO1xuIFxuIFx0XHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbiYjNDM7XHRcdHplcm9lZCA9IHRydWU7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuIFxuIFx0XHRyZXQgPSBpb21hcF93cml0ZV9lbmQoaXRlciwgYnl0ZXMsIGJ5dGVzLCBmb2xpbyk7XG5AQCAtMTU3MywxMCAmIzQzOzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFxuIFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xuIFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0fSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSBcdTAwM2UgMCk7XG4gXG4tXHRpZiAoZGlkX3plcm8pXG4mIzQzO1x0aWYgKGRpZF96ZXJvIFx1MDAyNlx1MDAyNiB6ZXJvZWQpXG4gXHRcdCpkaWRfemVybyA9IHRydWU7XG4gXHRyZXR1cm4gc3RhdHVzO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGMkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICAgJiMzNDtpZnNfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9faXRlciYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvLiBJdCBhbHNvIGNoYW5nZXMgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyB0byBjbGVhciBkaXJ0eSBiaXRzIGZvciB0aGUgaW52YWxpZGF0ZWQgcmFuZ2UsIGFuZCBmaXhlcyBpb21hcF96ZXJvX2l0ZXIgdG8gY29ycmVjdGx5IHJlcG9ydCBpZiB6ZXJvaW5nIG9jY3VycmVkIGFuZCBoYW5kbGUgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1hbnkgbWFqb3IgZmlsZXN5c3RlbXMgKFhGUywgZXh0NCwgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMDg6Mjg6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCBkNTViOTM2ZTY5ODYyOC4uYzEyMjM3ZWQ3Y2RlOWEgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwpAQCAtNjcsMTEgJiM0Mzs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdDsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwotCXVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTsKJiM0MzsJdW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7CiAKLQliaXRtYXBfc2V0KGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsaywgbnJfYmxrcyk7CiYjNDM7CWlmIChsZW4pIHsKJiM0MzsJCWZpcnN0X2JsayA9IG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwomIzQzOwkJbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiYjNDM7CQliaXRtYXBfc2V0KGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMSk7CiYjNDM7CX0KIAlyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpOwogfQogCkBAIC0xNzEsMTggJiM0MzsxNzMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGlvbWFwX2ZpbmRfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdTY0ICpyYW5nZV9zdGFydCwKIAlyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiAmIzQzOyBAbGVuKSB3aXRoaW4gYQomIzQzOyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgaW53YXJkcyBzbyB0aGF0IG9ubHkgYmxvY2tzIGZ1bGx5IGNvdmVyZWQgYnkKJiM0MzsgKiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBvcGVyYXRpb25zIGxpa2UgZm9saW8KJiM0MzsgKiBpbnZhbGlkYXRpb24sIHdoZXJlIHdlIG11c3QgZW5zdXJlIGEgYmxvY2sgaXMgZnVsbHkgY2xlYW4gYmVmb3JlIGRpc2NhcmRpbmcKJiM0MzsgKiBpdC4KJiM0MzsgKi8KIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3Q7CiAJdW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7Ci0JdW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0cyk7Ci0JdW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwotCXVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTsKJiM0MzsJdW5zaWduZWQgaW50IGZpcnN0X2JsayA9IHJvdW5kX3VwKG9mZiwgaV9ibG9ja3NpemUoaW5vZGUpKSAmZ3Q7Jmd0OwomIzQzOwkJCQkgaW5vZGUtJmd0O2lfYmxrYml0czsKJiM0MzsJdW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4pICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAomIzQzOwlpZiAoZmlyc3RfYmxrICZndDs9IGxhc3RfYmxrKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aWZzLSZndDtzdGF0ZV9sb2NrLCBmbGFncyk7Ci0JYml0bWFwX2NsZWFyKGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7CiYjNDM7CWJpdG1hcF9jbGVhcihpZnMtJmd0O3N0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sCiYjNDM7CQkgICAgIGxhc3RfYmxrIC0gZmlyc3RfYmxrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aWZzLSZndDtzdGF0ZV9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTE5NCwxOCAmIzQzOzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogCQlpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pOwogfQogCiYjNDM7LyoKJiM0MzsgKiBTZXQgdGhlIHBlci1ibG9jayBkaXJ0eSBiaXRzIGZvciB0aGUgcmFuZ2UgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgd2l0aGluIGEKJiM0MzsgKiBmb2xpby4gIFRoZSByYW5nZSBpcyByb3VuZGVkIG91dHdhcmRzIHNvIHRoYXQgYW55IGJsb2NrIHBhcnRpYWxseSB0b3VjaGVkCiYjNDM7ICogYnkgdGhlIHJhbmdlIGlzIG1hcmtlZCBkaXJ0eS4gIFRoaXMgZW5zdXJlcyBibG9ja3MgY29udGFpbmluZyBldmVuIGEKJiM0MzsgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nCiYjNDM7ICogZGF0YSBsb3NzIHdoZW4gcGFydGlhbCBibG9ja3MgYXJlIHdyaXR0ZW4uCiYjNDM7ICovCiBzdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdDsKIAl1bnNpZ25lZCBpbnQgYmxrc19wZXJfZm9saW8gPSBpX2Jsb2Nrc19wZXJfZm9saW8oaW5vZGUsIGZvbGlvKTsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzKTsKLQl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxOwomIzQzOwl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsazsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiYjNDM7CWlmICghbGVuKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmaXJzdF9ibGsgPSBvZmYgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKJiM0MzsJbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtpZnMtJmd0O3N0YXRlX2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfc2V0KGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7CiYjNDM7CWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLAomIzQzOwkJICAgbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2lmcy0mZ3Q7c3RhdGVfbG9jaywgZmxhZ3MpOwogfQogCkBAIC03NTcsNiAmIzQzOzc4MSw4IEBAIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKQogCQlXQVJOX09OX09OQ0UoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTsKIAkJZm9saW9fY2FuY2VsX2RpcnR5KGZvbGlvKTsKIAkJaWZzX2ZyZWUoZm9saW8pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTsKQEAgLTE1MzYsNiAmIzQzOzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAJCWNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcykKIHsKIAl1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7CiYjNDM7CWJvb2wgemVyb2VkID0gZmFsc2U7CiAJaW50IHN0YXR1czsKIAogCWRvIHsKQEAgLTE1NTQsNiAmIzQzOzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAJCS8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSYjMzk7cmUgZG9uZSB3aXRoIGEgZm9saW8gYmF0Y2ggKi8KIAkJaWYgKCFmb2xpbykgewogCQkJc3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7CiYjNDM7CQkJaWYgKHN0YXR1cykKJiM0MzsJCQkJcmV0dXJuIHN0YXR1czsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE1NjQsNiAmIzQzOzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAJCQkJYnl0ZXMpOwogCiAJCWZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpOwomIzQzOwkJemVyb2VkID0gdHJ1ZTsKIAkJZm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7CiAKIAkJcmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pOwpAQCAtMTU3MywxMCAmIzQzOzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLAogCiAJCXN0YXR1cyA9IGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBieXRlcyk7CiAJCWlmIChzdGF0dXMpCi0JCQlicmVhazsKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwogCX0gd2hpbGUgKChieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKSkgJmd0OyAwKTsKIAotCWlmIChkaWRfemVybykKJiM0MzsJaWYgKGRpZF96ZXJvICZhbXA7JmFtcDsgemVyb2VkKQogCQkqZGlkX3plcm8gPSB0cnVlOwogCXJldHVybiBzdGF0dXM7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluOyBpb21hcCBpcyAqY29yZSogaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgdG91Y2hlcyB0aGUgZnVuZGFtZW50YWwgYnVmZmVyZWQgSS9PIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGJ0cmZzLCBhbmQgZXZlbiBsZXNzIGNvbW1vbiBvbmVzIGxpa2UgZ2ZzMiBhbmQgem9uZWZzLiBBbnkgbW9kaWZpY2F0aW9uIGhlcmUgaXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgYnJvYWQgaW1wYWN0LgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IGltcGFjdCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgYWxsIGludGVncmFsIHBhcnRzIG9mIGhvdyBpb21hcCBoYW5kbGVzIGRhdGEgcmFuZ2VzLCBkaXJ0eSBwYWdlcywgemVyb2luZyBvdXQgcmVnaW9ucywgYW5kIGludmFsaWRhdGluZyBmb2xpbyBkYXRhLiBUaGVzZSBhcmUgY2xhc3NpYyBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGtleSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBJL08gcGF0aC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgYXMgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgdGhlcmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhpcyBhcmVhLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbnMgdG8gc2V0IGZvciB0aGUgZnV6emluZy4gYEZTX0lPTUFQYCBhbmQgYElPTUFQYCBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSYjMzk7bGwgcnVuIGEgcXVpY2sgYGdyZXBgIHNlYXJjaC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IEkgbmVlZCBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU19JT01BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXIgb2YgZmlsZXN5c3RlbXMgYW5kIGlvbWFwLCByZW5kZXJlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW1zIGFuZCBJT01BUCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmlsZXN5c3RlbXMgbGV2ZXJhZ2UgaW9tYXAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgcXVlcnk7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgaG93IG1vZGVybiBzdG9yYWdlIHdvcmtzLCBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyB0aGF0IHJlbGF0ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgaW9tYXAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaW9tYXAgcHJvdmlkZXMgYmVuZWZpdCBhbmQgd2hlcmUgaXQgZG9lcyBub3QuCgpGaXJzdCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkuIElvbWFwIGlzIGZ1bmRhbWVudGFsbHkgYW4gSS9PIG1hcHBpbmcgc3RyYXRlZ3kuIEl0JiMzOTtzIGFib3V0IGVmZmljaWVudGx5IHRyYW5zbGF0aW5nIGxvZ2ljYWwgYmxvY2sgYWRkcmVzc2VzIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3NlcyBvbiB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRldmljZS4gSXQmIzM5O3MgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBzcGFyc2UgZmlsZXMsIG91dC1vZi1vcmRlciB3cml0ZXMsIG9yIGNvbXBsZXggc3RvcmFnZSBsYXlvdXRzLiBJIG5lZWQgdG8gcmVjYWxsIHRoZSBkZXRhaWxzIG9mIHRoaXMgYW5kIHRoZSBiZW5lZml0cyBvZiBpdHMgdXNlLgoKTm93LCB3aGljaCBmaWxlc3lzdGVtcyAqYWN0dWFsbHkqIHVzZSBpdD8gSSBrbm93IEVYVDQgZG9lc24mIzM5O3QgKG9yIGF0IGxlYXN0LCBkaWRuJiMzOTt0LCBvciBub3QgZXhjbHVzaXZlbHkpIGFuZCBCdHJmcyBhbmQgWEZTIGhhdmUgdGhlaXIgb3duIEkvTyBzdHJhdGVnaWVzLiBJIHJlbWVtYmVyIHNlZWluZyByZWZlcmVuY2VzIHRvIHNwZWNpZmljIGZpbGVzeXN0ZW1zLCBidXQgYSBxdWljayBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGRvY3VtZW50YXRpb24sIHRoZW4gcGVyaGFwcyBsb29rIGF0IHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNsdWVzIGFib3V0IG1vZHVsZSB1c2FnZSwgYW5kIGNyb3NzIHJlZmVyZW5jZSB0aGVtLiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjZXJ0YWluLgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28sIHRoZSB2YXJpb3VzIHN0b3JhZ2UgdGVjaG5vbG9naWVzIGFuZCBoYXJkd2FyZSB0aGF0IHRoaXMgbWFwcGluZyBtdXN0IHdvcmsgd2l0aC4gVGhlIGludHJpY2FjaWVzIG9mIGlvbWFwIGxpa2VseSB2YXJ5IGNvbnNpZGVyYWJseSBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgc3RvcmFnZTsgU1NEcywgSEREcywgYW5kIG5ldHdvcmtlZCBzdG9yYWdlIGFsbCBwcmVzZW50IGRpZmZlcmVudCBjaGFsbGVuZ2VzIGFuZCBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBjb250ZXh0IGFzIEkgaW52ZXN0aWdhdGUuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb3JtdWxhdGUgYSBzZWFyY2ggcXVlcnkgdG8gaWRlbnRpZnkgZmlsZXN5c3RlbXMgdXNpbmcgdGhlIHRlcm0uIElkZWFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSB0aGF0IGxldmVyYWdlIGlvbWFwIGFzIGEgKmNvcmUqIGNvbXBvbmVudCBmb3IgaXRzIEkvTyBvcGVyYXRpb25zLiBJIGFsc28gd2FudCB0byBmaW5kIHdoaWNoIG9uZXMgdXNlZCBpdCBvciB0cmllZCB0byB1c2UgaXQuClRoZSBnb2FsIGhlcmUgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIGxpc3QuIEkgd2FudCB0byBrbm93IHdoeSB0aGV5IGNob3NlIGl0LCBob3cgdGhleSBpbXBsZW1lbnRlZCBpdCwgYW5kIHdoYXQgdGhlIHRyYWRlLW9mZnMgYXJlLiBUaGlzIGlzIGEgY2hhbmNlIHRvIGRlZXBlbiBteSBvd24gdW5kZXJzdGFuZGluZywgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBGU19JT01BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlYGAgZnJvbSB5b3VyIHNvdXJjZSBjb2RlIGFuZCBhZGRcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0mIzM5O3MgS2NvbmZpZyBvcHRpb24uXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcbi0tXG5ibG9jay9LY29uZmlnPTU9bWVudWNvbmZpZyBCTE9DS1xuLS1cbmJsb2NrL0tjb25maWctNy0gICAgICAgZGVmYXVsdCB5XG5ibG9jay9LY29uZmlnOjg6ICAgICAgIHNlbGVjdCBGU19JT01BUFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxuLS1cbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxuLS1cbmZzL0tjb25maWctNjEtXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnOjYyOlx0c2VsZWN0IEZTX0lPTUFQXG5mcy9LY29uZmlnLTYzLVx0c2VsZWN0IERBWFxuLS1cbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcbi0tXG5mcy9idHJmcy9LY29uZmlnLTE0LVx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuZnMvYnRyZnMvS2NvbmZpZzoxNTpcdHNlbGVjdCBGU19JT01BUFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cdHNlbGVjdCBSQUlENl9QUVxuLS1cbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTktXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX0lPTUFQXG5mcy9lcm9mcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxuLS1cbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXG4tLVxuZnMvZXh0Mi9LY29uZmlnLTQtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2V4dDIvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQyL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03LVx0c2VsZWN0IENSQzMyXG5mcy9leHQ0L0tjb25maWc6ODpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXh0NC9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xuLS1cbmZzL2YyZnMvS2NvbmZpZy05LVx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG5mcy9mMmZzL0tjb25maWc6MTA6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2YyZnMvS2NvbmZpZy0xMS1cdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcbi0tXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xuLS1cbmZzL2Z1c2UvS2NvbmZpZy00LVx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvZnVzZS9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2Z1c2UvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXG4tLVxuZnMvZ2ZzMi9LY29uZmlnLTctXHRzZWxlY3QgUVVPVEFDVExcbmZzL2dmczIvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9nZnMyL0tjb25maWctOS1cdGhlbHBcbi0tXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xuLS1cbmZzL2hwZnMvS2NvbmZpZy01LVx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9ocGZzL0tjb25maWc6NjpcdHNlbGVjdCBGU19JT01BUFxuZnMvaHBmcy9LY29uZmlnLTctXHRoZWxwXG4tLVxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcbi0tXG5mcy9udGZzL0tjb25maWctNC1cdHNlbGVjdCBOTFNcbmZzL250ZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9udGZzL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcbi0tXG5mcy94ZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG5mcy94ZnMvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy94ZnMvS2NvbmZpZy04LVx0aGVscFxuLS1cbmZzL3pvbmVmcy9LY29uZmlnPTE9Y29uZmlnIFpPTkVGU19GU1xuLS1cbmZzL3pvbmVmcy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcbmZzL3pvbmVmcy9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL3pvbmVmcy9LY29uZmlnLTYtXHRzZWxlY3QgQ1JDMzJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzkxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9tYXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgaW9tYXAgdGhpbmcsIHdoaWNoIEkga25vdyBpcyB3aWRlbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcy4gWEZTLCBFWFQ0LCBCVFJGUyDigJMgdGhvc2UgYXJlIHRoZSBiaWcgcGxheWVycyBoZXJlLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgd2UgbWlnaHQgbmVlZCB0byBzcGVjaWZ5IHRoZW0gZGlyZWN0bHkgYXMgZGVwZW5kZW5jaWVzLCBtYXliZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGVuIEkgcmVtZW1iZXJlZCBgRlNfSU9NQVBgIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBXZSBqdXN0IG5lZWQgdG8gZW5zdXJlIHRoZSBmaWxlc3lzdGVtcyB0aGF0IGxldmVyYWdlIGlvbWFwIGFyZSBlbmFibGVkLgoKV2FpdCwgWEZTIGlzIHByb2JhYmx5IGVuYWJsZWQgYnkgZGVmYXVsdCBhbnl3YXksIHNvIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LCB0aGVuIG1vdmUgb24uIFRoZXJlIGFyZW4mIzM5O3QgYW55IHNwZWNpZmljIGlvbWFwLW9ubHkgY29uZmlncywgYXMgZXhwZWN0ZWQuIEl0JiMzOTtzIGp1c3QgaW5kaXJlY3RseSBhY3RpdmF0ZWQgYnkgZW5hYmxpbmcgYSBmaWxlc3lzdGVtIHVzaW5nIGl0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHNlZSBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiBJIGNhbiBhbHJlYWR5IHRlbGwgdGhhdCBhIGJ1bmNoIG9mIHRoZSBgaWZzXypgIGZ1bmN0aW9ucywgYW5kIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgYXJlIHN0YXRpYywgYW5kIHByb2JhYmx5IGludGVybmFsIHRvIHRoZSBpb21hcCBpbXBsZW1lbnRhdGlvbi4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB1c2VkIG1vcmUgd2lkZWx5LiBBbmQsIGp1c3QgbGlrZSB0aGUgb3RoZXJzLCBgaW9tYXBfemVyb19pdGVyYCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgd2hlcmUgYGlvbWFwX3plcm9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGxlcnMgYW5kIHNlZSBob3cgdGhleSBhcmUgdXNpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfemVyb19pdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU0NT1FWFBPUlRfU1lNQk9MX0dQTChpb21hcF9maWxlX3Vuc2hhcmUpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU1MS0gKi9cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTU1MjpzdGF0aWMgaW5saW5lIGludCBpb21hcF96ZXJvX2l0ZXJfZmx1c2hfYW5kX3N0YWxlKHN0cnVjdCBpb21hcF9pdGVyICppKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NjAtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTYyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTkxLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlx0XHR0cmFjZV9pb21hcF96ZXJvX2l0ZXIoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSAmIzQzOyBvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXHRcdFx0XHRieXRlcyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg2LVx0XHRcdFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY4NzpcdFx0XHRcdHN0YXR1cyA9IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoXHUwMDI2aXRlcik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODgtXHRcdFx0fSBlbHNlIHtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2OTU6XHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFx1MDAyNml0ZXIsIGRpZF96ZXJvLCB3cml0ZV9vcHMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjk2LVx0fVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9ODY9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19yd19xdWV1ZWQpO1xuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcbmZzL2lvbWFwL3RyYWNlLmgtODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIENhbGxlcnMqKgoKQWxyaWdodCwgc28gYGlvbWFwX3plcm9faXRlcmAgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBgaW9tYXBfemVyb19yYW5nZWAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG5vdywgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGZsYWdnZWQgYXMgYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgc3BhcmtzIG15IGludGVyZXN0OyBpZiBpdCYjMzk7cyBleHBvcnRlZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIG1heWJlIGV2ZW4gZGlmZmVyZW50IGZpbGVzeXN0ZW1zLCBvciBhdCBsZWFzdCBvdGhlciBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUgc2FtZSBmaWxlc3lzdGVtLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hvKiBpcyBtYWtpbmcgdXNlIG9mIHRoYXQuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AuIEl0IGNvdWxkIGJlIGEgdmFsdWFibGUgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSB1c2VkIGZvciBzb21lIGtleSBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGl0JiMzOTtzIGFuIHVuZGVydXRpbGl6ZWQgZnVuY3Rpb24gYW5kIGl0cyBjdXJyZW50IHVzZSBpcyBtaXNsZWFkaW5nLiBLbm93aW5nIHdobyBpbnZva2VzIHRoYXQgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyB1bmRlcnN0YW5kaW5nIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0PTQ1PWFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBzdHJ1Y3R1cmU6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdC00OC0gKiBgYGlvbWFwX3JlbGVhc2VfZm9saW9gYFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdDo0OTogKiBgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gYFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdC01MC0gKiBgYGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZWBgXG4tLVxuYmxvY2svZm9wcy5jPTU4NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wcyA9IHtcbi0tXG5ibG9jay9mb3BzLmMtNTg3LVx0LnJlbGVhc2VfZm9saW9cdFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuYmxvY2svZm9wcy5jOjU4ODpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5ibG9jay9mb3BzLmMtNTg5LVx0LnJlYWRfZm9saW9cdFx0PSBibGtkZXZfcmVhZF9mb2xpbyxcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDU5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDY0LVx0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuZnMvZXJvZnMvZGF0YS5jOjQ2NTpcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbmZzL2Vyb2ZzL2RhdGEuYy00NjYtfTtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0zMTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGZ1c2VfZmlsZV9hb3BzICA9IHtcbi0tXG5mcy9mdXNlL2ZpbGUuYy0zMTk3LVx0LnJlbGVhc2VfZm9saW9cdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL2Z1c2UvZmlsZS5jOjMxOTg6XHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9mdXNlL2ZpbGUuYy0zMTk5LVx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbi0tXG5mcy9nZnMyL2FvcHMuYz03MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZ2ZzMl9hb3BzID0ge1xuLS1cbmZzL2dmczIvYW9wcy5jLTcxNi1cdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL2dmczIvYW9wcy5jOjcxNzpcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbmZzL2dmczIvYW9wcy5jLTcxOC1cdC5ibWFwID0gZ2ZzMl9ibWFwLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzY5PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzAtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc3MTp2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzcyLXtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzczOlx0dHJhY2VfaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc3NC1cdFx0XHRcdFx0Zm9saW9fcG9zKGZvbGlvKSAmIzQzOyBvZmZzZXQsIGxlbik7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03ODctfVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3ODg6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4OS1cbi0tXG5mcy9pb21hcC90cmFjZS5oPTgzPURFRklORV9SQU5HRV9FVkVOVChpb21hcF9yZWxlYXNlX2ZvbGlvKTtcbmZzL2lvbWFwL3RyYWNlLmg6ODQ6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xuZnMvaW9tYXAvdHJhY2UuaC04NS1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX2ludmFsaWRhdGVfZmFpbCk7XG4tLVxuZnMvbnRmcy9hb3BzLmM9MjgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzID0ge1xuLS1cbmZzL250ZnMvYW9wcy5jLTI4OS1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL250ZnMvYW9wcy5jOjI5MDpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9udGZzL2FvcHMuYy0yOTEtXHQuc3dhcF9hY3RpdmF0ZSAgICAgICAgICA9IG50ZnNfc3dhcF9hY3RpdmF0ZSxcbi0tXG5mcy9udGZzL2FvcHMuYz0yOTQ9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX21mdF9hb3BzID0ge1xuLS1cbmZzL250ZnMvYW9wcy5jLTMwMy1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL250ZnMvYW9wcy5jOjMwNDpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9udGZzL2FvcHMuYy0zMDUtfTtcbi0tXG5mcy9udGZzMy9pbm9kZS5jPTIxMDA9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX2FvcHMgPSB7XG4tLVxuZnMvbnRmczMvaW5vZGUuYy0yMTA3LVx0LnJlbGVhc2VfZm9saW9cdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL250ZnMzL2lub2RlLmM6MjEwODpcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbmZzL250ZnMzL2lub2RlLmMtMjEwOS19O1xuLS1cbmZzL250ZnMzL2lub2RlLmM9MjExMT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG50ZnNfYW9wc19jbXByID0ge1xuLS1cbmZzL250ZnMzL2lub2RlLmMtMjExNC1cdC5yZWxlYXNlX2ZvbGlvXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG5mcy9udGZzMy9pbm9kZS5jOjIxMTU6XHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9udGZzMy9pbm9kZS5jLTIxMTYtfTtcbi0tXG5mcy94ZnMveGZzX2FvcHMuYz04NDU9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3hmcy94ZnNfYW9wcy5jLTg1MC1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL3hmcy94ZnNfYW9wcy5jOjg1MTpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy94ZnMveGZzX2FvcHMuYy04NTItXHQuYm1hcFx0XHRcdD0geGZzX3ZtX2JtYXAsXG4tLVxuZnMvem9uZWZzL2ZpbGUuYz0xODU9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB6b25lZnNfZmlsZV9hb3BzID0ge1xuLS1cbmZzL3pvbmVmcy9maWxlLmMtMTkwLVx0LnJlbGVhc2VfZm9saW9cdFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuZnMvem9uZWZzL2ZpbGUuYzoxOTE6XHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuZnMvem9uZWZzL2ZpbGUuYy0xOTItXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9MzYwPWJvb2wgaW9tYXBfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9pb21hcC5oOjM2MTp2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7XG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzYyLWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBvbiBteSBtaW5kIHJlZ2FyZGluZyB0aGVzZSBmaWxlc3lzdGVtIGZ1bmN0aW9ucy4KCioqSW52ZXN0aWdhdGluZyBGaWxlc3lzdGVtIEkvTyBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBsYXllciwgdXRpbGl6ZWQgYnkgYSBwcmV0dHkgZGl2ZXJzZSBncm91cCBvZiBmaWxlc3lzdGVtczogYmxvY2ssIGVyb2ZzLCBmdXNlLCBnZnMyLCBudGZzLCBudGZzMywgeGZzLCBhbmQgem9uZWZzLiBUaGF0JiMzOTtzIGEgc29saWQgY3Jvc3Mtc2VjdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBpbnZhbGlkYXRpbmcgY2FjaGVkIGRhdGEsIHByb2JhYmx5IGR1cmluZyB3cml0ZWJhY2sgb3IgZGF0YSBpbnRlZ3JpdHkgb3BlcmF0aW9ucy4gVGhlbiB0aGVyZSYjMzk7cyBgaW9tYXBfemVyb19yYW5nZWAsIHdoaWNoIGFsc28gZ2V0cyB1c2VkIGJ5IHZhcmlvdXMgZmlsZXN5c3RlbXMuIEl0IHN1Z2dlc3RzIGl0IGhhcyBhIHB1cnBvc2UsIHByZXN1bWFibHkgcmVsYXRlZCB0byBlZmZpY2llbnRseSB6ZXJvaW5nIG91dCByYW5nZXMgb2YgZGF0YSBibG9ja3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSwgc28gSSBzaG91bGQgbm93IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpb21hcF96ZXJvX3JhbmdlYC4gTGV0JiMzOTtzIHNlZSB3aGF0IGtpbmRzIG9mIGZpbGVzeXN0ZW0gb3B0aW1pemF0aW9ucyBvciBvcGVyYXRpb25zIGl0JiMzOTtzIHRpZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0PTIxNT1GaWxlc3lzdGVtIHN1cHBvcnQgY29uc2lzdHMgb2Y6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0LTIyNS0gIGFwcHJvcHJpYXRlIGZhdWx0IHNpemUgYW5kIGlvbWFwIG9wZXJhdGlvbnMuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3Q6MjI2OiogQ2FsbGluZyA6YzpmdW5jOmBpb21hcF96ZXJvX3JhbmdlKClgIHBhc3NpbmcgYXBwcm9wcmlhdGUgaW9tYXAgb3BlcmF0aW9uc1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0LTIyNy0gIGluc3RlYWQgb2YgOmM6ZnVuYzpgYmxvY2tfdHJ1bmNhdGVfcGFnZSgpYCBmb3IgYERBWGAgZmlsZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0PTI3MD1aZXJvaW5nIGZvciBGaWxlIE9wZXJhdGlvbnNcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0LTI3Mi1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvb3BlcmF0aW9ucy5yc3Q6MjczOkZpbGVzeXN0ZW1zIGNhbiBjYWxsIGBgaW9tYXBfemVyb19yYW5nZWBgIHRvIHBlcmZvcm0gemVyb2luZyBvZiB0aGVcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvb3BlcmF0aW9ucy5yc3QtMjc0LXBhZ2VjYWNoZSBmb3Igbm9uLXRydW5jYXRpb24gZmlsZSBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvXG4tLVxuZnMvZ2ZzMi9ibWFwLmM9MTMxND1zdGF0aWMgaW50IGdmczJfYmxvY2tfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGxlbmd0aClcbi0tXG5mcy9nZnMyL2JtYXAuYy0xMzE5LVx0bGVuZ3RoID0gbWluKGxlbmd0aCwgaW5vZGUtXHUwMDNlaV9zaXplIC0gZnJvbSk7XG5mcy9nZnMyL2JtYXAuYzoxMzIwOlx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIGZyb20sIGxlbmd0aCwgTlVMTCwgXHUwMDI2Z2ZzMl9pb21hcF9vcHMsXG5mcy9nZnMyL2JtYXAuYy0xMzIxLVx0XHRcdFx1MDAyNmdmczJfaW9tYXBfd3JpdGVfb3BzLCBOVUxMKTtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NTA9aW50XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2NTE6aW9tYXBfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLCBib29sICpkaWRfemVybyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY1Mi1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY5OC19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2OTk6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfemVyb19yYW5nZSk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE3MDAtXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNzAyPWlvbWFwX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzExLVx0XHRyZXR1cm4gMDtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTcxMjpcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBwb3MsIGJsb2Nrc2l6ZSAtIG9mZiwgZGlkX3plcm8sIG9wcyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcxMy1cdFx0XHR3cml0ZV9vcHMsIHByaXZhdGUpO1xuLS1cbmZzL250ZnMvZmlsZS5jPTI1Mj1zdGF0aWMgaW50IG50ZnNfc2V0YXR0cl9zaXplKHN0cnVjdCBpbm9kZSAqdmksIHN0cnVjdCBpYXR0ciAqYXR0cilcbi0tXG5mcy9udGZzL2ZpbGUuYy0yODEtXHRcdFx0XHRhdHRyLVx1MDAzZWlhX3NpemUgLSBvbGRfc2l6ZSk7XG5mcy9udGZzL2ZpbGUuYzoyODI6XHRcdGVyciA9IGlvbWFwX3plcm9fcmFuZ2UodmksIG9sZF9zaXplLCBsZW4sXG5mcy9udGZzL2ZpbGUuYy0yODMtXHRcdFx0XHROVUxMLCBcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxuLS1cbmZzL250ZnMvZmlsZS5jPTg0ND1zdGF0aWMgaW50IG50ZnNfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL250ZnMvZmlsZS5jLTg4My1cdFx0XHRcdCAgIGVuZF9vZmZzZXQpO1xuZnMvbnRmcy9maWxlLmM6ODg0Olx0XHRcdGVyciA9IGlvbWFwX3plcm9fcmFuZ2UodmksIG9mZnNldCwgdG8gLSBvZmZzZXQsXG5mcy9udGZzL2ZpbGUuYy04ODUtXHRcdFx0XHRcdCAgICAgICBOVUxMLCBcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxuLS1cbmZzL250ZnMvZmlsZS5jLTg5OS1cdFx0aWYgKGZyb20gXHUwMDNjIG5pLVx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcbmZzL250ZnMvZmlsZS5jOjkwMDpcdFx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBmcm9tLCBlbmRfb2Zmc2V0IC0gZnJvbSxcbmZzL250ZnMvZmlsZS5jLTkwMS1cdFx0XHRcdFx0ICAgICAgIE5VTEwsIFx1MDAyNm50ZnNfc2Vla19pb21hcF9vcHMsXG4tLVxuZnMvbnRmcy9maWxlLmM9MTAyNj1zdGF0aWMgbG9uZyBudGZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvbnRmcy9maWxlLmMtMTEwMy1cdFx0XHRcdFx0ICAgb2Zmc2V0IC0gb2xkX3NpemUpO1xuZnMvbnRmcy9maWxlLmM6MTEwNDpcdFx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfc2l6ZSwgbGVuLCBOVUxMLFxuZnMvbnRmcy9maWxlLmMtMTEwNS1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNm50ZnNfc2Vla19pb21hcF9vcHMsXG4tLVxuZnMvbnRmcy9pbm9kZS5jPTIzNzU9aW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGlub2RlICp2aSwgY29uc3QgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9udGZzL2lub2RlLmMtMjM5Ni1cdGlmICghTklub0NvbXByZXNzZWQobmkpIFx1MDAyNlx1MDAyNiBvbGRfaW5pdF9zaXplIFx1MDAzYyBvZmZzZXQpIHtcbmZzL250ZnMvaW5vZGUuYzoyMzk3Olx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfaW5pdF9zaXplLFxuZnMvbnRmcy9pbm9kZS5jLTIzOTgtXHRcdFx0XHQgICAgICAgb2Zmc2V0IC0gb2xkX2luaXRfc2l6ZSxcbi0tXG5mcy9udGZzL2lvbWFwLmM9MTU9c3RhdGljIHZvaWQgbnRmc19pb21hcF9wdXRfZm9saW9fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTY1LS8qXG5mcy9udGZzL2lvbWFwLmM6NjY6ICogaW9tYXBfemVyb19yYW5nZSBpcyBjYWxsZWQgZm9yIGFuIGFyZWEgYmV5b25kIHRoZSBpbml0aWFsaXplZCBzaXplLFxuZnMvbnRmcy9pb21hcC5jLTY3LSAqIGdhcmJhZ2UgdmFsdWVzIGNhbiBiZSByZWFkLCBzbyB6ZXJvaW5nIG91dCBpcyBuZWVkZWQuXG4tLVxuZnMvbnRmcy9pb21hcC5jPTMwMT1jb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIG50ZnNfcmVhZF9pb21hcF9vcHMgPSB7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTMwNy0gKiBDaGVjayB0aGF0IHRoZSBjYWNoZWQgaW9tYXAgc3RpbGwgbWF0Y2hlcyB0aGUgTlRGUyBydW5saXN0IGJlZm9yZVxuZnMvbnRmcy9pb21hcC5jOjMwODogKiBpb21hcF96ZXJvX3JhbmdlKCkgaXMgY2FsbGVkLiBpZiB0aGUgcnVubGlzdCBjaGFuZ2VzIHdoaWxlIGlvbWFwIGlzXG5mcy9udGZzL2lvbWFwLmM6MzA5OiAqIGl0ZXJhdGluZyBhIGNhY2hlZCBpb21hcCwgaW9tYXBfemVyb19yYW5nZSgpIG1heSBvdmVyd3JpdGUgZm9saW9zXG5mcy9udGZzL2lvbWFwLmMtMzEwLSAqIHRoYXQgaGF2ZSBiZWVuIGFscmVhZHkgd3JpdHRlbiB3aXRoIHZhbGlkIGRhdGEuXG4tLVxuZnMvbnRmcy9pb21hcC5jPTM3Nj1zdGF0aWMgaW50IG50ZnNfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKVxuZnMvbnRmcy9pb21hcC5jLTM3Ny17XG5mcy9udGZzL2lvbWFwLmM6Mzc4Olx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsXG5mcy9udGZzL2lvbWFwLmMtMzc5LVx0XHRcdFx0b2Zmc2V0LCBsZW5ndGgsXG4tLVxuZnMvbnRmczMvZmlsZS5jPTIyMD1zdGF0aWMgaW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbnRmczMvZmlsZS5jLTIzNS1cbmZzL250ZnMzL2ZpbGUuYzoyMzY6XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCB2YWxpZCwgbmV3X3ZhbGlkIC0gdmFsaWQsIE5VTEwsXG5mcy9udGZzMy9maWxlLmMtMjM3LVx0XHRcdCAgICAgICBcdTAwMjZudGZzX2lvbWFwX29wcywgXHUwMDI2bnRmc19pb21hcF9mb2xpb19vcHMsIE5VTEwpO1xuLS1cbmZzL250ZnMzL2ZpbGUuYz00NDY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3QgdmJvLCBsb2ZmX3QgbGVuKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy01MzUtXHRcdGlmICh0bXAgXHUwMDNlIGZyb20pIHtcbmZzL250ZnMzL2ZpbGUuYzo1MzY6XHRcdFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgZnJvbSwgdG1wIC0gZnJvbSwgTlVMTCxcbmZzL250ZnMzL2ZpbGUuYy01MzctXHRcdFx0XHRcdCAgICAgICBcdTAwMjZudGZzX2lvbWFwX29wcyxcbi0tXG5mcy9udGZzMy9maWxlLmMtNTUzLVx0XHRpZiAodmJvIFx1MDAzYyBlbmRfYSBcdTAwMjZcdTAwMjYgZW5kX2EgXHUwMDNjIGVuZCkge1xuZnMvbnRmczMvZmlsZS5jOjU1NDpcdFx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBlbmRfYSwgZW5kIC0gZW5kX2EsIE5VTEwsXG5mcy9udGZzMy9maWxlLmMtNTU1LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bnRmc19pb21hcF9vcHMsXG4tLVxuZnMvbnRmczMvaW5vZGUuYz02ODA9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxuLS1cbmZzL250ZnMzL2lub2RlLmMtNzE5LSAqIHVzZWQgd2l0aDpcbmZzL250ZnMzL2lub2RlLmM6NzIwOiAqIC0gaW9tYXBfemVyb19yYW5nZVxuZnMvbnRmczMvaW5vZGUuYy03MjEtICogLSBpb21hcF90cnVuY2F0ZV9wYWdlXG4tLVxuZnMvbnRmczMvaW5vZGUuYz04Nzc9c3RhdGljIGludCBudGZzX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuZ3RoLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtOTMyLSAqIHdyaXRlX2JlZ2luICYjNDM7IHB1dF9mb2xpbyAmIzQzOyB3cml0ZV9lbmQuXG5mcy9udGZzMy9pbm9kZS5jOjkzMzogKiBpb21hcF96ZXJvX3JhbmdlXG5mcy9udGZzMy9pbm9kZS5jLTkzNC0gKiBpb21hcF90cnVuY2F0ZV9wYWdlXG4tLVxuZnMveGZzL3hmc19pb21hcC5jPTIzNTc9eGZzX3plcm9fcmFuZ2UoXG4tLVxuZnMveGZzL3hmc19pb21hcC5jLTIzNzAtXHRcdFx0XHQgICAgICBcdTAwMjZ4ZnNfZGF4X3dyaXRlX2lvbWFwX29wcyk7XG5mcy94ZnMveGZzX2lvbWFwLmM6MjM3MTpcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBwb3MsIGxlbiwgZGlkX3plcm8sXG5mcy94ZnMveGZzX2lvbWFwLmMtMjM3Mi1cdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLCBcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzLFxuLS1cbmluY2x1ZGUvbGludXgvaW9tYXAuaD0zNjY9dW5zaWduZWQgaW50IGlvbWFwX2ZpbGxfZGlydHlfZm9saW9zKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgKnN0YXJ0LFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTM2Ny1cdFx0bG9mZl90IGVuZCwgdW5zaWduZWQgaW50ICppb21hcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MzY4OmludCBpb21hcF96ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzY5LVx0XHRib29sICpkaWRfemVybywgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSU9NQVAgRnVuY3Rpb25zIGZvciBPcHRpbWl6ZWQgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJL08gbWFwcGluZyBmdW5jdGlvbnMgYXJlIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgYmxvY2sgbGF5ZXJzLiBJdCBsb29rcyBsaWtlIGBpb21hcF96ZXJvX3JhbmdlYCBpcyBhIGZhaXJseSBjb21tb24gZnVuY3Rpb24sIHV0aWxpemVkIGJ5IGdmczIsIG50ZnMsIG50ZnMzLCBhbmQgeGZzLiBUaGVuLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXZlbiBtb3JlIHdpZGVzcHJlYWQsIHNlcnZpbmcgYmxvY2ssIGVyb2ZzLCBmdXNlLCBnZnMyLCBudGZzLCBudGZzMywgeGZzLCBhbmQgem9uZWZzLiBJbnRlcmVzdGluZy4KCk15IHByaW1hcnkgaW50ZXJlc3QgcmlnaHQgbm93IGxpZXMgd2l0aCBgaW9tYXBfemVyb19pdGVyYCBhbmQgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGJlY2F1c2UgdGhleSBhcHBlYXIgdG8gYmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGZvciB0aGUgbW9kaWZpZWQgbG9naWMgdGhhdCBJJiMzOTttIGZvY3VzaW5nIG9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIHdpdGggdGhlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgZnVuY3Rpb25zLCBnaXZlbiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB0aGVpciBjb3JyZXNwb25kaW5nIGBpb21hcF8qYCBjb3VudGVycGFydHMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGlzIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IG9uIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTE4Mz1zdGF0aWMgdm9pZCBpZnNfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIwMS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjAyOnN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIwMy17XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03NzE9dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03ODQtXHR9IGVsc2Uge1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3ODU6XHRcdGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KGZvbGlvLCBvZmZzZXQsIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4Ni1cdH1cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE4ODQ9aW50IGlvbWFwX3dyaXRlYmFja19mb2xpbyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTk0My1cdCAqL1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxOTQ0Olx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGZvbGlvX3NpemUoZm9saW8pKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTk0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBJL08gTWFwcGluZyBDbGVhbmxpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2UmIzM5O3JlIGxpa2VseSBjbGVhcmluZyBkaXJ0eSBmbGFncyB3aGVuIHdlJiMzOTtyZSBpbnZhbGlkYXRpbmcgb3Igd3JpdGluZyBiYWNrIGRhdGEsIGFzIHdlIGV4cGVjdCB0aGUgZGF0YSB0byBiZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgb24gZGlzay4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29pbi4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZHJpbGwgZG93biBpbnRvIHRoZSBjYWxscyB0byBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YC4gSSB3YW50IHRvIGtub3cgd2hlcmUgYW5kICp3aHkqIHdlJiMzOTtyZSBzZXR0aW5nIHRoZXNlIHJhbmdlcyBhcyBkaXJ0eSBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGF0IHNob3VsZCBvZmZlciBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIHdyaXRlYmFjayBtZWNoYW5pc21zLiBHb3R0YSBlbnN1cmUgd2UmIzM5O3JlIG1hcmtpbmcgdGhpbmdzIGNvcnJlY3RseSB0byBndWFyYW50ZWUgZGF0YSBpbnRlZ3JpdHksIHNvIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCYjMzk7cyBpbml0aWF0aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBkaXJ0eSBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfc2V0X3JhbmdlX2RpcnR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjE3PXN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjM2OnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMzcte1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzkwPWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTUtXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6Nzk2Olx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTctXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDc0LVx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwNzU6XHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3Ni1cdGZpbGVtYXBfZGlydHlfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xODg0PWludCBpb21hcF93cml0ZWJhY2tfZm9saW8oc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5MDgtXHRcdFx0aWZzID0gaWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE5MDk6XHRcdFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBlbmRfcG9zIC0gcG9zKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTkxMC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgxMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBpb21hcCBSYW5nZSBEaXJ0eWluZyBhbmQgVXB0b2RhdGVuZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbWFya2luZyByYW5nZXMgb2YgZGF0YSBhcyBkaXJ0eSB3aXRoaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlvbWFwX2RpcnR5X2ZvbGlvYCwgYF9faW9tYXBfd3JpdGVfZW5kYCwgYW5kIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLiBUaG9zZSBhbGwgbWFrZSBwZXJmZWN0IHNlbnNlIOKAkyB3cml0ZSBvcGVyYXRpb25zIGFuZCB3cml0ZWJhY2sgcHJvY2VkdXJlcyB3b3VsZCBuYXR1cmFsbHkgbmVlZCB0byBzaWduYWwgd2hlbiBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgc3RvcnksIGl0IG1ha2VzIHNlbnNlIHRvIHBpdm90LiBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBoZXJlIHdvdWxkIGJlIHRvIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGVgLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB3aG8mIzM5O3MgbWFuYWdpbmcgdGhlIG5vdGlvbiBvZiBkYXRhIGJlaW5nIHVwLXRvLWRhdGUsIHRvIGdldCBhIGNvbXBsZXRlIHZpZXcgb2YgaG93IHRoaW5ncyB3b3JrLiBVbmRlcnN0YW5kaW5nIHdobyYjMzk7cyBzZXR0aW5nIGRhdGEgYXMgY2xlYW4gb3IgZGlydHksIGFuZCB3aGVuLCB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2YgdGhlIGlvbWFwJiMzOTtzIGRhdGEgaW50ZWdyaXR5IG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NjY9c3RhdGljIGJvb2wgaWZzX3NldF9yYW5nZV91cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzktXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjgwOnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04MS1cdFx0c2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTM5ND1zdGF0aWMgaW50IGlvbWFwX3JlYWRfaW5saW5lX2RhdGEoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MTUtXHRmb2xpb19maWxsX3RhaWwoZm9saW8sIG9mZnNldCwgaW9tYXAtXHUwMDNlaW5saW5lX2RhdGEsIHNpemUpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo0MTY6XHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIG9mZnNldCwgZm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MTctXHRyZXR1cm4gMDtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTUzMz1zdGF0aWMgaW50IGlvbWFwX3JlYWRfZm9saW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTU3My1cdFx0XHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NTc0Olx0XHRcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgcG9mZiwgcGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTU3NS1cdFx0fSBlbHNlIHtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTgxNT1zdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04ODItXHRcdH1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODgzOlx0XHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIHBvZmYsIHBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04ODQtXHR9IHdoaWxlICgoYmxvY2tfc3RhcnQgJiM0Mzs9IHBsZW4pIFx1MDAzYyBibG9ja19lbmQpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTA1Nj1zdGF0aWMgYm9vbCBfX2lvbWFwX3dyaXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3My1cdFx0cmV0dXJuIGZhbHNlO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDc0Olx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzUtXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBGdXp6aW5nIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIGxldCYjMzk7cyBnZXQgdGhpcyBzdHJhaWdodC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRvIHRhcmdldCB3aXRoIHN5emthbGxlci4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgc2V2ZXJhbCBtb2RpZmllZCBmdW5jdGlvbnM6IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGlvbWFwX3plcm9faXRlcmAuIEkgd2FzIGFsc28gdGhpbmtpbmcgYWJvdXQgYSBicm9hZGVyIHNldCBvZiAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYGlvbWFwX3plcm9fcmFuZ2VgLCBgaW9tYXBfd3JpdGViYWNrX2ZvbGlvYCwgYW5kIHRoZSB2YXJpb3VzIGBpb21hcF93cml0ZV8qYCBmdW5jdGlvbnMuCgpUaGVuIEkgcGF1c2VkIGFuZCBjb25zaWRlcmVkIHN0YXRpYyBmdW5jdGlvbnMuIEkga25vdyBzeXprYWxsZXIgKmNhbiogZnV6eiBzdGF0aWMgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGlmIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCBidXQgaXQmIzM5O3MgY2xlYW5lciB0byBwcm92aWRlIHRoZSBleGFjdCBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGRpcmVjdCBjYWxsZXJzIGZvciBiZXR0ZXIgZnV6emluZy4gIFRoaXMgbGVkIG1lIHRvIHJldmlzaXQgdGhlIGxpc3QuIFdoaWxlIGBpb21hcF96ZXJvX2l0ZXJgIGlzIHN0YXRpYywgaXQmIzM5O3Mgbm90IGlubGluZWQsIHNvIHRoYXQmIzM5O3MgdmlhYmxlLiBBbHNvLCBJIHJlYWxpemVkIHRoYXQgSSBoYWQgYSB0eXBvIGFuZCBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIHNob3VsZCBiZSBpbmNsdWRlZC4KClNvLCB0aGUgdXBkYXRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOgoKKiAgIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYAoqICAgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAKKiAgIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAKKiAgIGBpZnNfc2V0X3JhbmdlX2RpcnR5YAoqICAgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gCiogICBgaW9tYXBfemVyb19pdGVyYAoqICAgYGlvbWFwX3plcm9fcmFuZ2VgCgpOb3csIGZvciBjb25maWd1cmF0aW9ucy4gV2UgbmVlZCB0byBzZWxlY3QgZmlsZXN5c3RlbXMgdGhhdCBlbmFibGUgdGhlIElPTUFQIGZlYXR1cmUuIEkgaW5pdGlhbGx5IGxpc3RlZCBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgLCBgRjJGU19GU2AsIGBHRlMyX0ZTYCwgYW5kIGBOVEZTM19GU2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgdW5kZXJseWluZyBgRlNfSU9NQVBgIGNvbmZpZyBpcyBoaWRkZW4uIFRodXMsIHdlIHNob3VsZCBlbmFibGUgZmlsZXN5c3RlbXMgdGhhdCBzZWxlY3QgaXQuIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgIGFyZSBleGNlbGxlbnQgY2hvaWNlcy4gIFRoZXJlZm9yZSwgSSYjMzk7bGwgZ28gd2l0aDoKCiogICBgWEZTX0ZTYAoqICAgYEVYVDRfRlNgCiogICBgQlRSRlNfRlNgCgpGaW5hbGx5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgRlNfSU9NQVBgIGRlcGVuZGVuY3kgaW4gYGZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNTgKCQkJCQkJCW91dHB1dDogMjM1CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElPTUFQIEJ1ZmZlcmVkIElPIFBhdGNoKioKCk9rYXksIGZpcnN0IGdsYW5jZSAtIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBoaWRkZW4gYm9vbGVhbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFF1aWNrIGNoZWNrLi4uIGFoYSEgV2UmIzM5O3ZlIGdvdCBgRlNfREFYYCBzZWxlY3RpbmcgYEZTX0lPTUFQYCwgYFpPTkVGU19GU2Agc2VsZWN0aW5nIGBGU19JT01BUGAsIGFuZCBgRVJPRlNfRlNgIHNlbGVjdGluZyBgRlNfSU9NQVBgLiBHb29kIHRvIGtub3c7IHRoYXQgZXhwYW5kcyB0aGUgcG90ZW50aWFsIGltcGFjdC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGVzeXN0ZW0gaW52b2x2ZW1lbnQsIEkmIzM5O2xsIGZsYWcgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYEJUUkZTX0ZTYCwgYW5kIGBGMkZTX0ZTYCBhcyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBlbmFibGluZyB0aGVzZSB3aWxsIGVuYWJsZSB0aGUgY29yZSBjaGFuZ2VzLgoKVGhlIHBhdGNoJiMzOTtzIGZ1bmN0aW9uIGlzIGNlbnRlcmVkIG9uIHRoZSBidWZmZXJlZCBJL08gbG9naWMgd2l0aGluIElPTUFQLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgZGlydHkgYW5kIHVwLXRvLWRhdGUgYml0cyBhcmUgaGFuZGxlZCBvbiBhIHBlci1ibG9jayBiYXNpcyB3aXRoaW4gYSBmb2xpby4gSXQmIzM5O3MgYWx0ZXJpbmcgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YC4gQWRkaXRpb25hbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgdG8gY2xlYW4gdXAgdGhlIGRpcnR5IGJpdHMgaW4gdGhlIGludmFsaWRhdGVkIHJlZ2lvbiwgYW5kIGZpeGluZyBgaW9tYXBfemVyb19pdGVyYCBzbyBpdCByZXBvcnRzIGNvcnJlY3RseSB3aGV0aGVyIHplcm9pbmcgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgd2hpbGUgaGFuZGxpbmcgZXJyb3JzLiBUaGlzIGlzIGNydWNpYWw7IHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgdXNlZCBieSBxdWl0ZSBhIGZldyBtYWpvciBmaWxlc3lzdGVtcywgaW5jbHVkaW5nIFhGUywgZXh0NCwgYW5kIGJ0cmZzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuCgpBbHJpZ2h0LCB0aW1lIHRvIHJlZmluZSB0aGUgZm9jYWwgcG9pbnRzLiBNeSB0YXJnZXQgZnVuY3Rpb25zIGFyZToKCi0gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgCi0gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAKLSBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgCi0gYGlmc19zZXRfcmFuZ2VfZGlydHlgCi0gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gCi0gYGlvbWFwX3plcm9faXRlcmAKLSBgaW9tYXBfemVyb19yYW5nZWAKCk5vdywgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGMkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICAgJiMzNDtpZnNfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9faXRlciYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvLiBJdCBhbHNvIGNoYW5nZXMgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyB0byBjbGVhciBkaXJ0eSBiaXRzIGZvciB0aGUgaW52YWxpZGF0ZWQgcmFuZ2UsIGFuZCBmaXhlcyBpb21hcF96ZXJvX2l0ZXIgdG8gY29ycmVjdGx5IHJlcG9ydCBpZiB6ZXJvaW5nIG9jY3VycmVkIGFuZCBoYW5kbGUgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1hbnkgbWFqb3IgZmlsZXN5c3RlbXMgKFhGUywgZXh0NCwgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGMkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICAgJiMzNDtpZnNfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9faXRlciYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvLiBJdCBhbHNvIGNoYW5nZXMgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyB0byBjbGVhciBkaXJ0eSBiaXRzIGZvciB0aGUgaW52YWxpZGF0ZWQgcmFuZ2UsIGFuZCBmaXhlcyBpb21hcF96ZXJvX2l0ZXIgdG8gY29ycmVjdGx5IHJlcG9ydCBpZiB6ZXJvaW5nIG9jY3VycmVkIGFuZCBoYW5kbGUgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1hbnkgbWFqb3IgZmlsZXN5c3RlbXMgKFhGUywgZXh0NCwgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjg6NDguOTI3NDI4ODk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDgyNDA5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZnNfc2V0X3JhbmdlX3VwdG9kYXRlXCIsXG4gICAgXCJpZnNfY2xlYXJfcmFuZ2VfZGlydHlcIixcbiAgICBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpZnNfc2V0X3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX2l0ZXJcIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpby4gSXQgYWxzbyBjaGFuZ2VzIGlvbWFwX2ludmFsaWRhdGVfZm9saW8gdG8gY2xlYXIgZGlydHkgYml0cyBmb3IgdGhlIGludmFsaWRhdGVkIHJhbmdlLCBhbmQgZml4ZXMgaW9tYXBfemVyb19pdGVyIHRvIGNvcnJlY3RseSByZXBvcnQgaWYgemVyb2luZyBvY2N1cnJlZCBhbmQgaGFuZGxlIGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYW55IG1ham9yIGZpbGVzeXN0ZW1zIChYRlMsIGV4dDQsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjg6NDguOTI3NDQyNzM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIwMDE3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDA4OjI4OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbi1cXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4tXFx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XFxuK1xcdHVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrO1xcbiBcXG4tXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIG5yX2Jsa3MpO1xcbitcXHRpZiAobGVuKSB7XFxuK1xcdFxcdGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xcbiB9XFxuIFxcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxcbiBcXHRyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0O1xcbiB9XFxuIFxcbisvKlxcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXFxuKyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgaW53YXJkcyBzbyB0aGF0IG9ubHkgYmxvY2tzIGZ1bGx5IGNvdmVyZWQgYnlcXG4rICogdGhlIHJhbmdlIGFyZSBjbGVhcmVkLiAgVGhpcyBpcyByZXF1aXJlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGZvbGlvXFxuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xcbisgKiBpdC5cXG4rICovXFxuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlXFxuK1xcdFxcdFxcdFxcdCBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4rXFx0aWYgKGZpcnN0X2JsayBcXHUwMDNlPSBsYXN0X2JsaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xcbitcXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXFxuK1xcdFxcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZpZnMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtMTk0LDE4ICsyMDcsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4gXFx0XFx0aWZzX2NsZWFyX3JhbmdlX2RpcnR5KGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcXG4gfVxcbiBcXG4rLypcXG4rICogU2V0IHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICsgQGxlbikgd2l0aGluIGFcXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxcbisgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYVxcbisgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nXFxuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxcbisgKi9cXG4gc3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuK1xcdGlmICghbGVuKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmaXJzdF9ibGsgPSBvZmYgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4rXFx0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTtcXG4rXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgKyBibGtzX3Blcl9mb2xpbyxcXG4rXFx0XFx0ICAgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aWZzLVxcdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTc1Nyw2ICs3ODEsOCBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX2NhbmNlbF9kaXJ0eShmb2xpbyk7XFxuIFxcdFxcdGlmc19mcmVlKGZvbGlvKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcXG4gXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcXG4ge1xcbiBcXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XFxuK1xcdGJvb2wgemVyb2VkID0gZmFsc2U7XFxuIFxcdGludCBzdGF0dXM7XFxuIFxcbiBcXHRkbyB7XFxuQEAgLTE1NTQsNiArMTU4MSw4IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcXG4gXFx0XFx0LyogYSBOVUxMIGZvbGlvIG1lYW5zIHdlJ3JlIGRvbmUgd2l0aCBhIGZvbGlvIGJhdGNoICovXFxuIFxcdFxcdGlmICghZm9saW8pIHtcXG4gXFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdFxcdFxcdGJ5dGVzKTtcXG4gXFxuIFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbitcXHRcXHR6ZXJvZWQgPSB0cnVlO1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4gXFxuIFxcdFxcdHJldCA9IGlvbWFwX3dyaXRlX2VuZChpdGVyLCBieXRlcywgYnl0ZXMsIGZvbGlvKTtcXG5AQCAtMTU3MywxMCArMTYwMywxMCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcbiBcXHRcXHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gXFx0fSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSBcXHUwMDNlIDApO1xcbiBcXG4tXFx0aWYgKGRpZF96ZXJvKVxcbitcXHRpZiAoZGlkX3plcm8gXFx1MDAyNlxcdTAwMjYgemVyb2VkKVxcbiBcXHRcXHQqZGlkX3plcm8gPSB0cnVlO1xcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI4OjQ5LjUwMDE0MzA0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NTA5Njg2MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZnNfc2V0X3JhbmdlX3VwdG9kYXRlXCIsXG4gICAgXCJpZnNfY2xlYXJfcmFuZ2VfZGlydHlcIixcbiAgICBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpZnNfc2V0X3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX2l0ZXJcIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpby4gSXQgYWxzbyBjaGFuZ2VzIGlvbWFwX2ludmFsaWRhdGVfZm9saW8gdG8gY2xlYXIgZGlydHkgYml0cyBmb3IgdGhlIGludmFsaWRhdGVkIHJhbmdlLCBhbmQgZml4ZXMgaW9tYXBfemVyb19pdGVyIHRvIGNvcnJlY3RseSByZXBvcnQgaWYgemVyb2luZyBvY2N1cnJlZCBhbmQgaGFuZGxlIGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYW55IG1ham9yIGZpbGVzeXN0ZW1zIChYRlMsIGV4dDQsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDg6Mjg6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTtcbitcdGlmIChsZW4pIHtcbitcdFx0Zmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIGxhc3RfYmxrIC0gZmlyc3RfYmxrICsgMSk7XG4rXHR9XG4gXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xuIH1cbiBcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxuIFx0cmV0dXJuIHJhbmdlX2VuZCAtICpyYW5nZV9zdGFydDtcbiB9XG4gXG4rLypcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieVxuKyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpb1xuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xuKyAqIGl0LlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XG4rXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFx1MDAzZVx1MDAzZVxuK1x0XHRcdFx0IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbitcdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKGZpcnN0X2JsayBcdTAwM2U9IGxhc3RfYmxrKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXG4rXHRcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC0xOTQsMTggKzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIFx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuIH1cbiBcbisvKlxuKyAqIFNldCB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxuKyAqIGJ5IHRoZSByYW5nZSBpcyBtYXJrZWQgZGlydHkuICBUaGlzIGVuc3VyZXMgYmxvY2tzIGNvbnRhaW5pbmcgZXZlbiBhXG4rICogc2luZ2xlIGRpcnR5IGJ5dGUgd2lsbCBiZSBpbmNsdWRlZCBpbiBzdWJzZXF1ZW50IHdyaXRlYmFjaywgcHJldmVudGluZ1xuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuLVx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cyk7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKCFsZW4pXG4rXHRcdHJldHVybjtcbitcbitcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuK1x0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmlmcy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLFxuK1x0XHQgICBsYXN0X2JsayAtIGZpcnN0X2JsayArIDEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC03NTcsNiArNzgxLDggQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4gXHRcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuIFx0XHRmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pO1xuIFx0XHRpZnNfZnJlZShmb2xpbyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcbiB7XG4gXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XG4rXHRib29sIHplcm9lZCA9IGZhbHNlO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdGRvIHtcbkBAIC0xNTU0LDYgKzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdC8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSdyZSBkb25lIHdpdGggYSBmb2xpbyBiYXRjaCAqL1xuIFx0XHRpZiAoIWZvbGlvKSB7XG4gXHRcdFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XG4rXHRcdFx0aWYgKHN0YXR1cylcbitcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdFx0XHRieXRlcyk7XG4gXG4gXHRcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHR6ZXJvZWQgPSB0cnVlO1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiBcbiBcdFx0cmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pO1xuQEAgLTE1NzMsMTAgKzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFxuIFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xuIFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4gXHR9IHdoaWxlICgoYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcikpIFx1MDAzZSAwKTtcbiBcbi1cdGlmIChkaWRfemVybylcbitcdGlmIChkaWRfemVybyBcdTAwMjZcdTAwMjYgemVyb2VkKVxuIFx0XHQqZGlkX3plcm8gPSB0cnVlO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyODo0OS41MDAxNDQ5NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTY1NzMzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4ga2lja3MgaW47IGlvbWFwIGlzICpjb3JlKiBpbmZyYXN0cnVjdHVyZS4gVGhpcyB0b3VjaGVzIHRoZSBmdW5kYW1lbnRhbCBidWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24gdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYnRyZnMsIGFuZCBldmVuIGxlc3MgY29tbW9uIG9uZXMgbGlrZSBnZnMyIGFuZCB6b25lZnMuIEFueSBtb2RpZmljYXRpb24gaGVyZSBpcyBhIHBvdGVudGlhbCBnb2xkbWluZSBmb3IgZnV6emluZyBiZWNhdXNlIG9mIHRoZSBicm9hZCBpbXBhY3QuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IGltcGFjdCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgYWxsIGludGVncmFsIHBhcnRzIG9mIGhvdyBpb21hcCBoYW5kbGVzIGRhdGEgcmFuZ2VzLCBkaXJ0eSBwYWdlcywgemVyb2luZyBvdXQgcmVnaW9ucywgYW5kIGludmFsaWRhdGluZyBmb2xpbyBkYXRhLiBUaGVzZSBhcmUgY2xhc3NpYyBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGtleSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBJL08gcGF0aC5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIGFzIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgdGhlcmUuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGFyZWEsIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRvIHNldCBmb3IgdGhlIGZ1enppbmcuIGBGU19JT01BUGAgYW5kIGBJT01BUGAgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIEknbGwgcnVuIGEgcXVpY2sgYGdyZXBgIHNlYXJjaC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IEkgbmVlZCBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjg6NTUuNjY1ODgwNDM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTU1MjcxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxcbi0tXFxuZnMvS2NvbmZpZy0xNy1cXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxcbmZzL0tjb25maWctMTktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyODo1OC42ODE0MTM0MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODc1MTU0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyIG9mIGZpbGVzeXN0ZW1zIGFuZCBpb21hcCwgcmVuZGVyZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW1zIGFuZCBJT01BUCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZmlndXJlIG91dCB3aGljaCBmaWxlc3lzdGVtcyBsZXZlcmFnZSBpb21hcC4gVGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIHF1ZXJ5OyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgaG93IG1vZGVybiBzdG9yYWdlIHdvcmtzLCBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyB0aGF0IHJlbGF0ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgaW9tYXAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaW9tYXAgcHJvdmlkZXMgYmVuZWZpdCBhbmQgd2hlcmUgaXQgZG9lcyBub3QuXG5cbkZpcnN0LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeS4gSW9tYXAgaXMgZnVuZGFtZW50YWxseSBhbiBJL08gbWFwcGluZyBzdHJhdGVneS4gSXQncyBhYm91dCBlZmZpY2llbnRseSB0cmFuc2xhdGluZyBsb2dpY2FsIGJsb2NrIGFkZHJlc3NlcyB1c2VkIGJ5IHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBwaHlzaWNhbCBibG9jayBhZGRyZXNzZXMgb24gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2UuIEl0J3MgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBzcGFyc2UgZmlsZXMsIG91dC1vZi1vcmRlciB3cml0ZXMsIG9yIGNvbXBsZXggc3RvcmFnZSBsYXlvdXRzLiBJIG5lZWQgdG8gcmVjYWxsIHRoZSBkZXRhaWxzIG9mIHRoaXMgYW5kIHRoZSBiZW5lZml0cyBvZiBpdHMgdXNlLlxuXG5Ob3csIHdoaWNoIGZpbGVzeXN0ZW1zICphY3R1YWxseSogdXNlIGl0PyBJIGtub3cgRVhUNCBkb2Vzbid0IChvciBhdCBsZWFzdCwgZGlkbid0LCBvciBub3QgZXhjbHVzaXZlbHkpIGFuZCBCdHJmcyBhbmQgWEZTIGhhdmUgdGhlaXIgb3duIEkvTyBzdHJhdGVnaWVzLiBJIHJlbWVtYmVyIHNlZWluZyByZWZlcmVuY2VzIHRvIHNwZWNpZmljIGZpbGVzeXN0ZW1zLCBidXQgYSBxdWljayBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGRvY3VtZW50YXRpb24sIHRoZW4gcGVyaGFwcyBsb29rIGF0IHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNsdWVzIGFib3V0IG1vZHVsZSB1c2FnZSwgYW5kIGNyb3NzIHJlZmVyZW5jZSB0aGVtLiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjZXJ0YWluLlxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgdmFyaW91cyBzdG9yYWdlIHRlY2hub2xvZ2llcyBhbmQgaGFyZHdhcmUgdGhhdCB0aGlzIG1hcHBpbmcgbXVzdCB3b3JrIHdpdGguIFRoZSBpbnRyaWNhY2llcyBvZiBpb21hcCBsaWtlbHkgdmFyeSBjb25zaWRlcmFibHkgZGVwZW5kaW5nIG9uIHRoZSBuYXR1cmUgb2YgdGhlIHN0b3JhZ2U7IFNTRHMsIEhERHMsIGFuZCBuZXR3b3JrZWQgc3RvcmFnZSBhbGwgcHJlc2VudCBkaWZmZXJlbnQgY2hhbGxlbmdlcyBhbmQgb3B0aW1pemF0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBjb250ZXh0IGFzIEkgaW52ZXN0aWdhdGUuXG5cblNvLCBJJ20gZ29pbmcgdG8gZm9ybXVsYXRlIGEgc2VhcmNoIHF1ZXJ5IHRvIGlkZW50aWZ5IGZpbGVzeXN0ZW1zIHVzaW5nIHRoZSB0ZXJtLiBJZGVhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSB0aGF0IGxldmVyYWdlIGlvbWFwIGFzIGEgKmNvcmUqIGNvbXBvbmVudCBmb3IgaXRzIEkvTyBvcGVyYXRpb25zLiBJIGFsc28gd2FudCB0byBmaW5kIHdoaWNoIG9uZXMgdXNlZCBpdCBvciB0cmllZCB0byB1c2UgaXQuXG5UaGUgZ29hbCBoZXJlIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUsIG5vdCBqdXN0IGEgc3VyZmFjZS1sZXZlbCBsaXN0LiBJIHdhbnQgdG8ga25vdyB3aHkgdGhleSBjaG9zZSBpdCwgaG93IHRoZXkgaW1wbGVtZW50ZWQgaXQsIGFuZCB3aGF0IHRoZSB0cmFkZS1vZmZzIGFyZS4gVGhpcyBpcyBhIGNoYW5jZSB0byBkZWVwZW4gbXkgb3duIHVuZGVyc3RhbmRpbmcsIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjA4LjU1NjU2OTM1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyMTI2MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBGU19JT01BUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VgYCBmcm9tIHlvdXIgc291cmNlIGNvZGUgYW5kIGFkZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0ncyBLY29uZmlnIG9wdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcXG4tLVxcbmJsb2NrL0tjb25maWc9NT1tZW51Y29uZmlnIEJMT0NLXFxuLS1cXG5ibG9jay9LY29uZmlnLTctICAgICAgIGRlZmF1bHQgeVxcbmJsb2NrL0tjb25maWc6ODogICAgICAgc2VsZWN0IEZTX0lPTUFQXFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjYyOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL0tjb25maWctNjMtXFx0c2VsZWN0IERBWFxcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXFxuZnMvYnRyZnMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9idHJmcy9LY29uZmlnLTE2LVxcdHNlbGVjdCBSQUlENl9QUVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy05LVxcdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Vyb2ZzL0tjb25maWctMTEtXFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy00LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDIvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDIvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9leHQ0L0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQ0L0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG5mcy9mMmZzL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZjJmcy9LY29uZmlnLTExLVxcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvZnVzZS9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZnVzZS9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy03LVxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL2dmczIvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2dmczIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXFxuLS1cXG5mcy9ocGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9ocGZzL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5mcy9udGZzL0tjb25maWc9Mj1jb25maWcgTlRGU19GU1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTQtXFx0c2VsZWN0IE5MU1xcbmZzL250ZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL250ZnMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL3hmcy9LY29uZmlnPTI9Y29uZmlnIFhGU19GU1xcbi0tXFxuZnMveGZzL0tjb25maWctNi1cXHRzZWxlY3QgQ1JDMzJcXG5mcy94ZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL3hmcy9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbmZzL3pvbmVmcy9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvem9uZWZzL0tjb25maWctNi1cXHRzZWxlY3QgQ1JDMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6MTAuNzc4Njk5OTg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1ODI3Mzg1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb21hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgaW9tYXAgdGhpbmcsIHdoaWNoIEkga25vdyBpcyB3aWRlbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcy4gWEZTLCBFWFQ0LCBCVFJGUyDigJMgdGhvc2UgYXJlIHRoZSBiaWcgcGxheWVycyBoZXJlLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgd2UgbWlnaHQgbmVlZCB0byBzcGVjaWZ5IHRoZW0gZGlyZWN0bHkgYXMgZGVwZW5kZW5jaWVzLCBtYXliZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGVuIEkgcmVtZW1iZXJlZCBgRlNfSU9NQVBgIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gdGhhdCdzIGEgZGVhZCBlbmQuIFdlIGp1c3QgbmVlZCB0byBlbnN1cmUgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgbGV2ZXJhZ2UgaW9tYXAgYXJlIGVuYWJsZWQuXG5cbldhaXQsIFhGUyBpcyBwcm9iYWJseSBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LCBzbyBsZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LCB0aGVuIG1vdmUgb24uIFRoZXJlIGFyZW4ndCBhbnkgc3BlY2lmaWMgaW9tYXAtb25seSBjb25maWdzLCBhcyBleHBlY3RlZC4gSXQncyBqdXN0IGluZGlyZWN0bHkgYWN0aXZhdGVkIGJ5IGVuYWJsaW5nIGEgZmlsZXN5c3RlbSB1c2luZyBpdC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEkgc2VlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGlvbWFwX3plcm9faXRlcmAuIEkgY2FuIGFscmVhZHkgdGVsbCB0aGF0IGEgYnVuY2ggb2YgdGhlIGBpZnNfKmAgZnVuY3Rpb25zLCBhbmQgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCBhcmUgc3RhdGljLCBhbmQgcHJvYmFibHkgaW50ZXJuYWwgdG8gdGhlIGlvbWFwIGltcGxlbWVudGF0aW9uLiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXhwb3J0ZWQsIHNvIGl0J3MgcHJvYmFibHkgdXNlZCBtb3JlIHdpZGVseS4gQW5kLCBqdXN0IGxpa2UgdGhlIG90aGVycywgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgd2hlcmUgYGlvbWFwX3plcm9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbGVycyBhbmQgc2VlIGhvdyB0aGV5IGFyZSB1c2luZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOToyMi4zNjE0NDAwNTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3Nzg0NjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF96ZXJvX2l0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNTQ1PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ZpbGVfdW5zaGFyZSk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NTEtICovXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTUyOnN0YXRpYyBpbmxpbmUgaW50IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoc3RydWN0IGlvbWFwX2l0ZXIgKmkpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2MC1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2Mi1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlxcdFxcdHRyYWNlX2lvbWFwX3plcm9faXRlcihpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXFx0XFx0XFx0XFx0Ynl0ZXMpO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODYtXFx0XFx0XFx0XFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2ODc6XFx0XFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfemVyb19pdGVyX2ZsdXNoX2FuZF9zdGFsZShcXHUwMDI2aXRlcik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg4LVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk1OlxcdFxcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFxcdTAwMjZpdGVyLCBkaWRfemVybywgd3JpdGVfb3BzKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTYtXFx0fVxcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD04Nj1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX3J3X3F1ZXVlZCk7XFxuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcXG5mcy9pb21hcC90cmFjZS5oLTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOToyNC4zMzkyOTU1MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQyMDExOTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIGBpb21hcF96ZXJvX2l0ZXJgIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYGlvbWFwX3plcm9fcmFuZ2VgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgYSBnaXZlbi4gQnV0IG5vdywgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGZsYWdnZWQgYXMgYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgc3BhcmtzIG15IGludGVyZXN0OyBpZiBpdCdzIGV4cG9ydGVkLCB0aGF0IG1lYW5zIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBtYXliZSBldmVuIGRpZmZlcmVudCBmaWxlc3lzdGVtcywgb3IgYXQgbGVhc3Qgb3RoZXIgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIHNhbWUgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndobyogaXMgbWFraW5nIHVzZSBvZiB0aGF0LiBJdCdzIHRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AuIEl0IGNvdWxkIGJlIGEgdmFsdWFibGUgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSB1c2VkIGZvciBzb21lIGtleSBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGl0J3MgYW4gdW5kZXJ1dGlsaXplZCBmdW5jdGlvbiBhbmQgaXRzIGN1cnJlbnQgdXNlIGlzIG1pc2xlYWRpbmcuIEtub3dpbmcgd2hvIGludm9rZXMgdGhhdCBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgaXQuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOTozNi43NTk0MTY4MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzI0Nzg3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0PTQ1PWFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBzdHJ1Y3R1cmU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0LTQ4LSAqIGBgaW9tYXBfcmVsZWFzZV9mb2xpb2BgXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdDo0OTogKiBgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gYFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvb3BlcmF0aW9ucy5yc3QtNTAtICogYGBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGVgYFxcbi0tXFxuYmxvY2svZm9wcy5jPTU4NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wcyA9IHtcXG4tLVxcbmJsb2NrL2ZvcHMuYy01ODctXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuYmxvY2svZm9wcy5jOjU4ODpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5ibG9jay9mb3BzLmMtNTg5LVxcdC5yZWFkX2ZvbGlvXFx0XFx0PSBibGtkZXZfcmVhZF9mb2xpbyxcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYz00NTk9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlcm9mc19hb3BzID0ge1xcbi0tXFxuZnMvZXJvZnMvZGF0YS5jLTQ2NC1cXHQucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuZnMvZXJvZnMvZGF0YS5jOjQ2NTpcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXFxuZnMvZXJvZnMvZGF0YS5jLTQ2Ni19O1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MzE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBmdXNlX2ZpbGVfYW9wcyAgPSB7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0zMTk3LVxcdC5yZWxlYXNlX2ZvbGlvXFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL2Z1c2UvZmlsZS5jOjMxOTg6XFx0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbmZzL2Z1c2UvZmlsZS5jLTMxOTktXFx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcXG4tLVxcbmZzL2dmczIvYW9wcy5jPTcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX2FvcHMgPSB7XFxuLS1cXG5mcy9nZnMyL2FvcHMuYy03MTYtXFx0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL2dmczIvYW9wcy5jOjcxNzpcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXFxuZnMvZ2ZzMi9hb3BzLmMtNzE4LVxcdC5ibWFwID0gZ2ZzMl9ibWFwLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03Njk9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfcmVsZWFzZV9mb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzAtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3NzE6dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzIte1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzczOlxcdHRyYWNlX2lvbWFwX2ludmFsaWRhdGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzQtXFx0XFx0XFx0XFx0XFx0Zm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg3LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4OS1cXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmg9ODM9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmg6ODQ6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmgtODUtREVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19pbnZhbGlkYXRlX2ZhaWwpO1xcbi0tXFxuZnMvbnRmcy9hb3BzLmM9MjgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9hb3BzLmMtMjg5LVxcdC5yZWxlYXNlX2ZvbGlvXFx0XFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL250ZnMvYW9wcy5jOjI5MDpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9udGZzL2FvcHMuYy0yOTEtXFx0LnN3YXBfYWN0aXZhdGUgICAgICAgICAgPSBudGZzX3N3YXBfYWN0aXZhdGUsXFxuLS1cXG5mcy9udGZzL2FvcHMuYz0yOTQ9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX21mdF9hb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9hb3BzLmMtMzAzLVxcdC5yZWxlYXNlX2ZvbGlvXFx0XFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL250ZnMvYW9wcy5jOjMwNDpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9udGZzL2FvcHMuYy0zMDUtfTtcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9MjEwMD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG50ZnNfYW9wcyA9IHtcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtMjEwNy1cXHQucmVsZWFzZV9mb2xpb1xcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG5mcy9udGZzMy9pbm9kZS5jOjIxMDg6XFx0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbmZzL250ZnMzL2lub2RlLmMtMjEwOS19O1xcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz0yMTExPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzX2NtcHIgPSB7XFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTIxMTQtXFx0LnJlbGVhc2VfZm9saW9cXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuZnMvbnRmczMvaW5vZGUuYzoyMTE1OlxcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9udGZzMy9pbm9kZS5jLTIxMTYtfTtcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTg0NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy94ZnMveGZzX2FvcHMuYy04NTAtXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuZnMveGZzL3hmc19hb3BzLmM6ODUxOlxcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbmZzL3hmcy94ZnNfYW9wcy5jLTg1Mi1cXHQuYm1hcFxcdFxcdFxcdD0geGZzX3ZtX2JtYXAsXFxuLS1cXG5mcy96b25lZnMvZmlsZS5jPTE4NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHpvbmVmc19maWxlX2FvcHMgPSB7XFxuLS1cXG5mcy96b25lZnMvZmlsZS5jLTE5MC1cXHQucmVsZWFzZV9mb2xpb1xcdFxcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG5mcy96b25lZnMvZmlsZS5jOjE5MTpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy96b25lZnMvZmlsZS5jLTE5Mi1cXHQubWlncmF0ZV9mb2xpb1xcdFxcdD0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb21hcC5oPTM2MD1ib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MzYxOnZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzYyLWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOTozOC43MzE5MDAxNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NjEwNDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBvbiBteSBtaW5kIHJlZ2FyZGluZyB0aGVzZSBmaWxlc3lzdGVtIGZ1bmN0aW9ucy5cblxuKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW0gSS9PIE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCBzbyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIHV0aWxpemVkIGJ5IGEgcHJldHR5IGRpdmVyc2UgZ3JvdXAgb2YgZmlsZXN5c3RlbXM6IGJsb2NrLCBlcm9mcywgZnVzZSwgZ2ZzMiwgbnRmcywgbnRmczMsIHhmcywgYW5kIHpvbmVmcy4gVGhhdCdzIGEgc29saWQgY3Jvc3Mtc2VjdGlvbi4gSXQncyBjbGVhciB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGludmFsaWRhdGluZyBjYWNoZWQgZGF0YSwgcHJvYmFibHkgZHVyaW5nIHdyaXRlYmFjayBvciBkYXRhIGludGVncml0eSBvcGVyYXRpb25zLiBUaGVuIHRoZXJlJ3MgYGlvbWFwX3plcm9fcmFuZ2VgLCB3aGljaCBhbHNvIGdldHMgdXNlZCBieSB2YXJpb3VzIGZpbGVzeXN0ZW1zLiBJdCBzdWdnZXN0cyBpdCBoYXMgYSBwdXJwb3NlLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gZWZmaWNpZW50bHkgemVyb2luZyBvdXQgcmFuZ2VzIG9mIGRhdGEgYmxvY2tzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byBpdHMgdXNhZ2UsIHNvIEkgc2hvdWxkIG5vdyBjaGVjayB0aGUgY2FsbGVycyBvZiBgaW9tYXBfemVyb19yYW5nZWAuIExldCdzIHNlZSB3aGF0IGtpbmRzIG9mIGZpbGVzeXN0ZW0gb3B0aW1pemF0aW9ucyBvciBvcGVyYXRpb25zIGl0J3MgdGllZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjQyLjEyODAwNzI1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTk2MTQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF96ZXJvX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGF4LnJzdD0yMTU9RmlsZXN5c3RlbSBzdXBwb3J0IGNvbnNpc3RzIG9mOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0LTIyNS0gIGFwcHJvcHJpYXRlIGZhdWx0IHNpemUgYW5kIGlvbWFwIG9wZXJhdGlvbnMuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0OjIyNjoqIENhbGxpbmcgOmM6ZnVuYzpgaW9tYXBfemVyb19yYW5nZSgpYCBwYXNzaW5nIGFwcHJvcHJpYXRlIGlvbWFwIG9wZXJhdGlvbnNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QtMjI3LSAgaW5zdGVhZCBvZiA6YzpmdW5jOmBibG9ja190cnVuY2F0ZV9wYWdlKClgIGZvciBgREFYYCBmaWxlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdD0yNzA9WmVyb2luZyBmb3IgRmlsZSBPcGVyYXRpb25zXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0LTI3Mi1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0OjI3MzpGaWxlc3lzdGVtcyBjYW4gY2FsbCBgYGlvbWFwX3plcm9fcmFuZ2VgYCB0byBwZXJmb3JtIHplcm9pbmcgb2YgdGhlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdC0yNzQtcGFnZWNhY2hlIGZvciBub24tdHJ1bmNhdGlvbiBmaWxlIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IGFsaWduZWQgdG9cXG4tLVxcbmZzL2dmczIvYm1hcC5jPTEzMTQ9c3RhdGljIGludCBnZnMyX2Jsb2NrX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20sIGxvZmZfdCBsZW5ndGgpXFxuLS1cXG5mcy9nZnMyL2JtYXAuYy0xMzE5LVxcdGxlbmd0aCA9IG1pbihsZW5ndGgsIGlub2RlLVxcdTAwM2VpX3NpemUgLSBmcm9tKTtcXG5mcy9nZnMyL2JtYXAuYzoxMzIwOlxcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBmcm9tLCBsZW5ndGgsIE5VTEwsIFxcdTAwMjZnZnMyX2lvbWFwX29wcyxcXG5mcy9nZnMyL2JtYXAuYy0xMzIxLVxcdFxcdFxcdFxcdTAwMjZnZnMyX2lvbWFwX3dyaXRlX29wcywgTlVMTCk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NTA9aW50XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjUxOmlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjUyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY5OC19XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk5OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3plcm9fcmFuZ2UpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcwMC1cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTcwMj1pb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzExLVxcdFxcdHJldHVybiAwO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTcxMjpcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgcG9zLCBibG9ja3NpemUgLSBvZmYsIGRpZF96ZXJvLCBvcHMsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzEzLVxcdFxcdFxcdHdyaXRlX29wcywgcHJpdmF0ZSk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0yNTI9c3RhdGljIGludCBudGZzX3NldGF0dHJfc2l6ZShzdHJ1Y3QgaW5vZGUgKnZpLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0yODEtXFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlaWFfc2l6ZSAtIG9sZF9zaXplKTtcXG5mcy9udGZzL2ZpbGUuYzoyODI6XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZSh2aSwgb2xkX3NpemUsIGxlbixcXG5mcy9udGZzL2ZpbGUuYy0yODMtXFx0XFx0XFx0XFx0TlVMTCwgXFx1MDAyNm50ZnNfc2Vla19pb21hcF9vcHMsXFxuLS1cXG5mcy9udGZzL2ZpbGUuYz04NDQ9c3RhdGljIGludCBudGZzX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTg4My1cXHRcXHRcXHRcXHQgICBlbmRfb2Zmc2V0KTtcXG5mcy9udGZzL2ZpbGUuYzo4ODQ6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZSh2aSwgb2Zmc2V0LCB0byAtIG9mZnNldCxcXG5mcy9udGZzL2ZpbGUuYy04ODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIFxcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtODk5LVxcdFxcdGlmIChmcm9tIFxcdTAwM2MgbmktXFx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcXG5mcy9udGZzL2ZpbGUuYzo5MDA6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZSh2aSwgZnJvbSwgZW5kX29mZnNldCAtIGZyb20sXFxuZnMvbnRmcy9maWxlLmMtOTAxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBcXHUwMDI2bnRmc19zZWVrX2lvbWFwX29wcyxcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTEwMjY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTEwMy1cXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQgLSBvbGRfc2l6ZSk7XFxuZnMvbnRmcy9maWxlLmM6MTEwNDpcXHRcXHRcXHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfc2l6ZSwgbGVuLCBOVUxMLFxcbmZzL250ZnMvZmlsZS5jLTExMDUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTIzNzU9aW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGlub2RlICp2aSwgY29uc3QgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMzk2LVxcdGlmICghTklub0NvbXByZXNzZWQobmkpIFxcdTAwMjZcXHUwMDI2IG9sZF9pbml0X3NpemUgXFx1MDAzYyBvZmZzZXQpIHtcXG5mcy9udGZzL2lub2RlLmM6MjM5NzpcXHRcXHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfaW5pdF9zaXplLFxcbmZzL250ZnMvaW5vZGUuYy0yMzk4LVxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXQgLSBvbGRfaW5pdF9zaXplLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jPTE1PXN0YXRpYyB2b2lkIG50ZnNfaW9tYXBfcHV0X2ZvbGlvX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY1LS8qXFxuZnMvbnRmcy9pb21hcC5jOjY2OiAqIGlvbWFwX3plcm9fcmFuZ2UgaXMgY2FsbGVkIGZvciBhbiBhcmVhIGJleW9uZCB0aGUgaW5pdGlhbGl6ZWQgc2l6ZSxcXG5mcy9udGZzL2lvbWFwLmMtNjctICogZ2FyYmFnZSB2YWx1ZXMgY2FuIGJlIHJlYWQsIHNvIHplcm9pbmcgb3V0IGlzIG5lZWRlZC5cXG4tLVxcbmZzL250ZnMvaW9tYXAuYz0zMDE9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBudGZzX3JlYWRfaW9tYXBfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTMwNy0gKiBDaGVjayB0aGF0IHRoZSBjYWNoZWQgaW9tYXAgc3RpbGwgbWF0Y2hlcyB0aGUgTlRGUyBydW5saXN0IGJlZm9yZVxcbmZzL250ZnMvaW9tYXAuYzozMDg6ICogaW9tYXBfemVyb19yYW5nZSgpIGlzIGNhbGxlZC4gaWYgdGhlIHJ1bmxpc3QgY2hhbmdlcyB3aGlsZSBpb21hcCBpc1xcbmZzL250ZnMvaW9tYXAuYzozMDk6ICogaXRlcmF0aW5nIGEgY2FjaGVkIGlvbWFwLCBpb21hcF96ZXJvX3JhbmdlKCkgbWF5IG92ZXJ3cml0ZSBmb2xpb3NcXG5mcy9udGZzL2lvbWFwLmMtMzEwLSAqIHRoYXQgaGF2ZSBiZWVuIGFscmVhZHkgd3JpdHRlbiB3aXRoIHZhbGlkIGRhdGEuXFxuLS1cXG5mcy9udGZzL2lvbWFwLmM9Mzc2PXN0YXRpYyBpbnQgbnRmc196ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgpXFxuZnMvbnRmcy9pb21hcC5jLTM3Ny17XFxuZnMvbnRmcy9pb21hcC5jOjM3ODpcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSxcXG5mcy9udGZzL2lvbWFwLmMtMzc5LVxcdFxcdFxcdFxcdG9mZnNldCwgbGVuZ3RoLFxcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTIyMD1zdGF0aWMgaW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMjM1LVxcbmZzL250ZnMzL2ZpbGUuYzoyMzY6XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgdmFsaWQsIG5ld192YWxpZCAtIHZhbGlkLCBOVUxMLFxcbmZzL250ZnMzL2ZpbGUuYy0yMzctXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZudGZzX2lvbWFwX29wcywgXFx1MDAyNm50ZnNfaW9tYXBfZm9saW9fb3BzLCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYz00NDY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3QgdmJvLCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTUzNS1cXHRcXHRpZiAodG1wIFxcdTAwM2UgZnJvbSkge1xcbmZzL250ZnMzL2ZpbGUuYzo1MzY6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgZnJvbSwgdG1wIC0gZnJvbSwgTlVMTCxcXG5mcy9udGZzMy9maWxlLmMtNTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bnRmc19pb21hcF9vcHMsXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNTUzLVxcdFxcdGlmICh2Ym8gXFx1MDAzYyBlbmRfYSBcXHUwMDI2XFx1MDAyNiBlbmRfYSBcXHUwMDNjIGVuZCkge1xcbmZzL250ZnMzL2ZpbGUuYzo1NTQ6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgZW5kX2EsIGVuZCAtIGVuZF9hLCBOVUxMLFxcbmZzL250ZnMzL2ZpbGUuYy01NTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZudGZzX2lvbWFwX29wcyxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9NjgwPWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtNzE5LSAqIHVzZWQgd2l0aDpcXG5mcy9udGZzMy9pbm9kZS5jOjcyMDogKiAtIGlvbWFwX3plcm9fcmFuZ2VcXG5mcy9udGZzMy9pbm9kZS5jLTcyMS0gKiAtIGlvbWFwX3RydW5jYXRlX3BhZ2VcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9ODc3PXN0YXRpYyBpbnQgbnRmc19pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbmd0aCxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtOTMyLSAqIHdyaXRlX2JlZ2luICsgcHV0X2ZvbGlvICsgd3JpdGVfZW5kLlxcbmZzL250ZnMzL2lub2RlLmM6OTMzOiAqIGlvbWFwX3plcm9fcmFuZ2VcXG5mcy9udGZzMy9pbm9kZS5jLTkzNC0gKiBpb21hcF90cnVuY2F0ZV9wYWdlXFxuLS1cXG5mcy94ZnMveGZzX2lvbWFwLmM9MjM1Nz14ZnNfemVyb19yYW5nZShcXG4tLVxcbmZzL3hmcy94ZnNfaW9tYXAuYy0yMzcwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ4ZnNfZGF4X3dyaXRlX2lvbWFwX29wcyk7XFxuZnMveGZzL3hmc19pb21hcC5jOjIzNzE6XFx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHBvcywgbGVuLCBkaWRfemVybyxcXG5mcy94ZnMveGZzX2lvbWFwLmMtMjM3Mi1cXHRcXHRcXHRcXHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcywgXFx1MDAyNnhmc19pb21hcF93cml0ZV9vcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9MzY2PXVuc2lnbmVkIGludCBpb21hcF9maWxsX2RpcnR5X2ZvbGlvcyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90ICpzdGFydCxcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzY3LVxcdFxcdGxvZmZfdCBlbmQsIHVuc2lnbmVkIGludCAqaW9tYXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvaW9tYXAuaDozNjg6aW50IGlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzY5LVxcdFxcdGJvb2wgKmRpZF96ZXJvLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjQzLjk2Nzk3NjAxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA0ODIwNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT01BUCBGdW5jdGlvbnMgZm9yIE9wdGltaXplZCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBJL08gbWFwcGluZyBmdW5jdGlvbnMgYXJlIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgYmxvY2sgbGF5ZXJzLiBJdCBsb29rcyBsaWtlIGBpb21hcF96ZXJvX3JhbmdlYCBpcyBhIGZhaXJseSBjb21tb24gZnVuY3Rpb24sIHV0aWxpemVkIGJ5IGdmczIsIG50ZnMsIG50ZnMzLCBhbmQgeGZzLiBUaGVuLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXZlbiBtb3JlIHdpZGVzcHJlYWQsIHNlcnZpbmcgYmxvY2ssIGVyb2ZzLCBmdXNlLCBnZnMyLCBudGZzLCBudGZzMywgeGZzLCBhbmQgem9uZWZzLiBJbnRlcmVzdGluZy5cblxuTXkgcHJpbWFyeSBpbnRlcmVzdCByaWdodCBub3cgbGllcyB3aXRoIGBpb21hcF96ZXJvX2l0ZXJgIGFuZCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYmVjYXVzZSB0aGV5IGFwcGVhciB0byBiZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHRoZSBtb2RpZmllZCBsb2dpYyB0aGF0IEknbSBmb2N1c2luZyBvbi4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIHdpdGggdGhlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgZnVuY3Rpb25zLCBnaXZlbiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB0aGVpciBjb3JyZXNwb25kaW5nIGBpb21hcF8qYCBjb3VudGVycGFydHMuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhpcyB3aWxsIHByb3ZpZGUgaW5zaWdodCBvbiB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6NDguNTcyNzk5MDY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQxOTY1ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTgzPXN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMDI6c3RhdGljIHZvaWQgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIwMy17XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTc3MT12b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg0LVxcdH0gZWxzZSB7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3ODU6XFx0XFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4Ni1cXHR9XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE4ODQ9aW50IGlvbWFwX3dyaXRlYmFja19mb2xpbyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTQzLVxcdCAqL1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTk0NDpcXHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTk0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6NTAuNjE0Nzc3NTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODU3OTc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEkvTyBNYXBwaW5nIENsZWFubGluZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSdyZSBsaWtlbHkgY2xlYXJpbmcgZGlydHkgZmxhZ3Mgd2hlbiB3ZSdyZSBpbnZhbGlkYXRpbmcgb3Igd3JpdGluZyBiYWNrIGRhdGEsIGFzIHdlIGV4cGVjdCB0aGUgZGF0YSB0byBiZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgb24gZGlzay4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29pbi4gSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxzIHRvIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgLiBJIHdhbnQgdG8ga25vdyB3aGVyZSBhbmQgKndoeSogd2UncmUgc2V0dGluZyB0aGVzZSByYW5nZXMgYXMgZGlydHkgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgdGhhdCBzaG91bGQgb2ZmZXIgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCB3cml0ZWJhY2sgbWVjaGFuaXNtcy4gR290dGEgZW5zdXJlIHdlJ3JlIG1hcmtpbmcgdGhpbmdzIGNvcnJlY3RseSB0byBndWFyYW50ZWUgZGF0YSBpbnRlZ3JpdHksIHNvIGl0J3MgdGltZSB0byBjaGVjayB3aGF0J3MgaW5pdGlhdGluZyB0aGUgc2V0dGluZyBvZiB0aGUgZGlydHkgZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTM4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6NTQuMzAwNTc3MTU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ3MDM5MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3NldF9yYW5nZV9kaXJ0eVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTIxNz1zdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjIzNjpzdGF0aWMgdm9pZCBpb21hcF9zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNy17XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTc5MD1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTUtXFx0aWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3OTY6XFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzk3LVxcdHJldHVybiBmaWxlbWFwX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTA1Nj1zdGF0aWMgYm9vbCBfX2lvbWFwX3dyaXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDc0LVxcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpLCBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTA3NTpcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzYtXFx0ZmlsZW1hcF9kaXJ0eV9mb2xpbyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBmb2xpbyk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE4ODQ9aW50IGlvbWFwX3dyaXRlYmFja19mb2xpbyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTA4LVxcdFxcdFxcdGlmcyA9IGlmc19hbGxvYyhpbm9kZSwgZm9saW8sIDApO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTkwOTpcXHRcXHRcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGVuZF9wb3MgLSBwb3MpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTkxMC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjU2LjE0NzYyMjIxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTkyMzQwMzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9tYXAgUmFuZ2UgRGlydHlpbmcgYW5kIFVwdG9kYXRlbmVzcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAgZnVuY3Rpb24uIEl0IHNlZW1zIGl0J3MgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgcmFuZ2VzIG9mIGRhdGEgYXMgZGlydHkgd2l0aGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGlvbWFwX2RpcnR5X2ZvbGlvYCwgYF9faW9tYXBfd3JpdGVfZW5kYCwgYW5kIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLiBUaG9zZSBhbGwgbWFrZSBwZXJmZWN0IHNlbnNlIOKAkyB3cml0ZSBvcGVyYXRpb25zIGFuZCB3cml0ZWJhY2sgcHJvY2VkdXJlcyB3b3VsZCBuYXR1cmFsbHkgbmVlZCB0byBzaWduYWwgd2hlbiBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGJpZyBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBzdG9yeSwgaXQgbWFrZXMgc2Vuc2UgdG8gcGl2b3QuIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGhlcmUgd291bGQgYmUgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZWAuIEknbGwgbmVlZCB0byBzZWUgd2hvJ3MgbWFuYWdpbmcgdGhlIG5vdGlvbiBvZiBkYXRhIGJlaW5nIHVwLXRvLWRhdGUsIHRvIGdldCBhIGNvbXBsZXRlIHZpZXcgb2YgaG93IHRoaW5ncyB3b3JrLiBVbmRlcnN0YW5kaW5nIHdobydzIHNldHRpbmcgZGF0YSBhcyBjbGVhbiBvciBkaXJ0eSwgYW5kIHdoZW4sIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB0aGUgaW9tYXAncyBkYXRhIGludGVncml0eSBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6MzA6MDguMDcxMDI4MDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUxMjU0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTY2PXN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzktXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4MDpzdGF0aWMgdm9pZCBpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZixcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTgxLVxcdFxcdHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTM5ND1zdGF0aWMgaW50IGlvbWFwX3JlYWRfaW5saW5lX2RhdGEoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTQxNS1cXHRmb2xpb19maWxsX3RhaWwoZm9saW8sIG9mZnNldCwgaW9tYXAtXFx1MDAzZWlubGluZV9kYXRhLCBzaXplKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjQxNjpcXHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIG9mZnNldCwgZm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNDE3LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz01MzM9c3RhdGljIGludCBpb21hcF9yZWFkX2ZvbGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTU3My1cXHRcXHRcXHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjU3NDpcXHRcXHRcXHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIHBvZmYsIHBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNTc1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTgxNT1zdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg4Mi1cXHRcXHR9XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4ODM6XFx0XFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg4NC1cXHR9IHdoaWxlICgoYmxvY2tfc3RhcnQgKz0gcGxlbikgXFx1MDAzYyBibG9ja19lbmQpO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTA3NDpcXHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzUtXFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGNvcGllZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjMwOjEwLjEyMjI4OTI1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg0MzM5MDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgRm9jdXMgZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBnZXQgdGhpcyBzdHJhaWdodC4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggc3l6a2FsbGVyLiBJbml0aWFsbHksIEkgaWRlbnRpZmllZCBzZXZlcmFsIG1vZGlmaWVkIGZ1bmN0aW9uczogYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYGlmc19zZXRfcmFuZ2VfZGlydHlgLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AsIGFuZCBgaW9tYXBfemVyb19pdGVyYC4gSSB3YXMgYWxzbyB0aGlua2luZyBhYm91dCBhIGJyb2FkZXIgc2V0IG9mIFwiZm9jdXMgc3ltYm9sc1wiIGluY2x1ZGluZyB0aGluZ3MgbGlrZSBgaW9tYXBfemVyb19yYW5nZWAsIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLCBhbmQgdGhlIHZhcmlvdXMgYGlvbWFwX3dyaXRlXypgIGZ1bmN0aW9ucy5cblxuVGhlbiBJIHBhdXNlZCBhbmQgY29uc2lkZXJlZCBzdGF0aWMgZnVuY3Rpb25zLiBJIGtub3cgc3l6a2FsbGVyICpjYW4qIGZ1enogc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLCBidXQgaXQncyBjbGVhbmVyIHRvIHByb3ZpZGUgdGhlIGV4YWN0IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgZGlyZWN0IGNhbGxlcnMgZm9yIGJldHRlciBmdXp6aW5nLiAgVGhpcyBsZWQgbWUgdG8gcmV2aXNpdCB0aGUgbGlzdC4gV2hpbGUgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljLCBpdCdzIG5vdCBpbmxpbmVkLCBzbyB0aGF0J3MgdmlhYmxlLiBBbHNvLCBJIHJlYWxpemVkIHRoYXQgSSBoYWQgYSB0eXBvIGFuZCBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIHNob3VsZCBiZSBpbmNsdWRlZC5cblxuU28sIHRoZSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6XG5cbiogICBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWBcbiogICBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YFxuKiAgIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWBcbiogICBgaWZzX3NldF9yYW5nZV9kaXJ0eWBcbiogICBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2BcbiogICBgaW9tYXBfemVyb19pdGVyYFxuKiAgIGBpb21hcF96ZXJvX3JhbmdlYFxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9ucy4gV2UgbmVlZCB0byBzZWxlY3QgZmlsZXN5c3RlbXMgdGhhdCBlbmFibGUgdGhlIElPTUFQIGZlYXR1cmUuIEkgaW5pdGlhbGx5IGxpc3RlZCBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgLCBgRjJGU19GU2AsIGBHRlMyX0ZTYCwgYW5kIGBOVEZTM19GU2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgdW5kZXJseWluZyBgRlNfSU9NQVBgIGNvbmZpZyBpcyBoaWRkZW4uIFRodXMsIHdlIHNob3VsZCBlbmFibGUgZmlsZXN5c3RlbXMgdGhhdCBzZWxlY3QgaXQuIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgIGFyZSBleGNlbGxlbnQgY2hvaWNlcy4gIFRoZXJlZm9yZSwgSSdsbCBnbyB3aXRoOlxuXG4qICAgYFhGU19GU2BcbiogICBgRVhUNF9GU2BcbiogICBgQlRSRlNfRlNgXG5cbkZpbmFsbHksIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgYEZTX0lPTUFQYCBkZXBlbmRlbmN5IGluIGBmcy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjMwOjIwLjk2NTY4NTE2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNDcyODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjMwOjIyLjg4MDQyNzI3NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA1NDc1MTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJT01BUCBCdWZmZXJlZCBJTyBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IGdsYW5jZSAtIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBoaWRkZW4gYm9vbGVhbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIExldCdzIHNlZSB3aGF0IGVsc2UgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBpbiB0aGUgY29uZmlndXJhdGlvbi4gUXVpY2sgY2hlY2suLi4gYWhhISBXZSd2ZSBnb3QgYEZTX0RBWGAgc2VsZWN0aW5nIGBGU19JT01BUGAsIGBaT05FRlNfRlNgIHNlbGVjdGluZyBgRlNfSU9NQVBgLCBhbmQgYEVST0ZTX0ZTYCBzZWxlY3RpbmcgYEZTX0lPTUFQYC4gR29vZCB0byBrbm93OyB0aGF0IGV4cGFuZHMgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGVzeXN0ZW0gaW52b2x2ZW1lbnQsIEknbGwgZmxhZyBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgLCBhbmQgYEYyRlNfRlNgIGFzIGltcG9ydGFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGVuYWJsaW5nIHRoZXNlIHdpbGwgZW5hYmxlIHRoZSBjb3JlIGNoYW5nZXMuXG5cblRoZSBwYXRjaCdzIGZ1bmN0aW9uIGlzIGNlbnRlcmVkIG9uIHRoZSBidWZmZXJlZCBJL08gbG9naWMgd2l0aGluIElPTUFQLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGhvdyBkaXJ0eSBhbmQgdXAtdG8tZGF0ZSBiaXRzIGFyZSBoYW5kbGVkIG9uIGEgcGVyLWJsb2NrIGJhc2lzIHdpdGhpbiBhIGZvbGlvLiBJdCdzIGFsdGVyaW5nIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIEFkZGl0aW9uYWxseSwgaXQncyBjaGFuZ2luZyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgdG8gY2xlYW4gdXAgdGhlIGRpcnR5IGJpdHMgaW4gdGhlIGludmFsaWRhdGVkIHJlZ2lvbiwgYW5kIGZpeGluZyBgaW9tYXBfemVyb19pdGVyYCBzbyBpdCByZXBvcnRzIGNvcnJlY3RseSB3aGV0aGVyIHplcm9pbmcgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgd2hpbGUgaGFuZGxpbmcgZXJyb3JzLiBUaGlzIGlzIGNydWNpYWw7IHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQncyB1c2VkIGJ5IHF1aXRlIGEgZmV3IG1ham9yIGZpbGVzeXN0ZW1zLCBpbmNsdWRpbmcgWEZTLCBleHQ0LCBhbmQgYnRyZnMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS5cblxuQWxyaWdodCwgdGltZSB0byByZWZpbmUgdGhlIGZvY2FsIHBvaW50cy4gTXkgdGFyZ2V0IGZ1bmN0aW9ucyBhcmU6XG5cbi0gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgXG4tIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgXG4tIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWBcbi0gYGlmc19zZXRfcmFuZ2VfZGlydHlgXG4tIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYFxuLSBgaW9tYXBfemVyb19pdGVyYFxuLSBgaW9tYXBfemVyb19yYW5nZWBcblxuTm93LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM1OCwiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6MzA6MzQuOTM1MjAxMzY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2MjM2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZnNfc2V0X3JhbmdlX3VwdG9kYXRlXCIsXG4gICAgXCJpZnNfY2xlYXJfcmFuZ2VfZGlydHlcIixcbiAgICBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpZnNfc2V0X3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX2l0ZXJcIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpby4gSXQgYWxzbyBjaGFuZ2VzIGlvbWFwX2ludmFsaWRhdGVfZm9saW8gdG8gY2xlYXIgZGlydHkgYml0cyBmb3IgdGhlIGludmFsaWRhdGVkIHJhbmdlLCBhbmQgZml4ZXMgaW9tYXBfemVyb19pdGVyIHRvIGNvcnJlY3RseSByZXBvcnQgaWYgemVyb2luZyBvY2N1cnJlZCBhbmQgaGFuZGxlIGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYW55IG1ham9yIGZpbGVzeXN0ZW1zIChYRlMsIGV4dDQsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCIsXG4gICAgXCJGMkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWZzX3NldF9yYW5nZV91cHRvZGF0ZVwiLFxuICAgIFwiaWZzX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eVwiLFxuICAgIFwiaWZzX3NldF9yYW5nZV9kaXJ0eVwiLFxuICAgIFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiaW9tYXBfemVyb19pdGVyXCIsXG4gICAgXCJpb21hcF96ZXJvX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8uIEl0IGFsc28gY2hhbmdlcyBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvIHRvIGNsZWFyIGRpcnR5IGJpdHMgZm9yIHRoZSBpbnZhbGlkYXRlZCByYW5nZSwgYW5kIGZpeGVzIGlvbWFwX3plcm9faXRlciB0byBjb3JyZWN0bHkgcmVwb3J0IGlmIHplcm9pbmcgb2NjdXJyZWQgYW5kIGhhbmRsZSBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFueSBtYWpvciBmaWxlc3lzdGVtcyAoWEZTLCBleHQ0LCBidHJmcywgZXRjLikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowdkkng[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 08:08:15 +0000 UTC FinishedAt: 2026-07-13 08:30:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS", "EXT4_FS", "BTRFS_FS", "F2FS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFS_FS", "EXT4_FS", "BTRFS_FS", "F2FS_FS" ], "series_id": "e5b1b488-556f-45dd-bcc2-4889b6be7cc7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ifs_set_range_uptodate", "ifs_clear_range_dirty", "iomap_clear_range_dirty", "ifs_set_range_dirty", "iomap_invalidate_folio", "iomap_zero_iter", "iomap_zero_range" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O0YyRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZnNfc2V0X3JhbmdlX3VwdG9kYXRlJiMzNDssCiAgICAmIzM0O2lmc19jbGVhcl9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpZnNfc2V0X3JhbmdlX2RpcnR5JiMzNDssCiAgICAmIzM0O2lvbWFwX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAgICYjMzQ7aW9tYXBfemVyb19pdGVyJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8uIEl0IGFsc28gY2hhbmdlcyBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvIHRvIGNsZWFyIGRpcnR5IGJpdHMgZm9yIHRoZSBpbnZhbGlkYXRlZCByYW5nZSwgYW5kIGZpeGVzIGlvbWFwX3plcm9faXRlciB0byBjb3JyZWN0bHkgcmVwb3J0IGlmIHplcm9pbmcgb2NjdXJyZWQgYW5kIGhhbmRsZSBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFueSBtYWpvciBmaWxlc3lzdGVtcyAoWEZTLCBleHQ0LCBidHJmcywgZXRjLikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDg6Mjg6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbmluZGV4IGQ1NWI5MzZlNjk4NjI4Li5jMTIyMzdlZDdjZGU5YSAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC02NywxMSAmIzQzOzY3LDEzIEBAIHN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSBvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcbiBcbi1cdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIG5yX2Jsa3MpO1xuJiM0MztcdGlmIChsZW4pIHtcbiYjNDM7XHRcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdFx0bGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4mIzQzO1x0XHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xuIH1cbiBcbkBAIC0xNzEsMTggJiM0MzsxNzMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGlvbWFwX2ZpbmRfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdTY0ICpyYW5nZV9zdGFydCxcbiBcdHJldHVybiByYW5nZV9lbmQgLSAqcmFuZ2Vfc3RhcnQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiAmIzQzOyBAbGVuKSB3aXRoaW4gYVxuJiM0MzsgKiBmb2xpby4gIFRoZSByYW5nZSBpcyByb3VuZGVkIGlud2FyZHMgc28gdGhhdCBvbmx5IGJsb2NrcyBmdWxseSBjb3ZlcmVkIGJ5XG4mIzQzOyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpb1xuJiM0MzsgKiBpbnZhbGlkYXRpb24sIHdoZXJlIHdlIG11c3QgZW5zdXJlIGEgYmxvY2sgaXMgZnVsbHkgY2xlYW4gYmVmb3JlIGRpc2NhcmRpbmdcbiYjNDM7ICogaXQuXG4mIzQzOyAqL1xuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFx1MDAzZVx1MDAzZVxuJiM0MztcdFx0XHRcdCBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuJiM0MztcdGlmIChmaXJzdF9ibGsgXHUwMDNlPSBsYXN0X2JsaylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTtcbiYjNDM7XHRiaXRtYXBfY2xlYXIoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sXG4mIzQzO1x0XHQgICAgIGxhc3RfYmxrIC0gZmlyc3RfYmxrKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG5AQCAtMTk0LDE4ICYjNDM7MjA3LDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4gXHRcdGlmc19jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgaWZzLCBvZmYsIGxlbik7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTZXQgdGhlIHBlci1ibG9jayBkaXJ0eSBiaXRzIGZvciB0aGUgcmFuZ2UgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgd2l0aGluIGFcbiYjNDM7ICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxuJiM0MzsgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYVxuJiM0MzsgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nXG4mIzQzOyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxuJiM0MzsgKi9cbiBzdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gXHR1bnNpZ25lZCBpbnQgYmxrc19wZXJfZm9saW8gPSBpX2Jsb2Nrc19wZXJfZm9saW8oaW5vZGUsIGZvbGlvKTtcbi1cdHVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSAob2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHMpO1xuLVx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxO1xuJiM0MztcdHVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiYjNDM7XHRpZiAoIWxlbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4mIzQzO1x0bGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7XG4mIzQzO1x0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbyxcbiYjNDM7XHRcdCAgIGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC03NTcsNiAmIzQzOzc4MSw4IEBAIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuIFx0XHRXQVJOX09OX09OQ0UoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbiBcdFx0Zm9saW9fY2FuY2VsX2RpcnR5KGZvbGlvKTtcbiBcdFx0aWZzX2ZyZWUoZm9saW8pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbkBAIC0xNTM2LDYgJiM0MzsxNTYyLDcgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXG4ge1xuIFx0dTY0IGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpO1xuJiM0MztcdGJvb2wgemVyb2VkID0gZmFsc2U7XG4gXHRpbnQgc3RhdHVzO1xuIFxuIFx0ZG8ge1xuQEAgLTE1NTQsNiAmIzQzOzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdC8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSYjMzk7cmUgZG9uZSB3aXRoIGEgZm9saW8gYmF0Y2ggKi9cbiBcdFx0aWYgKCFmb2xpbykge1xuIFx0XHRcdHN0YXR1cyA9IGlvbWFwX2l0ZXJfYWR2YW5jZV9mdWxsKGl0ZXIpO1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzKVxuJiM0MztcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDYgJiM0MzsxNTkzLDcgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFx0XHRcdFx0Ynl0ZXMpO1xuIFxuIFx0XHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbiYjNDM7XHRcdHplcm9lZCA9IHRydWU7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuIFxuIFx0XHRyZXQgPSBpb21hcF93cml0ZV9lbmQoaXRlciwgYnl0ZXMsIGJ5dGVzLCBmb2xpbyk7XG5AQCAtMTU3MywxMCAmIzQzOzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFxuIFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xuIFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0fSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSBcdTAwM2UgMCk7XG4gXG4tXHRpZiAoZGlkX3plcm8pXG4mIzQzO1x0aWYgKGRpZF96ZXJvIFx1MDAyNlx1MDAyNiB6ZXJvZWQpXG4gXHRcdCpkaWRfemVybyA9IHRydWU7XG4gXHRyZXR1cm4gc3RhdHVzO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGMkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICAgJiMzNDtpZnNfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9faXRlciYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvLiBJdCBhbHNvIGNoYW5nZXMgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyB0byBjbGVhciBkaXJ0eSBiaXRzIGZvciB0aGUgaW52YWxpZGF0ZWQgcmFuZ2UsIGFuZCBmaXhlcyBpb21hcF96ZXJvX2l0ZXIgdG8gY29ycmVjdGx5IHJlcG9ydCBpZiB6ZXJvaW5nIG9jY3VycmVkIGFuZCBoYW5kbGUgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1hbnkgbWFqb3IgZmlsZXN5c3RlbXMgKFhGUywgZXh0NCwgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMDg6Mjg6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCBkNTViOTM2ZTY5ODYyOC4uYzEyMjM3ZWQ3Y2RlOWEgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwpAQCAtNjcsMTEgJiM0Mzs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdDsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwotCXVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTsKJiM0MzsJdW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7CiAKLQliaXRtYXBfc2V0KGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsaywgbnJfYmxrcyk7CiYjNDM7CWlmIChsZW4pIHsKJiM0MzsJCWZpcnN0X2JsayA9IG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwomIzQzOwkJbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiYjNDM7CQliaXRtYXBfc2V0KGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMSk7CiYjNDM7CX0KIAlyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpOwogfQogCkBAIC0xNzEsMTggJiM0MzsxNzMsMjkgQEAgc3RhdGljIHVuc2lnbmVkIGlvbWFwX2ZpbmRfZGlydHlfcmFuZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdTY0ICpyYW5nZV9zdGFydCwKIAlyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiAmIzQzOyBAbGVuKSB3aXRoaW4gYQomIzQzOyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgaW53YXJkcyBzbyB0aGF0IG9ubHkgYmxvY2tzIGZ1bGx5IGNvdmVyZWQgYnkKJiM0MzsgKiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBvcGVyYXRpb25zIGxpa2UgZm9saW8KJiM0MzsgKiBpbnZhbGlkYXRpb24sIHdoZXJlIHdlIG11c3QgZW5zdXJlIGEgYmxvY2sgaXMgZnVsbHkgY2xlYW4gYmVmb3JlIGRpc2NhcmRpbmcKJiM0MzsgKiBpdC4KJiM0MzsgKi8KIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tJmd0O21hcHBpbmctJmd0O2hvc3Q7CiAJdW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7Ci0JdW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0cyk7Ci0JdW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwotCXVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTsKJiM0MzsJdW5zaWduZWQgaW50IGZpcnN0X2JsayA9IHJvdW5kX3VwKG9mZiwgaV9ibG9ja3NpemUoaW5vZGUpKSAmZ3Q7Jmd0OwomIzQzOwkJCQkgaW5vZGUtJmd0O2lfYmxrYml0czsKJiM0MzsJdW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4pICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAomIzQzOwlpZiAoZmlyc3RfYmxrICZndDs9IGxhc3RfYmxrKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7aWZzLSZndDtzdGF0ZV9sb2NrLCBmbGFncyk7Ci0JYml0bWFwX2NsZWFyKGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7CiYjNDM7CWJpdG1hcF9jbGVhcihpZnMtJmd0O3N0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sCiYjNDM7CQkgICAgIGxhc3RfYmxrIC0gZmlyc3RfYmxrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aWZzLSZndDtzdGF0ZV9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTE5NCwxOCAmIzQzOzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogCQlpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pOwogfQogCiYjNDM7LyoKJiM0MzsgKiBTZXQgdGhlIHBlci1ibG9jayBkaXJ0eSBiaXRzIGZvciB0aGUgcmFuZ2UgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgd2l0aGluIGEKJiM0MzsgKiBmb2xpby4gIFRoZSByYW5nZSBpcyByb3VuZGVkIG91dHdhcmRzIHNvIHRoYXQgYW55IGJsb2NrIHBhcnRpYWxseSB0b3VjaGVkCiYjNDM7ICogYnkgdGhlIHJhbmdlIGlzIG1hcmtlZCBkaXJ0eS4gIFRoaXMgZW5zdXJlcyBibG9ja3MgY29udGFpbmluZyBldmVuIGEKJiM0MzsgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nCiYjNDM7ICogZGF0YSBsb3NzIHdoZW4gcGFydGlhbCBibG9ja3MgYXJlIHdyaXR0ZW4uCiYjNDM7ICovCiBzdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdDsKIAl1bnNpZ25lZCBpbnQgYmxrc19wZXJfZm9saW8gPSBpX2Jsb2Nrc19wZXJfZm9saW8oaW5vZGUsIGZvbGlvKTsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzKTsKLQl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxOwomIzQzOwl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsazsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiYjNDM7CWlmICghbGVuKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmaXJzdF9ibGsgPSBvZmYgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKJiM0MzsJbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtpZnMtJmd0O3N0YXRlX2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfc2V0KGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7CiYjNDM7CWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLAomIzQzOwkJICAgbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2lmcy0mZ3Q7c3RhdGVfbG9jaywgZmxhZ3MpOwogfQogCkBAIC03NTcsNiAmIzQzOzc4MSw4IEBAIHZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKQogCQlXQVJOX09OX09OQ0UoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTsKIAkJZm9saW9fY2FuY2VsX2RpcnR5KGZvbGlvKTsKIAkJaWZzX2ZyZWUoZm9saW8pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTsKQEAgLTE1MzYsNiAmIzQzOzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAJCWNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcykKIHsKIAl1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7CiYjNDM7CWJvb2wgemVyb2VkID0gZmFsc2U7CiAJaW50IHN0YXR1czsKIAogCWRvIHsKQEAgLTE1NTQsNiAmIzQzOzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAJCS8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSYjMzk7cmUgZG9uZSB3aXRoIGEgZm9saW8gYmF0Y2ggKi8KIAkJaWYgKCFmb2xpbykgewogCQkJc3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7CiYjNDM7CQkJaWYgKHN0YXR1cykKJiM0MzsJCQkJcmV0dXJuIHN0YXR1czsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE1NjQsNiAmIzQzOzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAJCQkJYnl0ZXMpOwogCiAJCWZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpOwomIzQzOwkJemVyb2VkID0gdHJ1ZTsKIAkJZm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7CiAKIAkJcmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pOwpAQCAtMTU3MywxMCAmIzQzOzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLAogCiAJCXN0YXR1cyA9IGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBieXRlcyk7CiAJCWlmIChzdGF0dXMpCi0JCQlicmVhazsKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwogCX0gd2hpbGUgKChieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKSkgJmd0OyAwKTsKIAotCWlmIChkaWRfemVybykKJiM0MzsJaWYgKGRpZF96ZXJvICZhbXA7JmFtcDsgemVyb2VkKQogCQkqZGlkX3plcm8gPSB0cnVlOwogCXJldHVybiBzdGF0dXM7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluOyBpb21hcCBpcyAqY29yZSogaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgdG91Y2hlcyB0aGUgZnVuZGFtZW50YWwgYnVmZmVyZWQgSS9PIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGJ0cmZzLCBhbmQgZXZlbiBsZXNzIGNvbW1vbiBvbmVzIGxpa2UgZ2ZzMiBhbmQgem9uZWZzLiBBbnkgbW9kaWZpY2F0aW9uIGhlcmUgaXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgYnJvYWQgaW1wYWN0LgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IGltcGFjdCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgYWxsIGludGVncmFsIHBhcnRzIG9mIGhvdyBpb21hcCBoYW5kbGVzIGRhdGEgcmFuZ2VzLCBkaXJ0eSBwYWdlcywgemVyb2luZyBvdXQgcmVnaW9ucywgYW5kIGludmFsaWRhdGluZyBmb2xpbyBkYXRhLiBUaGVzZSBhcmUgY2xhc3NpYyBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGtleSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBJL08gcGF0aC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2YgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgYXMgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgdGhlcmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhpcyBhcmVhLCBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbnMgdG8gc2V0IGZvciB0aGUgZnV6emluZy4gYEZTX0lPTUFQYCBhbmQgYElPTUFQYCBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSYjMzk7bGwgcnVuIGEgcXVpY2sgYGdyZXBgIHNlYXJjaC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IEkgbmVlZCBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU19JT01BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXIgb2YgZmlsZXN5c3RlbXMgYW5kIGlvbWFwLCByZW5kZXJlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW1zIGFuZCBJT01BUCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmlsZXN5c3RlbXMgbGV2ZXJhZ2UgaW9tYXAuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBzaW1wbGUgcXVlcnk7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgaG93IG1vZGVybiBzdG9yYWdlIHdvcmtzLCBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyB0aGF0IHJlbGF0ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgaW9tYXAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaW9tYXAgcHJvdmlkZXMgYmVuZWZpdCBhbmQgd2hlcmUgaXQgZG9lcyBub3QuCgpGaXJzdCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkuIElvbWFwIGlzIGZ1bmRhbWVudGFsbHkgYW4gSS9PIG1hcHBpbmcgc3RyYXRlZ3kuIEl0JiMzOTtzIGFib3V0IGVmZmljaWVudGx5IHRyYW5zbGF0aW5nIGxvZ2ljYWwgYmxvY2sgYWRkcmVzc2VzIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3NlcyBvbiB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRldmljZS4gSXQmIzM5O3MgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBzcGFyc2UgZmlsZXMsIG91dC1vZi1vcmRlciB3cml0ZXMsIG9yIGNvbXBsZXggc3RvcmFnZSBsYXlvdXRzLiBJIG5lZWQgdG8gcmVjYWxsIHRoZSBkZXRhaWxzIG9mIHRoaXMgYW5kIHRoZSBiZW5lZml0cyBvZiBpdHMgdXNlLgoKTm93LCB3aGljaCBmaWxlc3lzdGVtcyAqYWN0dWFsbHkqIHVzZSBpdD8gSSBrbm93IEVYVDQgZG9lc24mIzM5O3QgKG9yIGF0IGxlYXN0LCBkaWRuJiMzOTt0LCBvciBub3QgZXhjbHVzaXZlbHkpIGFuZCBCdHJmcyBhbmQgWEZTIGhhdmUgdGhlaXIgb3duIEkvTyBzdHJhdGVnaWVzLiBJIHJlbWVtYmVyIHNlZWluZyByZWZlcmVuY2VzIHRvIHNwZWNpZmljIGZpbGVzeXN0ZW1zLCBidXQgYSBxdWljayBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGRvY3VtZW50YXRpb24sIHRoZW4gcGVyaGFwcyBsb29rIGF0IHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNsdWVzIGFib3V0IG1vZHVsZSB1c2FnZSwgYW5kIGNyb3NzIHJlZmVyZW5jZSB0aGVtLiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjZXJ0YWluLgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28sIHRoZSB2YXJpb3VzIHN0b3JhZ2UgdGVjaG5vbG9naWVzIGFuZCBoYXJkd2FyZSB0aGF0IHRoaXMgbWFwcGluZyBtdXN0IHdvcmsgd2l0aC4gVGhlIGludHJpY2FjaWVzIG9mIGlvbWFwIGxpa2VseSB2YXJ5IGNvbnNpZGVyYWJseSBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgc3RvcmFnZTsgU1NEcywgSEREcywgYW5kIG5ldHdvcmtlZCBzdG9yYWdlIGFsbCBwcmVzZW50IGRpZmZlcmVudCBjaGFsbGVuZ2VzIGFuZCBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBjb250ZXh0IGFzIEkgaW52ZXN0aWdhdGUuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb3JtdWxhdGUgYSBzZWFyY2ggcXVlcnkgdG8gaWRlbnRpZnkgZmlsZXN5c3RlbXMgdXNpbmcgdGhlIHRlcm0uIElkZWFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSB0aGF0IGxldmVyYWdlIGlvbWFwIGFzIGEgKmNvcmUqIGNvbXBvbmVudCBmb3IgaXRzIEkvTyBvcGVyYXRpb25zLiBJIGFsc28gd2FudCB0byBmaW5kIHdoaWNoIG9uZXMgdXNlZCBpdCBvciB0cmllZCB0byB1c2UgaXQuClRoZSBnb2FsIGhlcmUgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxhbmRzY2FwZSwgbm90IGp1c3QgYSBzdXJmYWNlLWxldmVsIGxpc3QuIEkgd2FudCB0byBrbm93IHdoeSB0aGV5IGNob3NlIGl0LCBob3cgdGhleSBpbXBsZW1lbnRlZCBpdCwgYW5kIHdoYXQgdGhlIHRyYWRlLW9mZnMgYXJlLiBUaGlzIGlzIGEgY2hhbmNlIHRvIGRlZXBlbiBteSBvd24gdW5kZXJzdGFuZGluZywgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBGU19JT01BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlYGAgZnJvbSB5b3VyIHNvdXJjZSBjb2RlIGFuZCBhZGRcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0mIzM5O3MgS2NvbmZpZyBvcHRpb24uXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcbi0tXG5ibG9jay9LY29uZmlnPTU9bWVudWNvbmZpZyBCTE9DS1xuLS1cbmJsb2NrL0tjb25maWctNy0gICAgICAgZGVmYXVsdCB5XG5ibG9jay9LY29uZmlnOjg6ICAgICAgIHNlbGVjdCBGU19JT01BUFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxuLS1cbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxuLS1cbmZzL0tjb25maWctNjEtXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnOjYyOlx0c2VsZWN0IEZTX0lPTUFQXG5mcy9LY29uZmlnLTYzLVx0c2VsZWN0IERBWFxuLS1cbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcbi0tXG5mcy9idHJmcy9LY29uZmlnLTE0LVx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuZnMvYnRyZnMvS2NvbmZpZzoxNTpcdHNlbGVjdCBGU19JT01BUFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cdHNlbGVjdCBSQUlENl9QUVxuLS1cbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTktXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX0lPTUFQXG5mcy9lcm9mcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxuLS1cbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXG4tLVxuZnMvZXh0Mi9LY29uZmlnLTQtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2V4dDIvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQyL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03LVx0c2VsZWN0IENSQzMyXG5mcy9leHQ0L0tjb25maWc6ODpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXh0NC9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xuLS1cbmZzL2YyZnMvS2NvbmZpZy05LVx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG5mcy9mMmZzL0tjb25maWc6MTA6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2YyZnMvS2NvbmZpZy0xMS1cdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcbi0tXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xuLS1cbmZzL2Z1c2UvS2NvbmZpZy00LVx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvZnVzZS9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2Z1c2UvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXG4tLVxuZnMvZ2ZzMi9LY29uZmlnLTctXHRzZWxlY3QgUVVPVEFDVExcbmZzL2dmczIvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9nZnMyL0tjb25maWctOS1cdGhlbHBcbi0tXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xuLS1cbmZzL2hwZnMvS2NvbmZpZy01LVx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9ocGZzL0tjb25maWc6NjpcdHNlbGVjdCBGU19JT01BUFxuZnMvaHBmcy9LY29uZmlnLTctXHRoZWxwXG4tLVxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcbi0tXG5mcy9udGZzL0tjb25maWctNC1cdHNlbGVjdCBOTFNcbmZzL250ZnMvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9udGZzL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcbi0tXG5mcy94ZnMvS2NvbmZpZy02LVx0c2VsZWN0IENSQzMyXG5mcy94ZnMvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy94ZnMvS2NvbmZpZy04LVx0aGVscFxuLS1cbmZzL3pvbmVmcy9LY29uZmlnPTE9Y29uZmlnIFpPTkVGU19GU1xuLS1cbmZzL3pvbmVmcy9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcbmZzL3pvbmVmcy9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL3pvbmVmcy9LY29uZmlnLTYtXHRzZWxlY3QgQ1JDMzJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzkxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9tYXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgaW9tYXAgdGhpbmcsIHdoaWNoIEkga25vdyBpcyB3aWRlbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcy4gWEZTLCBFWFQ0LCBCVFJGUyDigJMgdGhvc2UgYXJlIHRoZSBiaWcgcGxheWVycyBoZXJlLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgd2UgbWlnaHQgbmVlZCB0byBzcGVjaWZ5IHRoZW0gZGlyZWN0bHkgYXMgZGVwZW5kZW5jaWVzLCBtYXliZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGVuIEkgcmVtZW1iZXJlZCBgRlNfSU9NQVBgIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBXZSBqdXN0IG5lZWQgdG8gZW5zdXJlIHRoZSBmaWxlc3lzdGVtcyB0aGF0IGxldmVyYWdlIGlvbWFwIGFyZSBlbmFibGVkLgoKV2FpdCwgWEZTIGlzIHByb2JhYmx5IGVuYWJsZWQgYnkgZGVmYXVsdCBhbnl3YXksIHNvIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LCB0aGVuIG1vdmUgb24uIFRoZXJlIGFyZW4mIzM5O3QgYW55IHNwZWNpZmljIGlvbWFwLW9ubHkgY29uZmlncywgYXMgZXhwZWN0ZWQuIEl0JiMzOTtzIGp1c3QgaW5kaXJlY3RseSBhY3RpdmF0ZWQgYnkgZW5hYmxpbmcgYSBmaWxlc3lzdGVtIHVzaW5nIGl0LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJIHNlZSBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiBJIGNhbiBhbHJlYWR5IHRlbGwgdGhhdCBhIGJ1bmNoIG9mIHRoZSBgaWZzXypgIGZ1bmN0aW9ucywgYW5kIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgYXJlIHN0YXRpYywgYW5kIHByb2JhYmx5IGludGVybmFsIHRvIHRoZSBpb21hcCBpbXBsZW1lbnRhdGlvbi4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBwcm9iYWJseSB1c2VkIG1vcmUgd2lkZWx5LiBBbmQsIGp1c3QgbGlrZSB0aGUgb3RoZXJzLCBgaW9tYXBfemVyb19pdGVyYCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgd2hlcmUgYGlvbWFwX3plcm9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGxlcnMgYW5kIHNlZSBob3cgdGhleSBhcmUgdXNpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfemVyb19pdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU0NT1FWFBPUlRfU1lNQk9MX0dQTChpb21hcF9maWxlX3Vuc2hhcmUpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU1MS0gKi9cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTU1MjpzdGF0aWMgaW5saW5lIGludCBpb21hcF96ZXJvX2l0ZXJfZmx1c2hfYW5kX3N0YWxlKHN0cnVjdCBpb21hcF9pdGVyICppKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NjAtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTYyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTkxLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlx0XHR0cmFjZV9pb21hcF96ZXJvX2l0ZXIoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSAmIzQzOyBvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXHRcdFx0XHRieXRlcyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg2LVx0XHRcdFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY4NzpcdFx0XHRcdHN0YXR1cyA9IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoXHUwMDI2aXRlcik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODgtXHRcdFx0fSBlbHNlIHtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2OTU6XHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFx1MDAyNml0ZXIsIGRpZF96ZXJvLCB3cml0ZV9vcHMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjk2LVx0fVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9ODY9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19yd19xdWV1ZWQpO1xuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcbmZzL2lvbWFwL3RyYWNlLmgtODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIENhbGxlcnMqKgoKQWxyaWdodCwgc28gYGlvbWFwX3plcm9faXRlcmAgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBgaW9tYXBfemVyb19yYW5nZWAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG5vdywgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGZsYWdnZWQgYXMgYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgc3BhcmtzIG15IGludGVyZXN0OyBpZiBpdCYjMzk7cyBleHBvcnRlZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIG1heWJlIGV2ZW4gZGlmZmVyZW50IGZpbGVzeXN0ZW1zLCBvciBhdCBsZWFzdCBvdGhlciBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUgc2FtZSBmaWxlc3lzdGVtLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2hvKiBpcyBtYWtpbmcgdXNlIG9mIHRoYXQuIEl0JiMzOTtzIHRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AuIEl0IGNvdWxkIGJlIGEgdmFsdWFibGUgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSB1c2VkIGZvciBzb21lIGtleSBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGl0JiMzOTtzIGFuIHVuZGVydXRpbGl6ZWQgZnVuY3Rpb24gYW5kIGl0cyBjdXJyZW50IHVzZSBpcyBtaXNsZWFkaW5nLiBLbm93aW5nIHdobyBpbnZva2VzIHRoYXQgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyB1bmRlcnN0YW5kaW5nIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0PTQ1PWFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBzdHJ1Y3R1cmU6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdC00OC0gKiBgYGlvbWFwX3JlbGVhc2VfZm9saW9gYFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdDo0OTogKiBgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gYFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdC01MC0gKiBgYGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZWBgXG4tLVxuYmxvY2svZm9wcy5jPTU4NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wcyA9IHtcbi0tXG5ibG9jay9mb3BzLmMtNTg3LVx0LnJlbGVhc2VfZm9saW9cdFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuYmxvY2svZm9wcy5jOjU4ODpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5ibG9jay9mb3BzLmMtNTg5LVx0LnJlYWRfZm9saW9cdFx0PSBibGtkZXZfcmVhZF9mb2xpbyxcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDU5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDY0LVx0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuZnMvZXJvZnMvZGF0YS5jOjQ2NTpcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbmZzL2Vyb2ZzL2RhdGEuYy00NjYtfTtcbi0tXG5mcy9mdXNlL2ZpbGUuYz0zMTkxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGZ1c2VfZmlsZV9hb3BzICA9IHtcbi0tXG5mcy9mdXNlL2ZpbGUuYy0zMTk3LVx0LnJlbGVhc2VfZm9saW9cdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL2Z1c2UvZmlsZS5jOjMxOTg6XHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9mdXNlL2ZpbGUuYy0zMTk5LVx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbi0tXG5mcy9nZnMyL2FvcHMuYz03MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZ2ZzMl9hb3BzID0ge1xuLS1cbmZzL2dmczIvYW9wcy5jLTcxNi1cdC5yZWxlYXNlX2ZvbGlvID0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL2dmczIvYW9wcy5jOjcxNzpcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbmZzL2dmczIvYW9wcy5jLTcxOC1cdC5ibWFwID0gZ2ZzMl9ibWFwLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzY5PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzAtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc3MTp2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzcyLXtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzczOlx0dHJhY2VfaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc3NC1cdFx0XHRcdFx0Zm9saW9fcG9zKGZvbGlvKSAmIzQzOyBvZmZzZXQsIGxlbik7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03ODctfVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3ODg6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4OS1cbi0tXG5mcy9pb21hcC90cmFjZS5oPTgzPURFRklORV9SQU5HRV9FVkVOVChpb21hcF9yZWxlYXNlX2ZvbGlvKTtcbmZzL2lvbWFwL3RyYWNlLmg6ODQ6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xuZnMvaW9tYXAvdHJhY2UuaC04NS1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX2ludmFsaWRhdGVfZmFpbCk7XG4tLVxuZnMvbnRmcy9hb3BzLmM9MjgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzID0ge1xuLS1cbmZzL250ZnMvYW9wcy5jLTI4OS1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL250ZnMvYW9wcy5jOjI5MDpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9udGZzL2FvcHMuYy0yOTEtXHQuc3dhcF9hY3RpdmF0ZSAgICAgICAgICA9IG50ZnNfc3dhcF9hY3RpdmF0ZSxcbi0tXG5mcy9udGZzL2FvcHMuYz0yOTQ9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX21mdF9hb3BzID0ge1xuLS1cbmZzL250ZnMvYW9wcy5jLTMwMy1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL250ZnMvYW9wcy5jOjMwNDpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9udGZzL2FvcHMuYy0zMDUtfTtcbi0tXG5mcy9udGZzMy9pbm9kZS5jPTIxMDA9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX2FvcHMgPSB7XG4tLVxuZnMvbnRmczMvaW5vZGUuYy0yMTA3LVx0LnJlbGVhc2VfZm9saW9cdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL250ZnMzL2lub2RlLmM6MjEwODpcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcbmZzL250ZnMzL2lub2RlLmMtMjEwOS19O1xuLS1cbmZzL250ZnMzL2lub2RlLmM9MjExMT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG50ZnNfYW9wc19jbXByID0ge1xuLS1cbmZzL250ZnMzL2lub2RlLmMtMjExNC1cdC5yZWxlYXNlX2ZvbGlvXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXG5mcy9udGZzMy9pbm9kZS5jOjIxMTU6XHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy9udGZzMy9pbm9kZS5jLTIxMTYtfTtcbi0tXG5mcy94ZnMveGZzX2FvcHMuYz04NDU9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3hmcy94ZnNfYW9wcy5jLTg1MC1cdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbmZzL3hmcy94ZnNfYW9wcy5jOjg1MTpcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG5mcy94ZnMveGZzX2FvcHMuYy04NTItXHQuYm1hcFx0XHRcdD0geGZzX3ZtX2JtYXAsXG4tLVxuZnMvem9uZWZzL2ZpbGUuYz0xODU9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB6b25lZnNfZmlsZV9hb3BzID0ge1xuLS1cbmZzL3pvbmVmcy9maWxlLmMtMTkwLVx0LnJlbGVhc2VfZm9saW9cdFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxuZnMvem9uZWZzL2ZpbGUuYzoxOTE6XHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuZnMvem9uZWZzL2ZpbGUuYy0xOTItXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9MzYwPWJvb2wgaW9tYXBfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9pb21hcC5oOjM2MTp2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbik7XG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzYyLWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBvbiBteSBtaW5kIHJlZ2FyZGluZyB0aGVzZSBmaWxlc3lzdGVtIGZ1bmN0aW9ucy4KCioqSW52ZXN0aWdhdGluZyBGaWxlc3lzdGVtIEkvTyBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBsYXllciwgdXRpbGl6ZWQgYnkgYSBwcmV0dHkgZGl2ZXJzZSBncm91cCBvZiBmaWxlc3lzdGVtczogYmxvY2ssIGVyb2ZzLCBmdXNlLCBnZnMyLCBudGZzLCBudGZzMywgeGZzLCBhbmQgem9uZWZzLiBUaGF0JiMzOTtzIGEgc29saWQgY3Jvc3Mtc2VjdGlvbi4gSXQmIzM5O3MgY2xlYXIgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBpbnZhbGlkYXRpbmcgY2FjaGVkIGRhdGEsIHByb2JhYmx5IGR1cmluZyB3cml0ZWJhY2sgb3IgZGF0YSBpbnRlZ3JpdHkgb3BlcmF0aW9ucy4gVGhlbiB0aGVyZSYjMzk7cyBgaW9tYXBfemVyb19yYW5nZWAsIHdoaWNoIGFsc28gZ2V0cyB1c2VkIGJ5IHZhcmlvdXMgZmlsZXN5c3RlbXMuIEl0IHN1Z2dlc3RzIGl0IGhhcyBhIHB1cnBvc2UsIHByZXN1bWFibHkgcmVsYXRlZCB0byBlZmZpY2llbnRseSB6ZXJvaW5nIG91dCByYW5nZXMgb2YgZGF0YSBibG9ja3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyB1c2FnZSwgc28gSSBzaG91bGQgbm93IGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpb21hcF96ZXJvX3JhbmdlYC4gTGV0JiMzOTtzIHNlZSB3aGF0IGtpbmRzIG9mIGZpbGVzeXN0ZW0gb3B0aW1pemF0aW9ucyBvciBvcGVyYXRpb25zIGl0JiMzOTtzIHRpZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0PTIxNT1GaWxlc3lzdGVtIHN1cHBvcnQgY29uc2lzdHMgb2Y6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0LTIyNS0gIGFwcHJvcHJpYXRlIGZhdWx0IHNpemUgYW5kIGlvbWFwIG9wZXJhdGlvbnMuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3Q6MjI2OiogQ2FsbGluZyA6YzpmdW5jOmBpb21hcF96ZXJvX3JhbmdlKClgIHBhc3NpbmcgYXBwcm9wcmlhdGUgaW9tYXAgb3BlcmF0aW9uc1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0LTIyNy0gIGluc3RlYWQgb2YgOmM6ZnVuYzpgYmxvY2tfdHJ1bmNhdGVfcGFnZSgpYCBmb3IgYERBWGAgZmlsZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0PTI3MD1aZXJvaW5nIGZvciBGaWxlIE9wZXJhdGlvbnNcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0LTI3Mi1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvb3BlcmF0aW9ucy5yc3Q6MjczOkZpbGVzeXN0ZW1zIGNhbiBjYWxsIGBgaW9tYXBfemVyb19yYW5nZWBgIHRvIHBlcmZvcm0gemVyb2luZyBvZiB0aGVcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvb3BlcmF0aW9ucy5yc3QtMjc0LXBhZ2VjYWNoZSBmb3Igbm9uLXRydW5jYXRpb24gZmlsZSBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvXG4tLVxuZnMvZ2ZzMi9ibWFwLmM9MTMxND1zdGF0aWMgaW50IGdmczJfYmxvY2tfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGxlbmd0aClcbi0tXG5mcy9nZnMyL2JtYXAuYy0xMzE5LVx0bGVuZ3RoID0gbWluKGxlbmd0aCwgaW5vZGUtXHUwMDNlaV9zaXplIC0gZnJvbSk7XG5mcy9nZnMyL2JtYXAuYzoxMzIwOlx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIGZyb20sIGxlbmd0aCwgTlVMTCwgXHUwMDI2Z2ZzMl9pb21hcF9vcHMsXG5mcy9nZnMyL2JtYXAuYy0xMzIxLVx0XHRcdFx1MDAyNmdmczJfaW9tYXBfd3JpdGVfb3BzLCBOVUxMKTtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NTA9aW50XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2NTE6aW9tYXBfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLCBib29sICpkaWRfemVybyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY1Mi1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY5OC19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2OTk6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfemVyb19yYW5nZSk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE3MDAtXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNzAyPWlvbWFwX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzExLVx0XHRyZXR1cm4gMDtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTcxMjpcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBwb3MsIGJsb2Nrc2l6ZSAtIG9mZiwgZGlkX3plcm8sIG9wcyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcxMy1cdFx0XHR3cml0ZV9vcHMsIHByaXZhdGUpO1xuLS1cbmZzL250ZnMvZmlsZS5jPTI1Mj1zdGF0aWMgaW50IG50ZnNfc2V0YXR0cl9zaXplKHN0cnVjdCBpbm9kZSAqdmksIHN0cnVjdCBpYXR0ciAqYXR0cilcbi0tXG5mcy9udGZzL2ZpbGUuYy0yODEtXHRcdFx0XHRhdHRyLVx1MDAzZWlhX3NpemUgLSBvbGRfc2l6ZSk7XG5mcy9udGZzL2ZpbGUuYzoyODI6XHRcdGVyciA9IGlvbWFwX3plcm9fcmFuZ2UodmksIG9sZF9zaXplLCBsZW4sXG5mcy9udGZzL2ZpbGUuYy0yODMtXHRcdFx0XHROVUxMLCBcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxuLS1cbmZzL250ZnMvZmlsZS5jPTg0ND1zdGF0aWMgaW50IG50ZnNfcHVuY2hfaG9sZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL250ZnMvZmlsZS5jLTg4My1cdFx0XHRcdCAgIGVuZF9vZmZzZXQpO1xuZnMvbnRmcy9maWxlLmM6ODg0Olx0XHRcdGVyciA9IGlvbWFwX3plcm9fcmFuZ2UodmksIG9mZnNldCwgdG8gLSBvZmZzZXQsXG5mcy9udGZzL2ZpbGUuYy04ODUtXHRcdFx0XHRcdCAgICAgICBOVUxMLCBcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxuLS1cbmZzL250ZnMvZmlsZS5jLTg5OS1cdFx0aWYgKGZyb20gXHUwMDNjIG5pLVx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcbmZzL250ZnMvZmlsZS5jOjkwMDpcdFx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBmcm9tLCBlbmRfb2Zmc2V0IC0gZnJvbSxcbmZzL250ZnMvZmlsZS5jLTkwMS1cdFx0XHRcdFx0ICAgICAgIE5VTEwsIFx1MDAyNm50ZnNfc2Vla19pb21hcF9vcHMsXG4tLVxuZnMvbnRmcy9maWxlLmM9MTAyNj1zdGF0aWMgbG9uZyBudGZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvbnRmcy9maWxlLmMtMTEwMy1cdFx0XHRcdFx0ICAgb2Zmc2V0IC0gb2xkX3NpemUpO1xuZnMvbnRmcy9maWxlLmM6MTEwNDpcdFx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfc2l6ZSwgbGVuLCBOVUxMLFxuZnMvbnRmcy9maWxlLmMtMTEwNS1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNm50ZnNfc2Vla19pb21hcF9vcHMsXG4tLVxuZnMvbnRmcy9pbm9kZS5jPTIzNzU9aW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGlub2RlICp2aSwgY29uc3QgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9udGZzL2lub2RlLmMtMjM5Ni1cdGlmICghTklub0NvbXByZXNzZWQobmkpIFx1MDAyNlx1MDAyNiBvbGRfaW5pdF9zaXplIFx1MDAzYyBvZmZzZXQpIHtcbmZzL250ZnMvaW5vZGUuYzoyMzk3Olx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfaW5pdF9zaXplLFxuZnMvbnRmcy9pbm9kZS5jLTIzOTgtXHRcdFx0XHQgICAgICAgb2Zmc2V0IC0gb2xkX2luaXRfc2l6ZSxcbi0tXG5mcy9udGZzL2lvbWFwLmM9MTU9c3RhdGljIHZvaWQgbnRmc19pb21hcF9wdXRfZm9saW9fbm9uX3Jlc2lkZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4tLVxuZnMvbnRmcy9pb21hcC5jLTY1LS8qXG5mcy9udGZzL2lvbWFwLmM6NjY6ICogaW9tYXBfemVyb19yYW5nZSBpcyBjYWxsZWQgZm9yIGFuIGFyZWEgYmV5b25kIHRoZSBpbml0aWFsaXplZCBzaXplLFxuZnMvbnRmcy9pb21hcC5jLTY3LSAqIGdhcmJhZ2UgdmFsdWVzIGNhbiBiZSByZWFkLCBzbyB6ZXJvaW5nIG91dCBpcyBuZWVkZWQuXG4tLVxuZnMvbnRmcy9pb21hcC5jPTMwMT1jb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIG50ZnNfcmVhZF9pb21hcF9vcHMgPSB7XG4tLVxuZnMvbnRmcy9pb21hcC5jLTMwNy0gKiBDaGVjayB0aGF0IHRoZSBjYWNoZWQgaW9tYXAgc3RpbGwgbWF0Y2hlcyB0aGUgTlRGUyBydW5saXN0IGJlZm9yZVxuZnMvbnRmcy9pb21hcC5jOjMwODogKiBpb21hcF96ZXJvX3JhbmdlKCkgaXMgY2FsbGVkLiBpZiB0aGUgcnVubGlzdCBjaGFuZ2VzIHdoaWxlIGlvbWFwIGlzXG5mcy9udGZzL2lvbWFwLmM6MzA5OiAqIGl0ZXJhdGluZyBhIGNhY2hlZCBpb21hcCwgaW9tYXBfemVyb19yYW5nZSgpIG1heSBvdmVyd3JpdGUgZm9saW9zXG5mcy9udGZzL2lvbWFwLmMtMzEwLSAqIHRoYXQgaGF2ZSBiZWVuIGFscmVhZHkgd3JpdHRlbiB3aXRoIHZhbGlkIGRhdGEuXG4tLVxuZnMvbnRmcy9pb21hcC5jPTM3Nj1zdGF0aWMgaW50IG50ZnNfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKVxuZnMvbnRmcy9pb21hcC5jLTM3Ny17XG5mcy9udGZzL2lvbWFwLmM6Mzc4Olx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsXG5mcy9udGZzL2lvbWFwLmMtMzc5LVx0XHRcdFx0b2Zmc2V0LCBsZW5ndGgsXG4tLVxuZnMvbnRmczMvZmlsZS5jPTIyMD1zdGF0aWMgaW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbnRmczMvZmlsZS5jLTIzNS1cbmZzL250ZnMzL2ZpbGUuYzoyMzY6XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCB2YWxpZCwgbmV3X3ZhbGlkIC0gdmFsaWQsIE5VTEwsXG5mcy9udGZzMy9maWxlLmMtMjM3LVx0XHRcdCAgICAgICBcdTAwMjZudGZzX2lvbWFwX29wcywgXHUwMDI2bnRmc19pb21hcF9mb2xpb19vcHMsIE5VTEwpO1xuLS1cbmZzL250ZnMzL2ZpbGUuYz00NDY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3QgdmJvLCBsb2ZmX3QgbGVuKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy01MzUtXHRcdGlmICh0bXAgXHUwMDNlIGZyb20pIHtcbmZzL250ZnMzL2ZpbGUuYzo1MzY6XHRcdFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgZnJvbSwgdG1wIC0gZnJvbSwgTlVMTCxcbmZzL250ZnMzL2ZpbGUuYy01MzctXHRcdFx0XHRcdCAgICAgICBcdTAwMjZudGZzX2lvbWFwX29wcyxcbi0tXG5mcy9udGZzMy9maWxlLmMtNTUzLVx0XHRpZiAodmJvIFx1MDAzYyBlbmRfYSBcdTAwMjZcdTAwMjYgZW5kX2EgXHUwMDNjIGVuZCkge1xuZnMvbnRmczMvZmlsZS5jOjU1NDpcdFx0XHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBlbmRfYSwgZW5kIC0gZW5kX2EsIE5VTEwsXG5mcy9udGZzMy9maWxlLmMtNTU1LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bnRmc19pb21hcF9vcHMsXG4tLVxuZnMvbnRmczMvaW5vZGUuYz02ODA9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxuLS1cbmZzL250ZnMzL2lub2RlLmMtNzE5LSAqIHVzZWQgd2l0aDpcbmZzL250ZnMzL2lub2RlLmM6NzIwOiAqIC0gaW9tYXBfemVyb19yYW5nZVxuZnMvbnRmczMvaW5vZGUuYy03MjEtICogLSBpb21hcF90cnVuY2F0ZV9wYWdlXG4tLVxuZnMvbnRmczMvaW5vZGUuYz04Nzc9c3RhdGljIGludCBudGZzX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuZ3RoLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtOTMyLSAqIHdyaXRlX2JlZ2luICYjNDM7IHB1dF9mb2xpbyAmIzQzOyB3cml0ZV9lbmQuXG5mcy9udGZzMy9pbm9kZS5jOjkzMzogKiBpb21hcF96ZXJvX3JhbmdlXG5mcy9udGZzMy9pbm9kZS5jLTkzNC0gKiBpb21hcF90cnVuY2F0ZV9wYWdlXG4tLVxuZnMveGZzL3hmc19pb21hcC5jPTIzNTc9eGZzX3plcm9fcmFuZ2UoXG4tLVxuZnMveGZzL3hmc19pb21hcC5jLTIzNzAtXHRcdFx0XHQgICAgICBcdTAwMjZ4ZnNfZGF4X3dyaXRlX2lvbWFwX29wcyk7XG5mcy94ZnMveGZzX2lvbWFwLmM6MjM3MTpcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBwb3MsIGxlbiwgZGlkX3plcm8sXG5mcy94ZnMveGZzX2lvbWFwLmMtMjM3Mi1cdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLCBcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzLFxuLS1cbmluY2x1ZGUvbGludXgvaW9tYXAuaD0zNjY9dW5zaWduZWQgaW50IGlvbWFwX2ZpbGxfZGlydHlfZm9saW9zKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgKnN0YXJ0LFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTM2Ny1cdFx0bG9mZl90IGVuZCwgdW5zaWduZWQgaW50ICppb21hcF9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MzY4OmludCBpb21hcF96ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzY5LVx0XHRib29sICpkaWRfemVybywgY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSU9NQVAgRnVuY3Rpb25zIGZvciBPcHRpbWl6ZWQgTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBJL08gbWFwcGluZyBmdW5jdGlvbnMgYXJlIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgYmxvY2sgbGF5ZXJzLiBJdCBsb29rcyBsaWtlIGBpb21hcF96ZXJvX3JhbmdlYCBpcyBhIGZhaXJseSBjb21tb24gZnVuY3Rpb24sIHV0aWxpemVkIGJ5IGdmczIsIG50ZnMsIG50ZnMzLCBhbmQgeGZzLiBUaGVuLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXZlbiBtb3JlIHdpZGVzcHJlYWQsIHNlcnZpbmcgYmxvY2ssIGVyb2ZzLCBmdXNlLCBnZnMyLCBudGZzLCBudGZzMywgeGZzLCBhbmQgem9uZWZzLiBJbnRlcmVzdGluZy4KCk15IHByaW1hcnkgaW50ZXJlc3QgcmlnaHQgbm93IGxpZXMgd2l0aCBgaW9tYXBfemVyb19pdGVyYCBhbmQgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGJlY2F1c2UgdGhleSBhcHBlYXIgdG8gYmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGZvciB0aGUgbW9kaWZpZWQgbG9naWMgdGhhdCBJJiMzOTttIGZvY3VzaW5nIG9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIHdpdGggdGhlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgZnVuY3Rpb25zLCBnaXZlbiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB0aGVpciBjb3JyZXNwb25kaW5nIGBpb21hcF8qYCBjb3VudGVycGFydHMuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGlzIHdpbGwgcHJvdmlkZSBpbnNpZ2h0IG9uIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTE4Mz1zdGF0aWMgdm9pZCBpZnNfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIwMS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjAyOnN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIwMy17XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03NzE9dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03ODQtXHR9IGVsc2Uge1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3ODU6XHRcdGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KGZvbGlvLCBvZmZzZXQsIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4Ni1cdH1cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE4ODQ9aW50IGlvbWFwX3dyaXRlYmFja19mb2xpbyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTk0My1cdCAqL1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxOTQ0Olx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGZvbGlvX3NpemUoZm9saW8pKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTk0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBJL08gTWFwcGluZyBDbGVhbmxpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2UmIzM5O3JlIGxpa2VseSBjbGVhcmluZyBkaXJ0eSBmbGFncyB3aGVuIHdlJiMzOTtyZSBpbnZhbGlkYXRpbmcgb3Igd3JpdGluZyBiYWNrIGRhdGEsIGFzIHdlIGV4cGVjdCB0aGUgZGF0YSB0byBiZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgb24gZGlzay4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29pbi4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZHJpbGwgZG93biBpbnRvIHRoZSBjYWxscyB0byBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YC4gSSB3YW50IHRvIGtub3cgd2hlcmUgYW5kICp3aHkqIHdlJiMzOTtyZSBzZXR0aW5nIHRoZXNlIHJhbmdlcyBhcyBkaXJ0eSBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGF0IHNob3VsZCBvZmZlciBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIHdyaXRlYmFjayBtZWNoYW5pc21zLiBHb3R0YSBlbnN1cmUgd2UmIzM5O3JlIG1hcmtpbmcgdGhpbmdzIGNvcnJlY3RseSB0byBndWFyYW50ZWUgZGF0YSBpbnRlZ3JpdHksIHNvIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgd2hhdCYjMzk7cyBpbml0aWF0aW5nIHRoZSBzZXR0aW5nIG9mIHRoZSBkaXJ0eSBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfc2V0X3JhbmdlX2RpcnR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjE3PXN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjM2OnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMzcte1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzkwPWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTUtXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6Nzk2Olx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTctXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDc0LVx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwNzU6XHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3Ni1cdGZpbGVtYXBfZGlydHlfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xODg0PWludCBpb21hcF93cml0ZWJhY2tfZm9saW8oc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5MDgtXHRcdFx0aWZzID0gaWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE5MDk6XHRcdFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBlbmRfcG9zIC0gcG9zKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTkxMC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgxMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBpb21hcCBSYW5nZSBEaXJ0eWluZyBhbmQgVXB0b2RhdGVuZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbWFya2luZyByYW5nZXMgb2YgZGF0YSBhcyBkaXJ0eSB3aXRoaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlvbWFwX2RpcnR5X2ZvbGlvYCwgYF9faW9tYXBfd3JpdGVfZW5kYCwgYW5kIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLiBUaG9zZSBhbGwgbWFrZSBwZXJmZWN0IHNlbnNlIOKAkyB3cml0ZSBvcGVyYXRpb25zIGFuZCB3cml0ZWJhY2sgcHJvY2VkdXJlcyB3b3VsZCBuYXR1cmFsbHkgbmVlZCB0byBzaWduYWwgd2hlbiBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBiaWcgcGljdHVyZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgc3RvcnksIGl0IG1ha2VzIHNlbnNlIHRvIHBpdm90LiBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBoZXJlIHdvdWxkIGJlIHRvIGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGVgLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSB3aG8mIzM5O3MgbWFuYWdpbmcgdGhlIG5vdGlvbiBvZiBkYXRhIGJlaW5nIHVwLXRvLWRhdGUsIHRvIGdldCBhIGNvbXBsZXRlIHZpZXcgb2YgaG93IHRoaW5ncyB3b3JrLiBVbmRlcnN0YW5kaW5nIHdobyYjMzk7cyBzZXR0aW5nIGRhdGEgYXMgY2xlYW4gb3IgZGlydHksIGFuZCB3aGVuLCB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2YgdGhlIGlvbWFwJiMzOTtzIGRhdGEgaW50ZWdyaXR5IG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NjY9c3RhdGljIGJvb2wgaWZzX3NldF9yYW5nZV91cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzktXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjgwOnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04MS1cdFx0c2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTM5ND1zdGF0aWMgaW50IGlvbWFwX3JlYWRfaW5saW5lX2RhdGEoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MTUtXHRmb2xpb19maWxsX3RhaWwoZm9saW8sIG9mZnNldCwgaW9tYXAtXHUwMDNlaW5saW5lX2RhdGEsIHNpemUpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo0MTY6XHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIG9mZnNldCwgZm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MTctXHRyZXR1cm4gMDtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTUzMz1zdGF0aWMgaW50IGlvbWFwX3JlYWRfZm9saW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTU3My1cdFx0XHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NTc0Olx0XHRcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgcG9mZiwgcGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTU3NS1cdFx0fSBlbHNlIHtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTgxNT1zdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04ODItXHRcdH1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODgzOlx0XHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIHBvZmYsIHBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04ODQtXHR9IHdoaWxlICgoYmxvY2tfc3RhcnQgJiM0Mzs9IHBsZW4pIFx1MDAzYyBibG9ja19lbmQpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTA1Nj1zdGF0aWMgYm9vbCBfX2lvbWFwX3dyaXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3My1cdFx0cmV0dXJuIGZhbHNlO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDc0Olx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzUtXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBGdXp6aW5nIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIGxldCYjMzk7cyBnZXQgdGhpcyBzdHJhaWdodC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIHRvIHRhcmdldCB3aXRoIHN5emthbGxlci4gSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgc2V2ZXJhbCBtb2RpZmllZCBmdW5jdGlvbnM6IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGlvbWFwX3plcm9faXRlcmAuIEkgd2FzIGFsc28gdGhpbmtpbmcgYWJvdXQgYSBicm9hZGVyIHNldCBvZiAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYGlvbWFwX3plcm9fcmFuZ2VgLCBgaW9tYXBfd3JpdGViYWNrX2ZvbGlvYCwgYW5kIHRoZSB2YXJpb3VzIGBpb21hcF93cml0ZV8qYCBmdW5jdGlvbnMuCgpUaGVuIEkgcGF1c2VkIGFuZCBjb25zaWRlcmVkIHN0YXRpYyBmdW5jdGlvbnMuIEkga25vdyBzeXprYWxsZXIgKmNhbiogZnV6eiBzdGF0aWMgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGlmIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCBidXQgaXQmIzM5O3MgY2xlYW5lciB0byBwcm92aWRlIHRoZSBleGFjdCBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGRpcmVjdCBjYWxsZXJzIGZvciBiZXR0ZXIgZnV6emluZy4gIFRoaXMgbGVkIG1lIHRvIHJldmlzaXQgdGhlIGxpc3QuIFdoaWxlIGBpb21hcF96ZXJvX2l0ZXJgIGlzIHN0YXRpYywgaXQmIzM5O3Mgbm90IGlubGluZWQsIHNvIHRoYXQmIzM5O3MgdmlhYmxlLiBBbHNvLCBJIHJlYWxpemVkIHRoYXQgSSBoYWQgYSB0eXBvIGFuZCBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIHNob3VsZCBiZSBpbmNsdWRlZC4KClNvLCB0aGUgdXBkYXRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOgoKKiAgIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYAoqICAgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAKKiAgIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAKKiAgIGBpZnNfc2V0X3JhbmdlX2RpcnR5YAoqICAgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gCiogICBgaW9tYXBfemVyb19pdGVyYAoqICAgYGlvbWFwX3plcm9fcmFuZ2VgCgpOb3csIGZvciBjb25maWd1cmF0aW9ucy4gV2UgbmVlZCB0byBzZWxlY3QgZmlsZXN5c3RlbXMgdGhhdCBlbmFibGUgdGhlIElPTUFQIGZlYXR1cmUuIEkgaW5pdGlhbGx5IGxpc3RlZCBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgLCBgRjJGU19GU2AsIGBHRlMyX0ZTYCwgYW5kIGBOVEZTM19GU2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgdW5kZXJseWluZyBgRlNfSU9NQVBgIGNvbmZpZyBpcyBoaWRkZW4uIFRodXMsIHdlIHNob3VsZCBlbmFibGUgZmlsZXN5c3RlbXMgdGhhdCBzZWxlY3QgaXQuIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgIGFyZSBleGNlbGxlbnQgY2hvaWNlcy4gIFRoZXJlZm9yZSwgSSYjMzk7bGwgZ28gd2l0aDoKCiogICBgWEZTX0ZTYAoqICAgYEVYVDRfRlNgCiogICBgQlRSRlNfRlNgCgpGaW5hbGx5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgRlNfSU9NQVBgIGRlcGVuZGVuY3kgaW4gYGZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNTgKCQkJCQkJCW91dHB1dDogMjM1CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElPTUFQIEJ1ZmZlcmVkIElPIFBhdGNoKioKCk9rYXksIGZpcnN0IGdsYW5jZSAtIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBoaWRkZW4gYm9vbGVhbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFF1aWNrIGNoZWNrLi4uIGFoYSEgV2UmIzM5O3ZlIGdvdCBgRlNfREFYYCBzZWxlY3RpbmcgYEZTX0lPTUFQYCwgYFpPTkVGU19GU2Agc2VsZWN0aW5nIGBGU19JT01BUGAsIGFuZCBgRVJPRlNfRlNgIHNlbGVjdGluZyBgRlNfSU9NQVBgLiBHb29kIHRvIGtub3c7IHRoYXQgZXhwYW5kcyB0aGUgcG90ZW50aWFsIGltcGFjdC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGVzeXN0ZW0gaW52b2x2ZW1lbnQsIEkmIzM5O2xsIGZsYWcgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYEJUUkZTX0ZTYCwgYW5kIGBGMkZTX0ZTYCBhcyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBlbmFibGluZyB0aGVzZSB3aWxsIGVuYWJsZSB0aGUgY29yZSBjaGFuZ2VzLgoKVGhlIHBhdGNoJiMzOTtzIGZ1bmN0aW9uIGlzIGNlbnRlcmVkIG9uIHRoZSBidWZmZXJlZCBJL08gbG9naWMgd2l0aGluIElPTUFQLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBob3cgZGlydHkgYW5kIHVwLXRvLWRhdGUgYml0cyBhcmUgaGFuZGxlZCBvbiBhIHBlci1ibG9jayBiYXNpcyB3aXRoaW4gYSBmb2xpby4gSXQmIzM5O3MgYWx0ZXJpbmcgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YC4gQWRkaXRpb25hbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgdG8gY2xlYW4gdXAgdGhlIGRpcnR5IGJpdHMgaW4gdGhlIGludmFsaWRhdGVkIHJlZ2lvbiwgYW5kIGZpeGluZyBgaW9tYXBfemVyb19pdGVyYCBzbyBpdCByZXBvcnRzIGNvcnJlY3RseSB3aGV0aGVyIHplcm9pbmcgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgd2hpbGUgaGFuZGxpbmcgZXJyb3JzLiBUaGlzIGlzIGNydWNpYWw7IHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgdXNlZCBieSBxdWl0ZSBhIGZldyBtYWpvciBmaWxlc3lzdGVtcywgaW5jbHVkaW5nIFhGUywgZXh0NCwgYW5kIGJ0cmZzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuCgpBbHJpZ2h0LCB0aW1lIHRvIHJlZmluZSB0aGUgZm9jYWwgcG9pbnRzLiBNeSB0YXJnZXQgZnVuY3Rpb25zIGFyZToKCi0gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgCi0gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAKLSBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgCi0gYGlmc19zZXRfcmFuZ2VfZGlydHlgCi0gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gCi0gYGlvbWFwX3plcm9faXRlcmAKLSBgaW9tYXBfemVyb19yYW5nZWAKCk5vdywgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA4OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGMkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICAgJiMzNDtpZnNfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9faXRlciYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvLiBJdCBhbHNvIGNoYW5nZXMgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyB0byBjbGVhciBkaXJ0eSBiaXRzIGZvciB0aGUgaW52YWxpZGF0ZWQgcmFuZ2UsIGFuZCBmaXhlcyBpb21hcF96ZXJvX2l0ZXIgdG8gY29ycmVjdGx5IHJlcG9ydCBpZiB6ZXJvaW5nIG9jY3VycmVkIGFuZCBoYW5kbGUgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1hbnkgbWFqb3IgZmlsZXN5c3RlbXMgKFhGUywgZXh0NCwgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtGMkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICAgJiMzNDtpZnNfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkmIzM0OywKICAgICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9faXRlciYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMsIHNwZWNpZmljYWxseSBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvLiBJdCBhbHNvIGNoYW5nZXMgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyB0byBjbGVhciBkaXJ0eSBiaXRzIGZvciB0aGUgaW52YWxpZGF0ZWQgcmFuZ2UsIGFuZCBmaXhlcyBpb21hcF96ZXJvX2l0ZXIgdG8gY29ycmVjdGx5IHJlcG9ydCBpZiB6ZXJvaW5nIG9jY3VycmVkIGFuZCBoYW5kbGUgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1hbnkgbWFqb3IgZmlsZXN5c3RlbXMgKFhGUywgZXh0NCwgYnRyZnMsIGV0Yy4pIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjg6NDguOTI3NDI4ODk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDgyNDA5NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZnNfc2V0X3JhbmdlX3VwdG9kYXRlXCIsXG4gICAgXCJpZnNfY2xlYXJfcmFuZ2VfZGlydHlcIixcbiAgICBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpZnNfc2V0X3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX2l0ZXJcIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpby4gSXQgYWxzbyBjaGFuZ2VzIGlvbWFwX2ludmFsaWRhdGVfZm9saW8gdG8gY2xlYXIgZGlydHkgYml0cyBmb3IgdGhlIGludmFsaWRhdGVkIHJhbmdlLCBhbmQgZml4ZXMgaW9tYXBfemVyb19pdGVyIHRvIGNvcnJlY3RseSByZXBvcnQgaWYgemVyb2luZyBvY2N1cnJlZCBhbmQgaGFuZGxlIGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYW55IG1ham9yIGZpbGVzeXN0ZW1zIChYRlMsIGV4dDQsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjg6NDguOTI3NDQyNzM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIwMDE3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDA4OjI4OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbi1cXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4tXFx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XFxuK1xcdHVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrO1xcbiBcXG4tXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIG5yX2Jsa3MpO1xcbitcXHRpZiAobGVuKSB7XFxuK1xcdFxcdGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xcbiB9XFxuIFxcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxcbiBcXHRyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0O1xcbiB9XFxuIFxcbisvKlxcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXFxuKyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgaW53YXJkcyBzbyB0aGF0IG9ubHkgYmxvY2tzIGZ1bGx5IGNvdmVyZWQgYnlcXG4rICogdGhlIHJhbmdlIGFyZSBjbGVhcmVkLiAgVGhpcyBpcyByZXF1aXJlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGZvbGlvXFxuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xcbisgKiBpdC5cXG4rICovXFxuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlXFxuK1xcdFxcdFxcdFxcdCBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4rXFx0aWYgKGZpcnN0X2JsayBcXHUwMDNlPSBsYXN0X2JsaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xcbitcXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXFxuK1xcdFxcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZpZnMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtMTk0LDE4ICsyMDcsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4gXFx0XFx0aWZzX2NsZWFyX3JhbmdlX2RpcnR5KGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcXG4gfVxcbiBcXG4rLypcXG4rICogU2V0IHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICsgQGxlbikgd2l0aGluIGFcXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxcbisgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYVxcbisgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nXFxuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxcbisgKi9cXG4gc3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuK1xcdGlmICghbGVuKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmaXJzdF9ibGsgPSBvZmYgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4rXFx0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTtcXG4rXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgKyBibGtzX3Blcl9mb2xpbyxcXG4rXFx0XFx0ICAgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aWZzLVxcdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTc1Nyw2ICs3ODEsOCBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX2NhbmNlbF9kaXJ0eShmb2xpbyk7XFxuIFxcdFxcdGlmc19mcmVlKGZvbGlvKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcXG4gXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcXG4ge1xcbiBcXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XFxuK1xcdGJvb2wgemVyb2VkID0gZmFsc2U7XFxuIFxcdGludCBzdGF0dXM7XFxuIFxcbiBcXHRkbyB7XFxuQEAgLTE1NTQsNiArMTU4MSw4IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcXG4gXFx0XFx0LyogYSBOVUxMIGZvbGlvIG1lYW5zIHdlJ3JlIGRvbmUgd2l0aCBhIGZvbGlvIGJhdGNoICovXFxuIFxcdFxcdGlmICghZm9saW8pIHtcXG4gXFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdFxcdFxcdGJ5dGVzKTtcXG4gXFxuIFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbitcXHRcXHR6ZXJvZWQgPSB0cnVlO1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4gXFxuIFxcdFxcdHJldCA9IGlvbWFwX3dyaXRlX2VuZChpdGVyLCBieXRlcywgYnl0ZXMsIGZvbGlvKTtcXG5AQCAtMTU3MywxMCArMTYwMywxMCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcbiBcXHRcXHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gXFx0fSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSBcXHUwMDNlIDApO1xcbiBcXG4tXFx0aWYgKGRpZF96ZXJvKVxcbitcXHRpZiAoZGlkX3plcm8gXFx1MDAyNlxcdTAwMjYgemVyb2VkKVxcbiBcXHRcXHQqZGlkX3plcm8gPSB0cnVlO1xcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI4OjQ5LjUwMDE0MzA0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NTA5Njg2MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZnNfc2V0X3JhbmdlX3VwdG9kYXRlXCIsXG4gICAgXCJpZnNfY2xlYXJfcmFuZ2VfZGlydHlcIixcbiAgICBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpZnNfc2V0X3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX2l0ZXJcIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpby4gSXQgYWxzbyBjaGFuZ2VzIGlvbWFwX2ludmFsaWRhdGVfZm9saW8gdG8gY2xlYXIgZGlydHkgYml0cyBmb3IgdGhlIGludmFsaWRhdGVkIHJhbmdlLCBhbmQgZml4ZXMgaW9tYXBfemVyb19pdGVyIHRvIGNvcnJlY3RseSByZXBvcnQgaWYgemVyb2luZyBvY2N1cnJlZCBhbmQgaGFuZGxlIGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYW55IG1ham9yIGZpbGVzeXN0ZW1zIChYRlMsIGV4dDQsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjM0OWNlZTA2MGNlMWZhMzU5M2NiMWVhNmNlY2UyYWEyMWUzMWQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDg6Mjg6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTtcbitcdGlmIChsZW4pIHtcbitcdFx0Zmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIGxhc3RfYmxrIC0gZmlyc3RfYmxrICsgMSk7XG4rXHR9XG4gXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xuIH1cbiBcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxuIFx0cmV0dXJuIHJhbmdlX2VuZCAtICpyYW5nZV9zdGFydDtcbiB9XG4gXG4rLypcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieVxuKyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpb1xuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xuKyAqIGl0LlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XG4rXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFx1MDAzZVx1MDAzZVxuK1x0XHRcdFx0IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbitcdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKGZpcnN0X2JsayBcdTAwM2U9IGxhc3RfYmxrKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXG4rXHRcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC0xOTQsMTggKzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIFx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuIH1cbiBcbisvKlxuKyAqIFNldCB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxuKyAqIGJ5IHRoZSByYW5nZSBpcyBtYXJrZWQgZGlydHkuICBUaGlzIGVuc3VyZXMgYmxvY2tzIGNvbnRhaW5pbmcgZXZlbiBhXG4rICogc2luZ2xlIGRpcnR5IGJ5dGUgd2lsbCBiZSBpbmNsdWRlZCBpbiBzdWJzZXF1ZW50IHdyaXRlYmFjaywgcHJldmVudGluZ1xuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuLVx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cyk7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKCFsZW4pXG4rXHRcdHJldHVybjtcbitcbitcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuK1x0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmlmcy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLFxuK1x0XHQgICBsYXN0X2JsayAtIGZpcnN0X2JsayArIDEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC03NTcsNiArNzgxLDggQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4gXHRcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuIFx0XHRmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pO1xuIFx0XHRpZnNfZnJlZShmb2xpbyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcbiB7XG4gXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XG4rXHRib29sIHplcm9lZCA9IGZhbHNlO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdGRvIHtcbkBAIC0xNTU0LDYgKzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdC8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSdyZSBkb25lIHdpdGggYSBmb2xpbyBiYXRjaCAqL1xuIFx0XHRpZiAoIWZvbGlvKSB7XG4gXHRcdFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XG4rXHRcdFx0aWYgKHN0YXR1cylcbitcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdFx0XHRieXRlcyk7XG4gXG4gXHRcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHR6ZXJvZWQgPSB0cnVlO1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiBcbiBcdFx0cmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pO1xuQEAgLTE1NzMsMTAgKzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFxuIFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xuIFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4gXHR9IHdoaWxlICgoYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcikpIFx1MDAzZSAwKTtcbiBcbi1cdGlmIChkaWRfemVybylcbitcdGlmIChkaWRfemVybyBcdTAwMjZcdTAwMjYgemVyb2VkKVxuIFx0XHQqZGlkX3plcm8gPSB0cnVlO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyODo0OS41MDAxNDQ5NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTY1NzMzNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4ga2lja3MgaW47IGlvbWFwIGlzICpjb3JlKiBpbmZyYXN0cnVjdHVyZS4gVGhpcyB0b3VjaGVzIHRoZSBmdW5kYW1lbnRhbCBidWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24gdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYnRyZnMsIGFuZCBldmVuIGxlc3MgY29tbW9uIG9uZXMgbGlrZSBnZnMyIGFuZCB6b25lZnMuIEFueSBtb2RpZmljYXRpb24gaGVyZSBpcyBhIHBvdGVudGlhbCBnb2xkbWluZSBmb3IgZnV6emluZyBiZWNhdXNlIG9mIHRoZSBicm9hZCBpbXBhY3QuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgc3BlY2lmaWNhbGx5IGltcGFjdCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgYWxsIGludGVncmFsIHBhcnRzIG9mIGhvdyBpb21hcCBoYW5kbGVzIGRhdGEgcmFuZ2VzLCBkaXJ0eSBwYWdlcywgemVyb2luZyBvdXQgcmVnaW9ucywgYW5kIGludmFsaWRhdGluZyBmb2xpbyBkYXRhLiBUaGVzZSBhcmUgY2xhc3NpYyBwb2ludHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IGtleSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgZGF0YSBtYW5pcHVsYXRpb24gd2l0aGluIHRoZSBJL08gcGF0aC5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIGFzIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgdGhlcmUuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGlzIGFyZWEsIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIHRvIHNldCBmb3IgdGhlIGZ1enppbmcuIGBGU19JT01BUGAgYW5kIGBJT01BUGAgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIEknbGwgcnVuIGEgcXVpY2sgYGdyZXBgIHNlYXJjaC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IEkgbmVlZCBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgYW5kIGVmZmVjdGl2ZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjg6NTUuNjY1ODgwNDM5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTU1MjcxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxcbi0tXFxuZnMvS2NvbmZpZy0xNy1cXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxcbmZzL0tjb25maWctMTktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyODo1OC42ODE0MTM0MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODc1MTU0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyIG9mIGZpbGVzeXN0ZW1zIGFuZCBpb21hcCwgcmVuZGVyZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW1zIGFuZCBJT01BUCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZmlndXJlIG91dCB3aGljaCBmaWxlc3lzdGVtcyBsZXZlcmFnZSBpb21hcC4gVGhpcyBpc24ndCBqdXN0IGEgc2ltcGxlIHF1ZXJ5OyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgaG93IG1vZGVybiBzdG9yYWdlIHdvcmtzLCBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyB0aGF0IHJlbGF0ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgaW9tYXAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgaW9tYXAgcHJvdmlkZXMgYmVuZWZpdCBhbmQgd2hlcmUgaXQgZG9lcyBub3QuXG5cbkZpcnN0LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeS4gSW9tYXAgaXMgZnVuZGFtZW50YWxseSBhbiBJL08gbWFwcGluZyBzdHJhdGVneS4gSXQncyBhYm91dCBlZmZpY2llbnRseSB0cmFuc2xhdGluZyBsb2dpY2FsIGJsb2NrIGFkZHJlc3NlcyB1c2VkIGJ5IHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBwaHlzaWNhbCBibG9jayBhZGRyZXNzZXMgb24gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkZXZpY2UuIEl0J3MgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBzcGFyc2UgZmlsZXMsIG91dC1vZi1vcmRlciB3cml0ZXMsIG9yIGNvbXBsZXggc3RvcmFnZSBsYXlvdXRzLiBJIG5lZWQgdG8gcmVjYWxsIHRoZSBkZXRhaWxzIG9mIHRoaXMgYW5kIHRoZSBiZW5lZml0cyBvZiBpdHMgdXNlLlxuXG5Ob3csIHdoaWNoIGZpbGVzeXN0ZW1zICphY3R1YWxseSogdXNlIGl0PyBJIGtub3cgRVhUNCBkb2Vzbid0IChvciBhdCBsZWFzdCwgZGlkbid0LCBvciBub3QgZXhjbHVzaXZlbHkpIGFuZCBCdHJmcyBhbmQgWEZTIGhhdmUgdGhlaXIgb3duIEkvTyBzdHJhdGVnaWVzLiBJIHJlbWVtYmVyIHNlZWluZyByZWZlcmVuY2VzIHRvIHNwZWNpZmljIGZpbGVzeXN0ZW1zLCBidXQgYSBxdWljayBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGRvY3VtZW50YXRpb24sIHRoZW4gcGVyaGFwcyBsb29rIGF0IHRoZSBrZXJuZWwgc291cmNlIGNvZGUgZm9yIGNsdWVzIGFib3V0IG1vZHVsZSB1c2FnZSwgYW5kIGNyb3NzIHJlZmVyZW5jZSB0aGVtLiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBiZSBjZXJ0YWluLlxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgdG9vLCB0aGUgdmFyaW91cyBzdG9yYWdlIHRlY2hub2xvZ2llcyBhbmQgaGFyZHdhcmUgdGhhdCB0aGlzIG1hcHBpbmcgbXVzdCB3b3JrIHdpdGguIFRoZSBpbnRyaWNhY2llcyBvZiBpb21hcCBsaWtlbHkgdmFyeSBjb25zaWRlcmFibHkgZGVwZW5kaW5nIG9uIHRoZSBuYXR1cmUgb2YgdGhlIHN0b3JhZ2U7IFNTRHMsIEhERHMsIGFuZCBuZXR3b3JrZWQgc3RvcmFnZSBhbGwgcHJlc2VudCBkaWZmZXJlbnQgY2hhbGxlbmdlcyBhbmQgb3B0aW1pemF0aW9ucy4gSSdsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBjb250ZXh0IGFzIEkgaW52ZXN0aWdhdGUuXG5cblNvLCBJJ20gZ29pbmcgdG8gZm9ybXVsYXRlIGEgc2VhcmNoIHF1ZXJ5IHRvIGlkZW50aWZ5IGZpbGVzeXN0ZW1zIHVzaW5nIHRoZSB0ZXJtLiBJZGVhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSB0aGF0IGxldmVyYWdlIGlvbWFwIGFzIGEgKmNvcmUqIGNvbXBvbmVudCBmb3IgaXRzIEkvTyBvcGVyYXRpb25zLiBJIGFsc28gd2FudCB0byBmaW5kIHdoaWNoIG9uZXMgdXNlZCBpdCBvciB0cmllZCB0byB1c2UgaXQuXG5UaGUgZ29hbCBoZXJlIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYW5kc2NhcGUsIG5vdCBqdXN0IGEgc3VyZmFjZS1sZXZlbCBsaXN0LiBJIHdhbnQgdG8ga25vdyB3aHkgdGhleSBjaG9zZSBpdCwgaG93IHRoZXkgaW1wbGVtZW50ZWQgaXQsIGFuZCB3aGF0IHRoZSB0cmFkZS1vZmZzIGFyZS4gVGhpcyBpcyBhIGNoYW5jZSB0byBkZWVwZW4gbXkgb3duIHVuZGVyc3RhbmRpbmcsIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjA4LjU1NjU2OTM1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIyMTI2MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBGU19JT01BUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VgYCBmcm9tIHlvdXIgc291cmNlIGNvZGUgYW5kIGFkZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0ncyBLY29uZmlnIG9wdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcXG4tLVxcbmJsb2NrL0tjb25maWc9NT1tZW51Y29uZmlnIEJMT0NLXFxuLS1cXG5ibG9jay9LY29uZmlnLTctICAgICAgIGRlZmF1bHQgeVxcbmJsb2NrL0tjb25maWc6ODogICAgICAgc2VsZWN0IEZTX0lPTUFQXFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjYyOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL0tjb25maWctNjMtXFx0c2VsZWN0IERBWFxcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXFxuZnMvYnRyZnMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9idHJmcy9LY29uZmlnLTE2LVxcdHNlbGVjdCBSQUlENl9QUVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy05LVxcdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Vyb2ZzL0tjb25maWctMTEtXFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy00LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDIvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDIvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9leHQ0L0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQ0L0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG5mcy9mMmZzL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZjJmcy9LY29uZmlnLTExLVxcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvZnVzZS9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZnVzZS9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy03LVxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL2dmczIvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2dmczIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXFxuLS1cXG5mcy9ocGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9ocGZzL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5mcy9udGZzL0tjb25maWc9Mj1jb25maWcgTlRGU19GU1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTQtXFx0c2VsZWN0IE5MU1xcbmZzL250ZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL250ZnMvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL3hmcy9LY29uZmlnPTI9Y29uZmlnIFhGU19GU1xcbi0tXFxuZnMveGZzL0tjb25maWctNi1cXHRzZWxlY3QgQ1JDMzJcXG5mcy94ZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL3hmcy9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZy00LVxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbmZzL3pvbmVmcy9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvem9uZWZzL0tjb25maWctNi1cXHRzZWxlY3QgQ1JDMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6MTAuNzc4Njk5OTg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1ODI3Mzg1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb21hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgaW9tYXAgdGhpbmcsIHdoaWNoIEkga25vdyBpcyB3aWRlbHkgdXNlZCBhY3Jvc3MgdmFyaW91cyBmaWxlc3lzdGVtcy4gWEZTLCBFWFQ0LCBCVFJGUyDigJMgdGhvc2UgYXJlIHRoZSBiaWcgcGxheWVycyBoZXJlLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgd2UgbWlnaHQgbmVlZCB0byBzcGVjaWZ5IHRoZW0gZGlyZWN0bHkgYXMgZGVwZW5kZW5jaWVzLCBtYXliZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLiBUaGVuIEkgcmVtZW1iZXJlZCBgRlNfSU9NQVBgIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gdGhhdCdzIGEgZGVhZCBlbmQuIFdlIGp1c3QgbmVlZCB0byBlbnN1cmUgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgbGV2ZXJhZ2UgaW9tYXAgYXJlIGVuYWJsZWQuXG5cbldhaXQsIFhGUyBpcyBwcm9iYWJseSBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LCBzbyBsZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LCB0aGVuIG1vdmUgb24uIFRoZXJlIGFyZW4ndCBhbnkgc3BlY2lmaWMgaW9tYXAtb25seSBjb25maWdzLCBhcyBleHBlY3RlZC4gSXQncyBqdXN0IGluZGlyZWN0bHkgYWN0aXZhdGVkIGJ5IGVuYWJsaW5nIGEgZmlsZXN5c3RlbSB1c2luZyBpdC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIEkgc2VlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGlvbWFwX3plcm9faXRlcmAuIEkgY2FuIGFscmVhZHkgdGVsbCB0aGF0IGEgYnVuY2ggb2YgdGhlIGBpZnNfKmAgZnVuY3Rpb25zLCBhbmQgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCBhcmUgc3RhdGljLCBhbmQgcHJvYmFibHkgaW50ZXJuYWwgdG8gdGhlIGlvbWFwIGltcGxlbWVudGF0aW9uLiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXhwb3J0ZWQsIHNvIGl0J3MgcHJvYmFibHkgdXNlZCBtb3JlIHdpZGVseS4gQW5kLCBqdXN0IGxpa2UgdGhlIG90aGVycywgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgd2hlcmUgYGlvbWFwX3plcm9faXRlcmAgaXMgYmVpbmcgY2FsbGVkIGZyb20uIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbGVycyBhbmQgc2VlIGhvdyB0aGV5IGFyZSB1c2luZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOToyMi4zNjE0NDAwNTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3Nzg0NjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF96ZXJvX2l0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNTQ1PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ZpbGVfdW5zaGFyZSk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NTEtICovXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTUyOnN0YXRpYyBpbmxpbmUgaW50IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoc3RydWN0IGlvbWFwX2l0ZXIgKmkpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2MC1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2Mi1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlxcdFxcdHRyYWNlX2lvbWFwX3plcm9faXRlcihpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXFx0XFx0XFx0XFx0Ynl0ZXMpO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODYtXFx0XFx0XFx0XFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2ODc6XFx0XFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfemVyb19pdGVyX2ZsdXNoX2FuZF9zdGFsZShcXHUwMDI2aXRlcik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg4LVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk1OlxcdFxcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFxcdTAwMjZpdGVyLCBkaWRfemVybywgd3JpdGVfb3BzKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTYtXFx0fVxcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD04Nj1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX3J3X3F1ZXVlZCk7XFxuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcXG5mcy9pb21hcC90cmFjZS5oLTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOToyNC4zMzkyOTU1MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQyMDExOTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIGBpb21hcF96ZXJvX2l0ZXJgIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYGlvbWFwX3plcm9fcmFuZ2VgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgYSBnaXZlbi4gQnV0IG5vdywgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGZsYWdnZWQgYXMgYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgc3BhcmtzIG15IGludGVyZXN0OyBpZiBpdCdzIGV4cG9ydGVkLCB0aGF0IG1lYW5zIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBtYXliZSBldmVuIGRpZmZlcmVudCBmaWxlc3lzdGVtcywgb3IgYXQgbGVhc3Qgb3RoZXIgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIHNhbWUgZmlsZXN5c3RlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgKndobyogaXMgbWFraW5nIHVzZSBvZiB0aGF0LiBJdCdzIHRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AuIEl0IGNvdWxkIGJlIGEgdmFsdWFibGUgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSB1c2VkIGZvciBzb21lIGtleSBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGl0J3MgYW4gdW5kZXJ1dGlsaXplZCBmdW5jdGlvbiBhbmQgaXRzIGN1cnJlbnQgdXNlIGlzIG1pc2xlYWRpbmcuIEtub3dpbmcgd2hvIGludm9rZXMgdGhhdCBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgaXQuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOTozNi43NTk0MTY4MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzI0Nzg3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0PTQ1PWFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBzdHJ1Y3R1cmU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0LTQ4LSAqIGBgaW9tYXBfcmVsZWFzZV9mb2xpb2BgXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdDo0OTogKiBgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gYFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvb3BlcmF0aW9ucy5yc3QtNTAtICogYGBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGVgYFxcbi0tXFxuYmxvY2svZm9wcy5jPTU4NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wcyA9IHtcXG4tLVxcbmJsb2NrL2ZvcHMuYy01ODctXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuYmxvY2svZm9wcy5jOjU4ODpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5ibG9jay9mb3BzLmMtNTg5LVxcdC5yZWFkX2ZvbGlvXFx0XFx0PSBibGtkZXZfcmVhZF9mb2xpbyxcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYz00NTk9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlcm9mc19hb3BzID0ge1xcbi0tXFxuZnMvZXJvZnMvZGF0YS5jLTQ2NC1cXHQucmVsZWFzZV9mb2xpbyA9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuZnMvZXJvZnMvZGF0YS5jOjQ2NTpcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXFxuZnMvZXJvZnMvZGF0YS5jLTQ2Ni19O1xcbi0tXFxuZnMvZnVzZS9maWxlLmM9MzE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBmdXNlX2ZpbGVfYW9wcyAgPSB7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0zMTk3LVxcdC5yZWxlYXNlX2ZvbGlvXFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL2Z1c2UvZmlsZS5jOjMxOTg6XFx0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbmZzL2Z1c2UvZmlsZS5jLTMxOTktXFx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcXG4tLVxcbmZzL2dmczIvYW9wcy5jPTcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBnZnMyX2FvcHMgPSB7XFxuLS1cXG5mcy9nZnMyL2FvcHMuYy03MTYtXFx0LnJlbGVhc2VfZm9saW8gPSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL2dmczIvYW9wcy5jOjcxNzpcXHQuaW52YWxpZGF0ZV9mb2xpbyA9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXFxuZnMvZ2ZzMi9hb3BzLmMtNzE4LVxcdC5ibWFwID0gZ2ZzMl9ibWFwLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03Njk9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfcmVsZWFzZV9mb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzAtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3NzE6dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzIte1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzczOlxcdHRyYWNlX2lvbWFwX2ludmFsaWRhdGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzQtXFx0XFx0XFx0XFx0XFx0Zm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg3LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4OS1cXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmg9ODM9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmg6ODQ6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmgtODUtREVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19pbnZhbGlkYXRlX2ZhaWwpO1xcbi0tXFxuZnMvbnRmcy9hb3BzLmM9MjgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9hb3BzLmMtMjg5LVxcdC5yZWxlYXNlX2ZvbGlvXFx0XFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL250ZnMvYW9wcy5jOjI5MDpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9udGZzL2FvcHMuYy0yOTEtXFx0LnN3YXBfYWN0aXZhdGUgICAgICAgICAgPSBudGZzX3N3YXBfYWN0aXZhdGUsXFxuLS1cXG5mcy9udGZzL2FvcHMuYz0yOTQ9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX21mdF9hb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9hb3BzLmMtMzAzLVxcdC5yZWxlYXNlX2ZvbGlvXFx0XFx0PSBpb21hcF9yZWxlYXNlX2ZvbGlvLFxcbmZzL250ZnMvYW9wcy5jOjMwNDpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9udGZzL2FvcHMuYy0zMDUtfTtcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9MjEwMD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG50ZnNfYW9wcyA9IHtcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtMjEwNy1cXHQucmVsZWFzZV9mb2xpb1xcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG5mcy9udGZzMy9pbm9kZS5jOjIxMDg6XFx0LmludmFsaWRhdGVfZm9saW8gPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbmZzL250ZnMzL2lub2RlLmMtMjEwOS19O1xcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz0yMTExPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgbnRmc19hb3BzX2NtcHIgPSB7XFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTIxMTQtXFx0LnJlbGVhc2VfZm9saW9cXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuZnMvbnRmczMvaW5vZGUuYzoyMTE1OlxcdC5pbnZhbGlkYXRlX2ZvbGlvID0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy9udGZzMy9pbm9kZS5jLTIxMTYtfTtcXG4tLVxcbmZzL3hmcy94ZnNfYW9wcy5jPTg0NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy94ZnMveGZzX2FvcHMuYy04NTAtXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuZnMveGZzL3hmc19hb3BzLmM6ODUxOlxcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbmZzL3hmcy94ZnNfYW9wcy5jLTg1Mi1cXHQuYm1hcFxcdFxcdFxcdD0geGZzX3ZtX2JtYXAsXFxuLS1cXG5mcy96b25lZnMvZmlsZS5jPTE4NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHpvbmVmc19maWxlX2FvcHMgPSB7XFxuLS1cXG5mcy96b25lZnMvZmlsZS5jLTE5MC1cXHQucmVsZWFzZV9mb2xpb1xcdFxcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcXG5mcy96b25lZnMvZmlsZS5jOjE5MTpcXHQuaW52YWxpZGF0ZV9mb2xpb1xcdD0gaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyxcXG5mcy96b25lZnMvZmlsZS5jLTE5Mi1cXHQubWlncmF0ZV9mb2xpb1xcdFxcdD0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb21hcC5oPTM2MD1ib29sIGlvbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MzYxOnZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzYyLWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwODoyOTozOC43MzE5MDAxNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NjEwNDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBvbiBteSBtaW5kIHJlZ2FyZGluZyB0aGVzZSBmaWxlc3lzdGVtIGZ1bmN0aW9ucy5cblxuKipJbnZlc3RpZ2F0aW5nIEZpbGVzeXN0ZW0gSS9PIE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCBzbyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIsIHV0aWxpemVkIGJ5IGEgcHJldHR5IGRpdmVyc2UgZ3JvdXAgb2YgZmlsZXN5c3RlbXM6IGJsb2NrLCBlcm9mcywgZnVzZSwgZ2ZzMiwgbnRmcywgbnRmczMsIHhmcywgYW5kIHpvbmVmcy4gVGhhdCdzIGEgc29saWQgY3Jvc3Mtc2VjdGlvbi4gSXQncyBjbGVhciB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGludmFsaWRhdGluZyBjYWNoZWQgZGF0YSwgcHJvYmFibHkgZHVyaW5nIHdyaXRlYmFjayBvciBkYXRhIGludGVncml0eSBvcGVyYXRpb25zLiBUaGVuIHRoZXJlJ3MgYGlvbWFwX3plcm9fcmFuZ2VgLCB3aGljaCBhbHNvIGdldHMgdXNlZCBieSB2YXJpb3VzIGZpbGVzeXN0ZW1zLiBJdCBzdWdnZXN0cyBpdCBoYXMgYSBwdXJwb3NlLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gZWZmaWNpZW50bHkgemVyb2luZyBvdXQgcmFuZ2VzIG9mIGRhdGEgYmxvY2tzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBkZWVwZXIgaW50byBpdHMgdXNhZ2UsIHNvIEkgc2hvdWxkIG5vdyBjaGVjayB0aGUgY2FsbGVycyBvZiBgaW9tYXBfemVyb19yYW5nZWAuIExldCdzIHNlZSB3aGF0IGtpbmRzIG9mIGZpbGVzeXN0ZW0gb3B0aW1pemF0aW9ucyBvciBvcGVyYXRpb25zIGl0J3MgdGllZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjQyLjEyODAwNzI1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTk2MTQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF96ZXJvX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGF4LnJzdD0yMTU9RmlsZXN5c3RlbSBzdXBwb3J0IGNvbnNpc3RzIG9mOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0LTIyNS0gIGFwcHJvcHJpYXRlIGZhdWx0IHNpemUgYW5kIGlvbWFwIG9wZXJhdGlvbnMuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kYXgucnN0OjIyNjoqIENhbGxpbmcgOmM6ZnVuYzpgaW9tYXBfemVyb19yYW5nZSgpYCBwYXNzaW5nIGFwcHJvcHJpYXRlIGlvbWFwIG9wZXJhdGlvbnNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RheC5yc3QtMjI3LSAgaW5zdGVhZCBvZiA6YzpmdW5jOmBibG9ja190cnVuY2F0ZV9wYWdlKClgIGZvciBgREFYYCBmaWxlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdD0yNzA9WmVyb2luZyBmb3IgRmlsZSBPcGVyYXRpb25zXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0LTI3Mi1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL29wZXJhdGlvbnMucnN0OjI3MzpGaWxlc3lzdGVtcyBjYW4gY2FsbCBgYGlvbWFwX3plcm9fcmFuZ2VgYCB0byBwZXJmb3JtIHplcm9pbmcgb2YgdGhlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pb21hcC9vcGVyYXRpb25zLnJzdC0yNzQtcGFnZWNhY2hlIGZvciBub24tdHJ1bmNhdGlvbiBmaWxlIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IGFsaWduZWQgdG9cXG4tLVxcbmZzL2dmczIvYm1hcC5jPTEzMTQ9c3RhdGljIGludCBnZnMyX2Jsb2NrX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20sIGxvZmZfdCBsZW5ndGgpXFxuLS1cXG5mcy9nZnMyL2JtYXAuYy0xMzE5LVxcdGxlbmd0aCA9IG1pbihsZW5ndGgsIGlub2RlLVxcdTAwM2VpX3NpemUgLSBmcm9tKTtcXG5mcy9nZnMyL2JtYXAuYzoxMzIwOlxcdHJldHVybiBpb21hcF96ZXJvX3JhbmdlKGlub2RlLCBmcm9tLCBsZW5ndGgsIE5VTEwsIFxcdTAwMjZnZnMyX2lvbWFwX29wcyxcXG5mcy9nZnMyL2JtYXAuYy0xMzIxLVxcdFxcdFxcdFxcdTAwMjZnZnMyX2lvbWFwX3dyaXRlX29wcywgTlVMTCk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NTA9aW50XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjUxOmlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjUyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY5OC19XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk5OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3plcm9fcmFuZ2UpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcwMC1cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTcwMj1pb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzExLVxcdFxcdHJldHVybiAwO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTcxMjpcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgcG9zLCBibG9ja3NpemUgLSBvZmYsIGRpZF96ZXJvLCBvcHMsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzEzLVxcdFxcdFxcdHdyaXRlX29wcywgcHJpdmF0ZSk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0yNTI9c3RhdGljIGludCBudGZzX3NldGF0dHJfc2l6ZShzdHJ1Y3QgaW5vZGUgKnZpLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0yODEtXFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlaWFfc2l6ZSAtIG9sZF9zaXplKTtcXG5mcy9udGZzL2ZpbGUuYzoyODI6XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZSh2aSwgb2xkX3NpemUsIGxlbixcXG5mcy9udGZzL2ZpbGUuYy0yODMtXFx0XFx0XFx0XFx0TlVMTCwgXFx1MDAyNm50ZnNfc2Vla19pb21hcF9vcHMsXFxuLS1cXG5mcy9udGZzL2ZpbGUuYz04NDQ9c3RhdGljIGludCBudGZzX3B1bmNoX2hvbGUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTg4My1cXHRcXHRcXHRcXHQgICBlbmRfb2Zmc2V0KTtcXG5mcy9udGZzL2ZpbGUuYzo4ODQ6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZSh2aSwgb2Zmc2V0LCB0byAtIG9mZnNldCxcXG5mcy9udGZzL2ZpbGUuYy04ODUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIFxcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtODk5LVxcdFxcdGlmIChmcm9tIFxcdTAwM2MgbmktXFx1MDAzZWluaXRpYWxpemVkX3NpemUpIHtcXG5mcy9udGZzL2ZpbGUuYzo5MDA6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZSh2aSwgZnJvbSwgZW5kX29mZnNldCAtIGZyb20sXFxuZnMvbnRmcy9maWxlLmMtOTAxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBOVUxMLCBcXHUwMDI2bnRmc19zZWVrX2lvbWFwX29wcyxcXG4tLVxcbmZzL250ZnMvZmlsZS5jPTEwMjY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTEwMy1cXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQgLSBvbGRfc2l6ZSk7XFxuZnMvbnRmcy9maWxlLmM6MTEwNDpcXHRcXHRcXHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfc2l6ZSwgbGVuLCBOVUxMLFxcbmZzL250ZnMvZmlsZS5jLTExMDUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZudGZzX3NlZWtfaW9tYXBfb3BzLFxcbi0tXFxuZnMvbnRmcy9pbm9kZS5jPTIzNzU9aW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGlub2RlICp2aSwgY29uc3QgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL250ZnMvaW5vZGUuYy0yMzk2LVxcdGlmICghTklub0NvbXByZXNzZWQobmkpIFxcdTAwMjZcXHUwMDI2IG9sZF9pbml0X3NpemUgXFx1MDAzYyBvZmZzZXQpIHtcXG5mcy9udGZzL2lub2RlLmM6MjM5NzpcXHRcXHRlcnIgPSBpb21hcF96ZXJvX3JhbmdlKHZpLCBvbGRfaW5pdF9zaXplLFxcbmZzL250ZnMvaW5vZGUuYy0yMzk4LVxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXQgLSBvbGRfaW5pdF9zaXplLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jPTE1PXN0YXRpYyB2b2lkIG50ZnNfaW9tYXBfcHV0X2ZvbGlvX25vbl9yZXNpZGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTY1LS8qXFxuZnMvbnRmcy9pb21hcC5jOjY2OiAqIGlvbWFwX3plcm9fcmFuZ2UgaXMgY2FsbGVkIGZvciBhbiBhcmVhIGJleW9uZCB0aGUgaW5pdGlhbGl6ZWQgc2l6ZSxcXG5mcy9udGZzL2lvbWFwLmMtNjctICogZ2FyYmFnZSB2YWx1ZXMgY2FuIGJlIHJlYWQsIHNvIHplcm9pbmcgb3V0IGlzIG5lZWRlZC5cXG4tLVxcbmZzL250ZnMvaW9tYXAuYz0zMDE9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBudGZzX3JlYWRfaW9tYXBfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9pb21hcC5jLTMwNy0gKiBDaGVjayB0aGF0IHRoZSBjYWNoZWQgaW9tYXAgc3RpbGwgbWF0Y2hlcyB0aGUgTlRGUyBydW5saXN0IGJlZm9yZVxcbmZzL250ZnMvaW9tYXAuYzozMDg6ICogaW9tYXBfemVyb19yYW5nZSgpIGlzIGNhbGxlZC4gaWYgdGhlIHJ1bmxpc3QgY2hhbmdlcyB3aGlsZSBpb21hcCBpc1xcbmZzL250ZnMvaW9tYXAuYzozMDk6ICogaXRlcmF0aW5nIGEgY2FjaGVkIGlvbWFwLCBpb21hcF96ZXJvX3JhbmdlKCkgbWF5IG92ZXJ3cml0ZSBmb2xpb3NcXG5mcy9udGZzL2lvbWFwLmMtMzEwLSAqIHRoYXQgaGF2ZSBiZWVuIGFscmVhZHkgd3JpdHRlbiB3aXRoIHZhbGlkIGRhdGEuXFxuLS1cXG5mcy9udGZzL2lvbWFwLmM9Mzc2PXN0YXRpYyBpbnQgbnRmc196ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgpXFxuZnMvbnRmcy9pb21hcC5jLTM3Ny17XFxuZnMvbnRmcy9pb21hcC5jOjM3ODpcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSxcXG5mcy9udGZzL2lvbWFwLmMtMzc5LVxcdFxcdFxcdFxcdG9mZnNldCwgbGVuZ3RoLFxcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTIyMD1zdGF0aWMgaW50IG50ZnNfZXh0ZW5kX2luaXRpYWxpemVkX3NpemUoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMjM1LVxcbmZzL250ZnMzL2ZpbGUuYzoyMzY6XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgdmFsaWQsIG5ld192YWxpZCAtIHZhbGlkLCBOVUxMLFxcbmZzL250ZnMzL2ZpbGUuYy0yMzctXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZudGZzX2lvbWFwX29wcywgXFx1MDAyNm50ZnNfaW9tYXBfZm9saW9fb3BzLCBOVUxMKTtcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYz00NDY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3QgdmJvLCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTUzNS1cXHRcXHRpZiAodG1wIFxcdTAwM2UgZnJvbSkge1xcbmZzL250ZnMzL2ZpbGUuYzo1MzY6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgZnJvbSwgdG1wIC0gZnJvbSwgTlVMTCxcXG5mcy9udGZzMy9maWxlLmMtNTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bnRmc19pb21hcF9vcHMsXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNTUzLVxcdFxcdGlmICh2Ym8gXFx1MDAzYyBlbmRfYSBcXHUwMDI2XFx1MDAyNiBlbmRfYSBcXHUwMDNjIGVuZCkge1xcbmZzL250ZnMzL2ZpbGUuYzo1NTQ6XFx0XFx0XFx0ZXJyID0gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgZW5kX2EsIGVuZCAtIGVuZF9hLCBOVUxMLFxcbmZzL250ZnMzL2ZpbGUuYy01NTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZudGZzX2lvbWFwX29wcyxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9NjgwPWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtNzE5LSAqIHVzZWQgd2l0aDpcXG5mcy9udGZzMy9pbm9kZS5jOjcyMDogKiAtIGlvbWFwX3plcm9fcmFuZ2VcXG5mcy9udGZzMy9pbm9kZS5jLTcyMS0gKiAtIGlvbWFwX3RydW5jYXRlX3BhZ2VcXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9ODc3PXN0YXRpYyBpbnQgbnRmc19pb21hcF9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbmd0aCxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtOTMyLSAqIHdyaXRlX2JlZ2luICsgcHV0X2ZvbGlvICsgd3JpdGVfZW5kLlxcbmZzL250ZnMzL2lub2RlLmM6OTMzOiAqIGlvbWFwX3plcm9fcmFuZ2VcXG5mcy9udGZzMy9pbm9kZS5jLTkzNC0gKiBpb21hcF90cnVuY2F0ZV9wYWdlXFxuLS1cXG5mcy94ZnMveGZzX2lvbWFwLmM9MjM1Nz14ZnNfemVyb19yYW5nZShcXG4tLVxcbmZzL3hmcy94ZnNfaW9tYXAuYy0yMzcwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ4ZnNfZGF4X3dyaXRlX2lvbWFwX29wcyk7XFxuZnMveGZzL3hmc19pb21hcC5jOjIzNzE6XFx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHBvcywgbGVuLCBkaWRfemVybyxcXG5mcy94ZnMveGZzX2lvbWFwLmMtMjM3Mi1cXHRcXHRcXHRcXHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcywgXFx1MDAyNnhmc19pb21hcF93cml0ZV9vcHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9MzY2PXVuc2lnbmVkIGludCBpb21hcF9maWxsX2RpcnR5X2ZvbGlvcyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90ICpzdGFydCxcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzY3LVxcdFxcdGxvZmZfdCBlbmQsIHVuc2lnbmVkIGludCAqaW9tYXBfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvaW9tYXAuaDozNjg6aW50IGlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMzY5LVxcdFxcdGJvb2wgKmRpZF96ZXJvLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjQzLjk2Nzk3NjAxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA0ODIwNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT01BUCBGdW5jdGlvbnMgZm9yIE9wdGltaXplZCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBJL08gbWFwcGluZyBmdW5jdGlvbnMgYXJlIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgYmxvY2sgbGF5ZXJzLiBJdCBsb29rcyBsaWtlIGBpb21hcF96ZXJvX3JhbmdlYCBpcyBhIGZhaXJseSBjb21tb24gZnVuY3Rpb24sIHV0aWxpemVkIGJ5IGdmczIsIG50ZnMsIG50ZnMzLCBhbmQgeGZzLiBUaGVuLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXZlbiBtb3JlIHdpZGVzcHJlYWQsIHNlcnZpbmcgYmxvY2ssIGVyb2ZzLCBmdXNlLCBnZnMyLCBudGZzLCBudGZzMywgeGZzLCBhbmQgem9uZWZzLiBJbnRlcmVzdGluZy5cblxuTXkgcHJpbWFyeSBpbnRlcmVzdCByaWdodCBub3cgbGllcyB3aXRoIGBpb21hcF96ZXJvX2l0ZXJgIGFuZCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYmVjYXVzZSB0aGV5IGFwcGVhciB0byBiZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHRoZSBtb2RpZmllZCBsb2dpYyB0aGF0IEknbSBmb2N1c2luZyBvbi4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIHdpdGggdGhlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgZnVuY3Rpb25zLCBnaXZlbiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB0aGVpciBjb3JyZXNwb25kaW5nIGBpb21hcF8qYCBjb3VudGVycGFydHMuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhpcyB3aWxsIHByb3ZpZGUgaW5zaWdodCBvbiB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwODEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6NDguNTcyNzk5MDY5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQxOTY1ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTgzPXN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMDI6c3RhdGljIHZvaWQgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIwMy17XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTc3MT12b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg0LVxcdH0gZWxzZSB7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3ODU6XFx0XFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4Ni1cXHR9XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE4ODQ9aW50IGlvbWFwX3dyaXRlYmFja19mb2xpbyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTQzLVxcdCAqL1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTk0NDpcXHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgMCwgZm9saW9fc2l6ZShmb2xpbykpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTk0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6NTAuNjE0Nzc3NTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODU3OTc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEkvTyBNYXBwaW5nIENsZWFubGluZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSdyZSBsaWtlbHkgY2xlYXJpbmcgZGlydHkgZmxhZ3Mgd2hlbiB3ZSdyZSBpbnZhbGlkYXRpbmcgb3Igd3JpdGluZyBiYWNrIGRhdGEsIGFzIHdlIGV4cGVjdCB0aGUgZGF0YSB0byBiZSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgb24gZGlzay4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29pbi4gSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxzIHRvIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgLiBJIHdhbnQgdG8ga25vdyB3aGVyZSBhbmQgKndoeSogd2UncmUgc2V0dGluZyB0aGVzZSByYW5nZXMgYXMgZGlydHkgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgdGhhdCBzaG91bGQgb2ZmZXIgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCB3cml0ZWJhY2sgbWVjaGFuaXNtcy4gR290dGEgZW5zdXJlIHdlJ3JlIG1hcmtpbmcgdGhpbmdzIGNvcnJlY3RseSB0byBndWFyYW50ZWUgZGF0YSBpbnRlZ3JpdHksIHNvIGl0J3MgdGltZSB0byBjaGVjayB3aGF0J3MgaW5pdGlhdGluZyB0aGUgc2V0dGluZyBvZiB0aGUgZGlydHkgZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTM4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6Mjk6NTQuMzAwNTc3MTU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ3MDM5MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3NldF9yYW5nZV9kaXJ0eVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTIxNz1zdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjIzNjpzdGF0aWMgdm9pZCBpb21hcF9zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNy17XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTc5MD1ib29sIGlvbWFwX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTUtXFx0aWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3OTY6XFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzk3LVxcdHJldHVybiBmaWxlbWFwX2RpcnR5X2ZvbGlvKG1hcHBpbmcsIGZvbGlvKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTA1Nj1zdGF0aWMgYm9vbCBfX2lvbWFwX3dyaXRlX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDc0LVxcdGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZShmb2xpbywgb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpLCBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTA3NTpcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzYtXFx0ZmlsZW1hcF9kaXJ0eV9mb2xpbyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBmb2xpbyk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE4ODQ9aW50IGlvbWFwX3dyaXRlYmFja19mb2xpbyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTA4LVxcdFxcdFxcdGlmcyA9IGlmc19hbGxvYyhpbm9kZSwgZm9saW8sIDApO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTkwOTpcXHRcXHRcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGVuZF9wb3MgLSBwb3MpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTkxMC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjI5OjU2LjE0NzYyMjIxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTkyMzQwMzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9tYXAgUmFuZ2UgRGlydHlpbmcgYW5kIFVwdG9kYXRlbmVzcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAgZnVuY3Rpb24uIEl0IHNlZW1zIGl0J3MgdGhlIGNvcmUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIG1hcmtpbmcgcmFuZ2VzIG9mIGRhdGEgYXMgZGlydHkgd2l0aGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGlvbWFwX2RpcnR5X2ZvbGlvYCwgYF9faW9tYXBfd3JpdGVfZW5kYCwgYW5kIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLiBUaG9zZSBhbGwgbWFrZSBwZXJmZWN0IHNlbnNlIOKAkyB3cml0ZSBvcGVyYXRpb25zIGFuZCB3cml0ZWJhY2sgcHJvY2VkdXJlcyB3b3VsZCBuYXR1cmFsbHkgbmVlZCB0byBzaWduYWwgd2hlbiBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkLlxuXG5Ob3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGJpZyBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBzdG9yeSwgaXQgbWFrZXMgc2Vuc2UgdG8gcGl2b3QuIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGhlcmUgd291bGQgYmUgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgb2YgYGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZWAuIEknbGwgbmVlZCB0byBzZWUgd2hvJ3MgbWFuYWdpbmcgdGhlIG5vdGlvbiBvZiBkYXRhIGJlaW5nIHVwLXRvLWRhdGUsIHRvIGdldCBhIGNvbXBsZXRlIHZpZXcgb2YgaG93IHRoaW5ncyB3b3JrLiBVbmRlcnN0YW5kaW5nIHdobydzIHNldHRpbmcgZGF0YSBhcyBjbGVhbiBvciBkaXJ0eSwgYW5kIHdoZW4sIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB0aGUgaW9tYXAncyBkYXRhIGludGVncml0eSBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6MzA6MDguMDcxMDI4MDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUxMjU0Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTY2PXN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzktXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4MDpzdGF0aWMgdm9pZCBpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZixcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTgxLVxcdFxcdHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTM5ND1zdGF0aWMgaW50IGlvbWFwX3JlYWRfaW5saW5lX2RhdGEoY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTQxNS1cXHRmb2xpb19maWxsX3RhaWwoZm9saW8sIG9mZnNldCwgaW9tYXAtXFx1MDAzZWlubGluZV9kYXRhLCBzaXplKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjQxNjpcXHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIG9mZnNldCwgZm9saW9fc2l6ZShmb2xpbykgLSBvZmZzZXQpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNDE3LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz01MzM9c3RhdGljIGludCBpb21hcF9yZWFkX2ZvbGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTU3My1cXHRcXHRcXHRmb2xpb196ZXJvX3JhbmdlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjU3NDpcXHRcXHRcXHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIHBvZmYsIHBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNTc1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTgxNT1zdGF0aWMgaW50IF9faW9tYXBfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg4Mi1cXHRcXHR9XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4ODM6XFx0XFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBwb2ZmLCBwbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg4NC1cXHR9IHdoaWxlICgoYmxvY2tfc3RhcnQgKz0gcGxlbikgXFx1MDAzYyBibG9ja19lbmQpO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTA3NDpcXHRpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzUtXFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGNvcGllZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjMwOjEwLjEyMjI4OTI1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg0MzM5MDc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgRm9jdXMgZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBsZXQncyBnZXQgdGhpcyBzdHJhaWdodC4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggc3l6a2FsbGVyLiBJbml0aWFsbHksIEkgaWRlbnRpZmllZCBzZXZlcmFsIG1vZGlmaWVkIGZ1bmN0aW9uczogYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYGlmc19zZXRfcmFuZ2VfZGlydHlgLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AsIGFuZCBgaW9tYXBfemVyb19pdGVyYC4gSSB3YXMgYWxzbyB0aGlua2luZyBhYm91dCBhIGJyb2FkZXIgc2V0IG9mIFwiZm9jdXMgc3ltYm9sc1wiIGluY2x1ZGluZyB0aGluZ3MgbGlrZSBgaW9tYXBfemVyb19yYW5nZWAsIGBpb21hcF93cml0ZWJhY2tfZm9saW9gLCBhbmQgdGhlIHZhcmlvdXMgYGlvbWFwX3dyaXRlXypgIGZ1bmN0aW9ucy5cblxuVGhlbiBJIHBhdXNlZCBhbmQgY29uc2lkZXJlZCBzdGF0aWMgZnVuY3Rpb25zLiBJIGtub3cgc3l6a2FsbGVyICpjYW4qIGZ1enogc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLCBidXQgaXQncyBjbGVhbmVyIHRvIHByb3ZpZGUgdGhlIGV4YWN0IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgdGhlaXIgZGlyZWN0IGNhbGxlcnMgZm9yIGJldHRlciBmdXp6aW5nLiAgVGhpcyBsZWQgbWUgdG8gcmV2aXNpdCB0aGUgbGlzdC4gV2hpbGUgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljLCBpdCdzIG5vdCBpbmxpbmVkLCBzbyB0aGF0J3MgdmlhYmxlLiBBbHNvLCBJIHJlYWxpemVkIHRoYXQgSSBoYWQgYSB0eXBvIGFuZCBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIHNob3VsZCBiZSBpbmNsdWRlZC5cblxuU28sIHRoZSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6XG5cbiogICBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWBcbiogICBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YFxuKiAgIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWBcbiogICBgaWZzX3NldF9yYW5nZV9kaXJ0eWBcbiogICBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2BcbiogICBgaW9tYXBfemVyb19pdGVyYFxuKiAgIGBpb21hcF96ZXJvX3JhbmdlYFxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9ucy4gV2UgbmVlZCB0byBzZWxlY3QgZmlsZXN5c3RlbXMgdGhhdCBlbmFibGUgdGhlIElPTUFQIGZlYXR1cmUuIEkgaW5pdGlhbGx5IGxpc3RlZCBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgLCBgRjJGU19GU2AsIGBHRlMyX0ZTYCwgYW5kIGBOVEZTM19GU2AuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgdW5kZXJseWluZyBgRlNfSU9NQVBgIGNvbmZpZyBpcyBoaWRkZW4uIFRodXMsIHdlIHNob3VsZCBlbmFibGUgZmlsZXN5c3RlbXMgdGhhdCBzZWxlY3QgaXQuIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgIGFyZSBleGNlbGxlbnQgY2hvaWNlcy4gIFRoZXJlZm9yZSwgSSdsbCBnbyB3aXRoOlxuXG4qICAgYFhGU19GU2BcbiogICBgRVhUNF9GU2BcbiogICBgQlRSRlNfRlNgXG5cbkZpbmFsbHksIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgYEZTX0lPTUFQYCBkZXBlbmRlbmN5IGluIGBmcy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjMwOjIwLjk2NTY4NTE2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNDcyODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA4OjMwOjIyLjg4MDQyNzI3NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA1NDc1MTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJT01BUCBCdWZmZXJlZCBJTyBQYXRjaCoqXG5cbk9rYXksIGZpcnN0IGdsYW5jZSAtIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBoaWRkZW4gYm9vbGVhbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIExldCdzIHNlZSB3aGF0IGVsc2UgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBpbiB0aGUgY29uZmlndXJhdGlvbi4gUXVpY2sgY2hlY2suLi4gYWhhISBXZSd2ZSBnb3QgYEZTX0RBWGAgc2VsZWN0aW5nIGBGU19JT01BUGAsIGBaT05FRlNfRlNgIHNlbGVjdGluZyBgRlNfSU9NQVBgLCBhbmQgYEVST0ZTX0ZTYCBzZWxlY3RpbmcgYEZTX0lPTUFQYC4gR29vZCB0byBrbm93OyB0aGF0IGV4cGFuZHMgdGhlIHBvdGVudGlhbCBpbXBhY3QuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGZpbGVzeXN0ZW0gaW52b2x2ZW1lbnQsIEknbGwgZmxhZyBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgLCBhbmQgYEYyRlNfRlNgIGFzIGltcG9ydGFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGVuYWJsaW5nIHRoZXNlIHdpbGwgZW5hYmxlIHRoZSBjb3JlIGNoYW5nZXMuXG5cblRoZSBwYXRjaCdzIGZ1bmN0aW9uIGlzIGNlbnRlcmVkIG9uIHRoZSBidWZmZXJlZCBJL08gbG9naWMgd2l0aGluIElPTUFQLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGhvdyBkaXJ0eSBhbmQgdXAtdG8tZGF0ZSBiaXRzIGFyZSBoYW5kbGVkIG9uIGEgcGVyLWJsb2NrIGJhc2lzIHdpdGhpbiBhIGZvbGlvLiBJdCdzIGFsdGVyaW5nIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIEFkZGl0aW9uYWxseSwgaXQncyBjaGFuZ2luZyBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgdG8gY2xlYW4gdXAgdGhlIGRpcnR5IGJpdHMgaW4gdGhlIGludmFsaWRhdGVkIHJlZ2lvbiwgYW5kIGZpeGluZyBgaW9tYXBfemVyb19pdGVyYCBzbyBpdCByZXBvcnRzIGNvcnJlY3RseSB3aGV0aGVyIHplcm9pbmcgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgd2hpbGUgaGFuZGxpbmcgZXJyb3JzLiBUaGlzIGlzIGNydWNpYWw7IHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQncyB1c2VkIGJ5IHF1aXRlIGEgZmV3IG1ham9yIGZpbGVzeXN0ZW1zLCBpbmNsdWRpbmcgWEZTLCBleHQ0LCBhbmQgYnRyZnMsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS5cblxuQWxyaWdodCwgdGltZSB0byByZWZpbmUgdGhlIGZvY2FsIHBvaW50cy4gTXkgdGFyZ2V0IGZ1bmN0aW9ucyBhcmU6XG5cbi0gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgXG4tIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgXG4tIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWBcbi0gYGlmc19zZXRfcmFuZ2VfZGlydHlgXG4tIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYFxuLSBgaW9tYXBfemVyb19pdGVyYFxuLSBgaW9tYXBfemVyb19yYW5nZWBcblxuTm93LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM1OCwiT3V0cHV0VG9rZW5zIjoyMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDg6MzA6MzQuOTM1MjAxMzY5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2MjM2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZnNfc2V0X3JhbmdlX3VwdG9kYXRlXCIsXG4gICAgXCJpZnNfY2xlYXJfcmFuZ2VfZGlydHlcIixcbiAgICBcImlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpZnNfc2V0X3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX2l0ZXJcIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpby4gSXQgYWxzbyBjaGFuZ2VzIGlvbWFwX2ludmFsaWRhdGVfZm9saW8gdG8gY2xlYXIgZGlydHkgYml0cyBmb3IgdGhlIGludmFsaWRhdGVkIHJhbmdlLCBhbmQgZml4ZXMgaW9tYXBfemVyb19pdGVyIHRvIGNvcnJlY3RseSByZXBvcnQgaWYgemVyb2luZyBvY2N1cnJlZCBhbmQgaGFuZGxlIGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYW55IG1ham9yIGZpbGVzeXN0ZW1zIChYRlMsIGV4dDQsIGJ0cmZzLCBldGMuKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCIsXG4gICAgXCJGMkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWZzX3NldF9yYW5nZV91cHRvZGF0ZVwiLFxuICAgIFwiaWZzX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gICAgXCJpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eVwiLFxuICAgIFwiaWZzX3NldF9yYW5nZV9kaXJ0eVwiLFxuICAgIFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiaW9tYXBfemVyb19pdGVyXCIsXG4gICAgXCJpb21hcF96ZXJvX3JhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8uIEl0IGFsc28gY2hhbmdlcyBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvIHRvIGNsZWFyIGRpcnR5IGJpdHMgZm9yIHRoZSBpbnZhbGlkYXRlZCByYW5nZSwgYW5kIGZpeGVzIGlvbWFwX3plcm9faXRlciB0byBjb3JyZWN0bHkgcmVwb3J0IGlmIHplcm9pbmcgb2NjdXJyZWQgYW5kIGhhbmRsZSBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFueSBtYWpvciBmaWxlc3lzdGVtcyAoWEZTLCBleHQ0LCBidHJmcywgZXRjLikgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowdkkng[1] Phase: Succeeded StartedAt: 2026-07-13 08:32:08 +0000 UTC FinishedAt: 2026-07-13 08:32:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 08:32:08 +0000 UTC FinishedAt: 2026-07-13 08:32:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2] Phase: Succeeded StartedAt: 2026-07-13 08:32:08 +0000 UTC FinishedAt: 2026-07-13 13:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 08:32:09 +0000 UTC FinishedAt: 2026-07-13 13:05:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 08:32:09 +0000 UTC FinishedAt: 2026-07-13 08:32:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 08:32:09 +0000 UTC FinishedAt: 2026-07-13 08:32:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowdkkng/series-workflowdkkng-convert-artifact-4252856220/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 08:32:21 +0000 UTC FinishedAt: 2026-07-13 09:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 08:32:21 +0000 UTC FinishedAt: 2026-07-13 09:17:54 +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:*821b2bce-a1dd-4daa-885f-4ae74a96a506,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-workflowdkkng/series-workflowdkkng-convert-artifact-4252856220/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": "be3eabb3-1f50-482a-ac6c-ea55ffb6f01a", "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-workflowdkkng/series-workflowdkkng-build-action-2083001802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 08:32:21 +0000 UTC FinishedAt: 2026-07-13 09:17:18 +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:*821b2bce-a1dd-4daa-885f-4ae74a96a506,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-workflowdkkng/series-workflowdkkng-convert-artifact-4252856220/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": "be3eabb3-1f50-482a-ac6c-ea55ffb6f01a", "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-workflowdkkng/series-workflowdkkng-build-action-2083001802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 09:17:55 +0000 UTC FinishedAt: 2026-07-13 09:17:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 09:17:55 +0000 UTC FinishedAt: 2026-07-13 09:17:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 09:17:55 +0000 UTC FinishedAt: 2026-07-13 09:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 09:17:55 +0000 UTC FinishedAt: 2026-07-13 09:18:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowdkkng/series-workflowdkkng-convert-artifact-229491163/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 09:18:18 +0000 UTC FinishedAt: 2026-07-13 09:20:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 09:18:18 +0000 UTC FinishedAt: 2026-07-13 09:20:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*be3eabb3-1f50-482a-ac6c-ea55ffb6f01a,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-workflowdkkng/series-workflowdkkng-build-action-2083001802/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-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 09:20:46 +0000 UTC FinishedAt: 2026-07-13 09:20:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 09:20:46 +0000 UTC FinishedAt: 2026-07-13 09:20:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 09:20:46 +0000 UTC FinishedAt: 2026-07-13 10:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 09:20:47 +0000 UTC FinishedAt: 2026-07-13 10:00:36 +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:*821b2bce-a1dd-4daa-885f-4ae74a96a506,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-workflowdkkng/series-workflowdkkng-convert-artifact-229491163/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": "d053ef98-1769-4623-b6bc-b59eeb1dd5cd", "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-workflowdkkng/series-workflowdkkng-build-action-266430591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 09:20:47 +0000 UTC FinishedAt: 2026-07-13 10:00:11 +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:*821b2bce-a1dd-4daa-885f-4ae74a96a506,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-workflowdkkng/series-workflowdkkng-convert-artifact-229491163/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": "d053ef98-1769-4623-b6bc-b59eeb1dd5cd", "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-workflowdkkng/series-workflowdkkng-build-action-266430591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 10:00:36 +0000 UTC FinishedAt: 2026-07-13 10:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 10:00:36 +0000 UTC FinishedAt: 2026-07-13 10:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 10:00:36 +0000 UTC FinishedAt: 2026-07-13 10:02:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 10:00:36 +0000 UTC FinishedAt: 2026-07-13 10:02:43 +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:*d053ef98-1769-4623-b6bc-b59eeb1dd5cd,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-workflowdkkng/series-workflowdkkng-build-action-266430591/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-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 10:02:53 +0000 UTC FinishedAt: 2026-07-13 13:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 10:02:53 +0000 UTC FinishedAt: 2026-07-13 13:05:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"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:*be3eabb3-1f50-482a-ac6c-ea55ffb6f01a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d053ef98-1769-4623-b6bc-b59eeb1dd5cd,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-workflowdkkng/series-workflowdkkng-build-action-2083001802/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-workflowdkkng/series-workflowdkkng-build-action-266430591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 10:02:53 +0000 UTC FinishedAt: 2026-07-13 10:03:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 10:02:53 +0000 UTC FinishedAt: 2026-07-13 10:03:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"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-workflowdkkng/series-workflowdkkng-convert-artifact-3601575892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 10:02:53 +0000 UTC FinishedAt: 2026-07-13 10:02:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 10:02:53 +0000 UTC FinishedAt: 2026-07-13 10:02:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 10:02:53 +0000 UTC FinishedAt: 2026-07-13 10:02:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 10:03:32 +0000 UTC FinishedAt: 2026-07-13 13:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdkkng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ifs_set_range_uptodate","ifs_clear_range_dirty","iomap_clear_range_dirty","ifs_set_range_dirty","iomap_invalidate_folio","iomap_zero_iter","iomap_zero_range"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFS_FS","EXT4_FS","BTRFS_FS","F2FS_FS"],"series_id":"e5b1b488-556f-45dd-bcc2-4889b6be7cc7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 10:03:32 +0000 UTC FinishedAt: 2026-07-13 13:05:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*be3eabb3-1f50-482a-ac6c-ea55ffb6f01a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d053ef98-1769-4623-b6bc-b59eeb1dd5cd,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-workflowdkkng/series-workflowdkkng-build-action-2083001802/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-workflowdkkng/series-workflowdkkng-build-action-266430591/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-workflowdkkng/series-workflowdkkng-convert-artifact-3601575892/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,}