Name: series-workflowrqjrn Phase: Succeeded StartedAt: 2026-08-02 23:42:34 +0000 UTC FinishedAt: 2026-08-03 01:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[0] Phase: Succeeded StartedAt: 2026-08-02 23:42:34 +0000 UTC FinishedAt: 2026-08-02 23:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 23:42:34 +0000 UTC FinishedAt: 2026-08-02 23:45:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "fa7f9910-c99c-4a6d-89f5-428bf6ef46ec" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vhost_scsi_set_max_io_vqs", "vhost_scsi_open", "vhost_scsi_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIEl0IGFkZHMgYSBjdXN0b20gc2V0dGVyIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgYW5kIGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gb2YgdmlydHF1ZXVlcyBpbiBgdmhvc3Rfc2NzaV9vcGVuYCB0byB1c2UgYGt2emFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzIGZvciBsYXJnZSB2YWx1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUgKHZpYSBzeXNmcyBhbmQgL2Rldi92aG9zdC1zY3NpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM2MDIzNTAxOTQwNjllZTE1YTdiY2JlYTM0MzJlZjkzMzMyZmRiZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDIzOjQ0OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmZiMjYyY2Y5YTM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbkBAIC0yMTAsNyAmIzQzOzIxMCwzNyBAQCBzdGF0aWMgY29uc3QgaW50IHZob3N0X3Njc2lfYml0c1tdID0ge1xuICNkZWZpbmUgVkhPU1RfU0NTSV9NQVhfRVZFTlRcdDEyOFxuIFxuIHN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7XG4tbW9kdWxlX3BhcmFtX25hbWVkKG1heF9pb192cXMsIHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgdWludCwgMDY0NCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X2lvX3ZxcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG91aW50KHZhbCwgMCwgXHUwMDI2bWF4X2lvX3Zxcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChtYXhfaW9fdnFzIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9JT19WUSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ludmFsaWQgbWF4X2lvX3ZxcyBvZiAldS4gVXNpbmcgJXUuXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG1heF9pb192cXMsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcbiYjNDM7XHRcdG1heF9pb192cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcbiYjNDM7XHR9IGVsc2UgaWYgKCFtYXhfaW9fdnFzKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdG1heF9pb192cXMgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRSh2aG9zdF9zY3NpX21heF9pb192cXMsIG1heF9pb192cXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0ge1xuJiM0MztcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxuJiM0MztcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO21vZHVsZV9wYXJhbV9jYihtYXhfaW9fdnFzLCBcdTAwMjZ2aG9zdF9zY3NpX21heF9pb192cXNfb3AsXG4mIzQzO1x0XHRcdTAwMjZ2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2lvX3ZxcywgXCYjMzQ7U2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXCYjMzQ7KTtcbiBcbiBzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUge1xuQEAgLTIyNzMsMjEgJiM0MzsyMzAzLDE0IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xuLVx0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzO1xuJiM0MztcdGludCByID0gLUVOT01FTSwgaSwgbnZxcztcbiBcbiBcdHZzID0ga3Z6YWxsb2Nfb2JqKCp2cyk7XG4gXHRpZiAoIXZzKVxuIFx0XHRnb3RvIGVycl92cztcbiBcdHZzLVx1MDAzZWlubGluZV9zZ19jbnQgPSB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQ7XG4gXG4tXHRpZiAobnZxcyBcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O0ludmFsaWQgbWF4X2lvX3ZxcyBvZiAlZC4gVXNpbmcgJWQuXFxuXCYjMzQ7LCBudnFzLFxuLVx0XHQgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpO1xuLVx0XHRudnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7XG4tXHR9IGVsc2UgaWYgKG52cXMgPT0gMCkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxcblwmIzM0OywgbnZxcyk7XG4tXHRcdG52cXMgPSAxO1xuLVx0fVxuJiM0MztcdG52cXMgPSBSRUFEX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzKTtcbiBcdG52cXMgJiM0Mzs9IFZIT1NUX1NDU0lfVlFfSU87XG4gXG4gXHR2cy1cdTAwM2VvbGRfaW5mbGlnaHQgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZW9sZF9pbmZsaWdodCwgbnZxcyxcbkBAIC0yMjk1LDcgJiM0MzsyMzE4LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHRpZiAoIXZzLVx1MDAzZW9sZF9pbmZsaWdodClcbiBcdFx0Z290byBlcnJfaW5mbGlnaHQ7XG4gXG4tXHR2cy1cdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuJiM0MztcdHZzLVx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcyk7XG4gXHRpZiAoIXZzLVx1MDAzZXZxcylcbiBcdFx0Z290byBlcnJfdnFzO1xuIFxuQEAgLTIzMzEsNyAmIzQzOzIzNTQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiAwO1xuIFxuIGVycl9sb2NhbF92cXM6XG4tXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuJiM0MztcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIGVycl92cXM6XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIGVycl9pbmZsaWdodDpcbkBAIC0yMzUyLDcgJiM0MzsyMzc1LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2KTtcbiBcdGtmcmVlKHZzLVx1MDAzZWRldi52cXMpO1xuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbiYjNDM7XHRrdmZyZWUodnMtXHUwMDNldnFzKTtcbiBcdGtmcmVlKHZzLVx1MDAzZW9sZF9pbmZsaWdodCk7XG4gXHRrdmZyZWUodnMpO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIEl0IGFkZHMgYSBjdXN0b20gc2V0dGVyIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgYW5kIGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gb2YgdmlydHF1ZXVlcyBpbiBgdmhvc3Rfc2NzaV9vcGVuYCB0byB1c2UgYGt2emFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzIGZvciBsYXJnZSB2YWx1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUgKHZpYSBzeXNmcyBhbmQgL2Rldi92aG9zdC1zY3NpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM2MDIzNTAxOTQwNjllZTE1YTdiY2JlYTM0MzJlZjkzMzMyZmRiZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDIzOjQ0OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCA5YTEyNTNiOWQ4YzUwLi5mYjI2MmNmOWEzNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtMjEwLDcgJiM0MzsyMTAsMzcgQEAgc3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHsKICNkZWZpbmUgVkhPU1RfU0NTSV9NQVhfRVZFTlQJMTI4CiAKIHN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG1heF9pb192cXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b3VpbnQodmFsLCAwLCAmYW1wO21heF9pb192cXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKG1heF9pb192cXMgJmd0OyBWSE9TVF9TQ1NJX01BWF9JT19WUSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICV1LiBVc2luZyAldS5cbiYjMzQ7LAomIzQzOwkJICAgICAgIG1heF9pb192cXMsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTsKJiM0MzsJCW1heF9pb192cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTsKJiM0MzsJfSBlbHNlIGlmICghbWF4X2lvX3ZxcykgewomIzQzOwkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXG4mIzM0Oyk7CiYjNDM7CQltYXhfaW9fdnFzID0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgbWF4X2lvX3Zxcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0gewomIzQzOwkuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcywKJiM0MzsJLmdldCA9IHBhcmFtX2dldF91aW50LAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsICZhbXA7dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLAomIzQzOwkJJmFtcDt2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCAmIzM0O1NldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LiYjMzQ7KTsKIAogc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHsKQEAgLTIyNzMsMjEgJiM0MzsyMzAzLDE0IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxOwogCXN0cnVjdCB2aG9zdF9zY3NpICp2czsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzOwotCWludCByID0gLUVOT01FTSwgaSwgbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxczsKJiM0MzsJaW50IHIgPSAtRU5PTUVNLCBpLCBudnFzOwogCiAJdnMgPSBrdnphbGxvY19vYmooKnZzKTsKIAlpZiAoIXZzKQogCQlnb3RvIGVycl92czsKIAl2cy0mZ3Q7aW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDsKIAotCWlmIChudnFzICZndDsgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cbiYjMzQ7LCBudnFzLAotCQkgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpOwotCQludnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7Ci0JfSBlbHNlIGlmIChudnFzID09IDApIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxuJiMzNDssIG52cXMpOwotCQludnFzID0gMTsKLQl9CiYjNDM7CW52cXMgPSBSRUFEX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzKTsKIAludnFzICYjNDM7PSBWSE9TVF9TQ1NJX1ZRX0lPOwogCiAJdnMtJmd0O29sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtJmd0O29sZF9pbmZsaWdodCwgbnZxcywKQEAgLTIyOTUsNyAmIzQzOzIzMTgsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAlpZiAoIXZzLSZndDtvbGRfaW5mbGlnaHQpCiAJCWdvdG8gZXJyX2luZmxpZ2h0OwogCi0JdnMtJmd0O3ZxcyA9IGttYWxsb2Nfb2JqcygqdnMtJmd0O3ZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwomIzQzOwl2cy0mZ3Q7dnFzID0ga3Z6YWxsb2Nfb2JqcygqdnMtJmd0O3ZxcywgbnZxcyk7CiAJaWYgKCF2cy0mZ3Q7dnFzKQogCQlnb3RvIGVycl92cXM7CiAKQEAgLTIzMzEsNyAmIzQzOzIzNTQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAlyZXR1cm4gMDsKIAogZXJyX2xvY2FsX3ZxczoKLQlrZnJlZSh2cy0mZ3Q7dnFzKTsKJiM0MzsJa3ZmcmVlKHZzLSZndDt2cXMpOwogZXJyX3ZxczoKIAlrZnJlZSh2cy0mZ3Q7b2xkX2luZmxpZ2h0KTsKIGVycl9pbmZsaWdodDoKQEAgLTIzNTIsNyAmIzQzOzIzNzUsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAl2aG9zdF9kZXZfc3RvcCgmYW1wO3ZzLSZndDtkZXYpOwogCXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7dnMtJmd0O2Rldik7CiAJa2ZyZWUodnMtJmd0O2Rldi52cXMpOwotCWtmcmVlKHZzLSZndDt2cXMpOwomIzQzOwlrdmZyZWUodnMtJmd0O3Zxcyk7CiAJa2ZyZWUodnMtJmd0O29sZF9pbmZsaWdodCk7CiAJa3ZmcmVlKHZzKTsKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBtYW5hZ2VkLiBUaGV5JiMzOTt2ZSBzd2FwcGVkIG91dCBgbW9kdWxlX3BhcmFtX25hbWVkYCBmb3IgYG1vZHVsZV9wYXJhbV9jYmAgYW5kIGludHJvZHVjZWQgYSBjdXN0b20gc2V0dGVyLCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIFNtYXJ0IG1vdmUsIHVzaW5nIGEgY2FsbGJhY2sgZ2l2ZXMgbW9yZSBjb250cm9sLiBUaGV5JiMzOTt2ZSBhbHNvIHVwZGF0ZWQgYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBSRUFEX09OQ0VgIG9uIGB2aG9zdF9zY3NpX21heF9pb192cXNgIOKAkyBnb29kIGZvciBtZW1vcnkgb3JkZXJpbmcsIGFuZCBtb3ZpbmcgdGhlIGJvdW5kcyBjaGVja2luZyB0byB0aGUgc2V0dGVyIGlzIHByb2JhYmx5IGNsZWFuZXIuIFRoZSBhbGxvY2F0aW9uIGNoYW5nZSwgbW92aW5nIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2emFsbG9jX29ianNgIGZvciBgdnMtJmd0O3Zxc2AgYW5kIHVzaW5nIGBrdmZyZWVgIG5vdywgdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGltcHJvdmVtZW50OyBwcmV2ZW50aW5nIGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBsYXJnZSBhcnJheXMgaXMgYWx3YXlzIGEgd2luLCBhbmQgdGhlIHplcm9lZCBtZW1vcnkgZnJvbSBga3Z6YWxsb2NgIG1pZ2h0IGJlIGhlbHBmdWwuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgZnV6emFibGU/IGB2aG9zdF9zY3NpX29wZW5gIGlzIHRoZSBvcGVuIGNhbGxiYWNrIGZvciB0aGUgdmhvc3Qtc2NzaSBjaGFyYWN0ZXIgZGV2aWNlLCBzbyB0aGF0IG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBgL2Rldi92aG9zdC1zY3NpYC4gVGhlIGBtYXhfaW9fdnFzYCBwYXJhbWV0ZXIgaXMgYWRqdXN0YWJsZSB0aHJvdWdoIHN5c2ZzLCBvciBhdCBib290LXRpbWUgd2hpY2ggaXMgYWxzbyBoZWxwZnVsIGZvciB0ZXN0aW5nLCBhc3N1bWluZyB0aGUga2VybmVsIGlzIGNvbXBpbGVkIGZvciBpdC4gVGhlIGFsbG9jYXRpb24gY2hhbmdlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBhIGNvbW1vbmx5IHVzZWQgcGF0aC4KCkxldCBtZSBmaW5kIHRoZSBjb25maWcgb3B0aW9ucyBmb3Igdmhvc3Qtc2NzaSBub3cuIEkmIzM5O2xsIHVzZSBgZ2l0IGdyZXBgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Qvc2NzaS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3QgRHJpdmVyIE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSB2aG9zdCBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBnZW5lcmFsbHkgYnJvdWdodCB0b2dldGhlci4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBydWxlcyBmb3IgYnVpbGRpbmcgdGhlIHZob3N0IGtlcm5lbCBtb2R1bGUsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcywgcG90ZW50aWFsbHkgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYW5kIHByb2JhYmx5IHNvbWUgY2x1ZXMgYWJvdXQgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJIGFudGljaXBhdGUgc2VlaW5nIHZhcmlhYmxlcyBkZWZpbmluZyBzb3VyY2UgZmlsZXMsIGluY2x1ZGUgcGF0aHMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBjb21tYW5kcy4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBidWlsZCBpc3N1ZXMsIG1vZGlmeWluZyB0aGUgZHJpdmVyLCBvciBldmVuIG9wdGltaXppbmcgaXRzIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBNYWtlZmlsZSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICYjNDM7PSB2aG9zdF9uZXQub1xuICAgMzpcdHZob3N0X25ldC15IDo9IG5ldC5vXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1NDU0kpICYjNDM7PSB2aG9zdF9zY3NpLm9cbiAgIDY6XHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSAmIzQzOz0gdmhvc3RfdnNvY2sub1xuICAgOTpcdHZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xuICAxMDpcdFxuICAxMTpcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSAmIzQzOz0gdnJpbmdoLm9cbiAgMTI6XHRcbiAgMTM6XHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgJiM0Mzs9IHZob3N0X3ZkcGEub1xuICAxNDpcdHZob3N0X3ZkcGEteSA6PSB2ZHBhLm9cbiAgMTU6XHRcbiAgMTY6XHRvYmotJChDT05GSUdfVkhPU1QpXHQmIzQzOz0gdmhvc3Qub1xuICAxNzpcdFxuICAxODpcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgJiM0Mzs9IHZob3N0X2lvdGxiLm9cbiAgMTk6XHR2aG9zdF9pb3RsYi15IDo9IGlvdGxiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50IGFuZCBzcGVjaWZpY2FsbHkgd29ya2luZyB3aXRoIHZob3N0LXNjc2k6CgoqKkRlYnVnZ2luZyBhIFZIT1NUX1NDU0kgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBgQ09ORklHX1ZIT1NUX1NDU0lgLiBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0IHdpdGggaXRzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZC4KCk15IG5leHQgc3RlcCBpcyBsb2dpY2FsIGFuZCBpbmdyYWluZWQ6IEkgaW1tZWRpYXRlbHkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSByZWxhdGVkIHRvIHRoaXMgbW9kdWxlLiBJIG5lZWQgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgYFZIT1NUX1NDU0lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgZGlyZWN0bHkgdG8gYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG9zc2libGUgYnVpbGQgY29uZGl0aW9ucy4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSB3aWxsIGxpa2VseSBnYWluIGluc2lnaHQgaW50byB3aHkgdGhpcyBvcHRpb24gaXNuJiMzOTt0IGF2YWlsYWJsZSBvciBiZWhhdmluZyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfU0NTSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7VkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVmhvc3QgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB2aG9zdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmUgNDYuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gaG9sZHMgc29tZSBjcnVjaWFsIHNldHRpbmdzLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBjb3JlIHZob3N0IGZ1bmN0aW9uYWxpdHkgb3IgbWF5YmUgc29tZSBzcGVjaWZpYyBmZWF0dXJlIHRoYXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBUaW1lIHRvIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0IHRoaXMgc2VjdGlvbiByZXZlYWxzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIG5ldyBmZWF0dXJlIG9yIGFuIGltcG9ydGFudCBjbGFyaWZpY2F0aW9uIG9mIHNldHRpbmdzIHRoYXQgZGVmaW5lIGhvdyBvdXIgdmhvc3QgaW1wbGVtZW50YXRpb24gYmVoYXZlcy4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcbiAgNDE6XHRcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxuICA0MjpcdFxuICA0MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgNDQ6XHRcdCAgYmUgY2FsbGVkIHZob3N0X25ldC5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgVkhPU1RfU0NTSVxuICA0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7VkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRSBcdTAwMjZcdTAwMjYgRVZFTlRGRFxuICA0OTpcdFx0c2VsZWN0IFZIT1NUXG4gIDUwOlx0XHRzZWxlY3QgU0dfUE9PTFxuICA1MTpcdFx0ZGVmYXVsdCBuXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHRTYXkgTSBoZXJlIHRvIGVuYWJsZSB0aGUgdmhvc3Rfc2NzaSBUQ00gZmFicmljIG1vZHVsZVxuICA1NDpcdFx0Zm9yIHVzZSB3aXRoIHZpcnRpby1zY3NpIGd1ZXN0c1xuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBWSE9TVF9WU09DS1xuICA1NzpcdFx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcdTAwMjZcdTAwMjYgRVZFTlRGRFxuICA1OTpcdFx0c2VsZWN0IFZIT1NUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1czogVkhPU1RfU0NTSSBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX1NDU0lgIG1vZHVsZS4gVGhlIGFyY2hpdGVjdHVyZSBoZXJlIGlzIHRoYXQgaXQgbGVhbnMgb24gYFRBUkdFVF9DT1JFYCDigJMgdGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyB0YXJnZXQgY29yZSDigJMgYW5kIGFsc28gYEVWRU5URkRgLiBSaWdodCwgc3RhbmRhcmQgZGVwZW5kZW5jaWVzLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hlcmUgZG8gd2Ugc3RhcnQgZnV6emluZz8KClRoZSBwYXRjaCBoaXN0b3J5IGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AsIGB2aG9zdF9zY3NpX29wZW5gLCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuICBgdmhvc3Rfc2NzaV9vcGVuYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgdG8gbWUgYXMgdGhlICpvcGVuKiBjYWxsYmFjay4gIFRoZW4gYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gQWxyaWdodCwgc28gd2UgaGF2ZSBzb21lIGhvb2tzIGZvciBlbnRyeSBhbmQgY29udHJvbC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgaW50byBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCBzbyBhIGZ1enppbmcgY2FtcGFpZ24gc2hvdWxkIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjQ4PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCB1NjQgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMwMC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMDE6c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzAyLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDY0LVx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2NTpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Njc2lfb3BlbixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjYtXHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgdmhvc3Qtc2NzaSBNb2R1bGUgUGFyYW1ldGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgLCB0aGVzZSBhcmUgY2xlYXJseSBmaWxlIG9wZXJhdGlvbnMsIHJpZ2h0PyBBbmQgSSBzZWUgdGhhdCBgbWF4X2lvX3Zxc2AgaXMgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIHR3ZWFrZWQgdmlhIHN5c2ZzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIGl0IGlzISBUaGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBBcHBhcmVudGx5LCBzb21lb25lIGNvdWxkIHNldCBgbWF4X2lvX3Zxc2AgdG8gYW4gdW5yZWFzb25hYmx5IGhpZ2ggdmFsdWUsIGFuZCBgdmhvc3Rfc2NzaV9vcGVuYCB3b3VsZCBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgbWFzc2l2ZSBhcnJheSB1c2luZyBga21hbGxvY19vYmpzYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgaXNzdWVzLiBUaGUgZml4IG1vdmVzIHRvIGBrdnphbGxvY19vYmpzYCBhbmQgaW5jbHVkZXMgYm91bmRzIGNoZWNraW5nIGluIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRlci4KCldhaXQgYSBzZWNvbmQsIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBpcyB0aGUgYWN0dWFsIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGVyIGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IFRoYXQgbWVhbnMgc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgdG9vIGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3Zob3N0X3Njc2kvcGFyYW1ldGVycy9tYXhfaW9fdnFzYC4gUGVyZmVjdCEgVGhpcyBtYWtlcyBgdmhvc3Rfc2NzaV9vcGVuYCBldmVuIG1vcmUgcmVhY2hhYmxlIGFuZCBkZWZpbml0ZWx5IGZ1enphYmxlLgoKU28gdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBpbXBvcnRhbnRseSwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLgoKQXMgZm9yIGNvbmZpZ3MsIGl0IGxvb2tzIGxpa2UgYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgIGFyZSB0aGUga2V5IG9uZXMgaGVyZS4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGV4YWN0IG5hbWVzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUQVJHRVRfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnLTItXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnOjM6bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxuZHJpdmVycy90YXJnZXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBUYXJnZXQgQ29yZSBNb2QgKFRDTSkgYW5kIENvbmZpZ0ZTIEluZnJhc3RydWN0dXJlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLZXJuZWwgRW50cnlwb2ludHMqKgoKT2theSwgc28gdGhlIHRhcmdldCBpcyBgVEFSR0VUX0NPUkVgLiBHb3QgaXQuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBzdGF0aWMuIFllcCwgaXQgaXMuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuLi4gaXQmIzM5O3MgYSBjYWxsYmFjayBmb3IgYG1vZHVsZV9wYXJhbV9jYmAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IFN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhhdCBieSB3cml0aW5nIHRvIHRoZSBzeXNmcyBmaWxlLgoKTm93LCBJIHJlY2FsbCB0aGUgZ3VpZGFuY2UgdGhhdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgb25lcywgYmVjYXVzZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIHN0YXRpYywgKmhvd2V2ZXIqIGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wYC4gU28sIGl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2QuCgpBbHNvLCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIGFsc28gc3RhdGljLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBpbiBgdmhvc3Rfc2NzaV9mb3BzYC4gSSB0aGluayBJIHdpbGwgbGlzdCBhbGwgdGhlc2U6CgpUaGUgb25lcyBJIHdhbnQgdG8gZm9jdXMgb24gYXJlOiBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuCgpJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTQyOD1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NDUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NDY6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDQ3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODctXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODg6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXMoc3RydWN0IHZob3N0X3Njc2lfdG1mICp0bWYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODkte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTUwMD1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2Ryb3BfY21kcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDYtXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgdCwgbGxub2RlLCB0dmNfY29tcGxldGlvbl9saXN0KVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTA3Olx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDgtfVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA5LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTEwOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWQoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTExLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz03MTY9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9jbWRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NjQtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NjU6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHNlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NjYtXHR9XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTMxND12aG9zdF9zY3NpX2hhbmRsZV92cShzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0OTUtXHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2MgcmVjdiBpb3ZzXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE0OTY6XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXHUwMDI2Y21kLVx1MDAzZXR2Y19zZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ5Ny1cdFx0XHRnb3RvIGVycjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTAyLVx0XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTAzOlx0XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXHUwMDI2Y21kLVx1MDAzZXR2Y19zZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwNC1cdFx0XHRcdGdvdG8gZXJyO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MTgtXHRcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byBtYXAgaW92IHRvIHNnbFxcblwmIzM0Oyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTE5Olx0XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXHUwMDI2Y21kLVx1MDAzZXR2Y19zZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUyMC1cdFx0XHRcdGdvdG8gZXJyO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1Nzg9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV90bWZfcmVzcF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTk2Olx0dmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXModG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTctfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1OTk9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV90bWZfZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYwOS1cdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dG1mLVx1MDAzZXZ3b3JrKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2MTA6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjExLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNjE0PXZob3N0X3Njc2lfaGFuZGxlX3RtZihzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTItXHRcdFx0cHJfZXJyKFwmIzM0O3Zob3N0X3Njc2kgdG1mIGxvZyBhbGxvY2F0aW9uIGVycm9yXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2NTM6XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXModG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTQtXHRcdFx0Z290byBzZW5kX3JlamVjdDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjYxLVx0XHRcdCAgICAgIFRBUkdFVF9TQ0ZfQUNLX0tSRUYpIFx1MDAzYyAwKSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjYyOlx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY2My1cdFx0Z290byBzZW5kX3JlamVjdDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMzAxPXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzNjUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzY2OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM2Ny17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYxLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDYyOlx0LnJlbGVhc2UgICAgICAgID0gdmhvc3Rfc2NzaV9yZWxlYXNlLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2My1cdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Njc2lfaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9Mjk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IHRhcmdldF9jb3JlX2ZhYnJpY19vcHMgdmhvc3Rfc2NzaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk1My1cdC50cGdfY2hlY2tfcHJvdF9mYWJyaWNfb25seVx0PSB2aG9zdF9zY3NpX2NoZWNrX3Byb3RfZmFicmljX29ubHksXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTU0Olx0LnJlbGVhc2VfY21kXHRcdFx0PSB2aG9zdF9zY3NpX3JlbGVhc2VfY21kLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk1NS1cdC5jaGVja19zdG9wX2ZyZWVcdFx0PSB2aG9zdF9zY3NpX2NoZWNrX3N0b3BfZnJlZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0X3Njc2lfcmVsZWFzZSBGdW5jdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHZob3N0X3Njc2lfcmVsZWFzZWAgaXMgaW5kZWVkIGEgZmlsZSBvcGVyYXRpb24sIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBmcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIHNldHRpbmdzIHRoYXQgYXJlIHJlcXVpcmVkIG9yIHRoYXQgbWlnaHQgYmUgbWlzc2luZyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSBkb2luZy4gTG9va2luZyBpbnRvIHRoaXMsIEkgc2VlIHRoYXQgYFZIT1NUX1NDU0lgIGRlcGVuZHMgb24gYm90aCBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIGBFVkVOVEZEYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IGEgY29uY2Vybi4gTm93LCBgVEFSR0VUX0NPUkVgIG1hcHMgZGlyZWN0bHkgdG8gYENPTkZJR19UQVJHRVRfQ09SRWAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgZW5hYmxlZC4gQnV0IEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZXF1aXJlbWVudHMuCgpPaCwgcmlnaHQsIEkgc2VlIHRoYXQgYFZIT1NUYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gYFZIT1NUX1NDU0lgIGlzIGNob3Nlbi4gVGhhdOKAmXMgaGVscGZ1bDsgbGVzcyB0byBtYW5hZ2UuIEFsc28sIGBTR19QT09MYCBpcyBzZWxlY3RlZCBieSBgVkhPU1RfU0NTSWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCByZW1lbWJlciB0aGF0IGZvciBsYXRlci4KCkkgc3VwcG9zZSBJIHNob3VsZCBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDQ5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNTA6XHRcdHNlbGVjdCBTR19QT09MXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXG4gIDU0Olx0XHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXG4gIDU1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVkhPU1RfU0NTSSBhbmQgVEFSR0VUX0NPUkUqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4gIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGB2aG9zdF9zY3NpYCBtb2R1bGUmIzM5O3MgZnVuY3Rpb25hbGl0eS4gIEZpcnN0LCBJJiMzOTtsbCBzZWUgaWYgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBBaCwgaXQmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrLiBUaGF0JiMzOTtzIGdvb2Q7IFN5emthbGxlciBjYW4gZnV6eiB0aGF0IGRpcmVjdGx5IGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3Zob3N0X3Njc2kvcGFyYW1ldGVycy9tYXhfaW9fdnFzYC4gIExldCBtZSBxdWlja2x5IHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgYmVzaWRlcyB0aGUgcGFyYW1ldGVyIHNldHRpbmcuIFllcywgSSBzZWUgdGhhdCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIHRoZSBvdGhlciBwcmltYXJ5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSSYjMzk7bGwgZGVmaW5pdGVseSBhZGQgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIHRvIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzcGVsbGluZyBhbmQgY2FzZSBvZiB0aGVzZSBmdW5jdGlvbnMuICBTbywgd2UmIzM5O3ZlIGdvdCBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuICBQZXJmZWN0LgoKRmluYWxseSwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfc2V0X21heF9pb192cXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMTI9c3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxMy1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxNDpzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE1LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODpcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM5LVx0LmdldCA9IHBhcmFtX2dldF91aW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgdmhvc3Qtc2NzaSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYG1heF9pb192cXNgIHBhcmFtZXRlci4gSSBzZWUgdGhhdCB0aGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBhIGxhcmdlIHZhbHVlIHdhcyBzZXQgZm9yIGBtYXhfaW9fdnFzYCwgdGhlIGB2aG9zdF9zY3NpX29wZW5gIGZ1bmN0aW9uIHdvdWxkIGF0dGVtcHQgdG8gYWxsb2NhdGUgYSBtYXNzaXZlIGFycmF5IHVzaW5nIGBrbWFsbG9jX29ianNgLiBDbGVhcmx5LCB0aGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIG90aGVyIHVucHJlZGljdGFibGUgYmVoYXZpb3IsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIHRoYXQuCgpUaGUgc29sdXRpb24gaXMgY2xldmVyIGFuZCBzb3VuZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjdXN0b20gc2V0dGVyLCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AsIHdoaWNoIHdpbGwgbm93IHZhbGlkYXRlIHRoZSBpbnB1dCBmb3IgYG1heF9pb192cXNgLiBUaGF0JiMzOTtzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiAgRnVydGhlcm1vcmUsIHRoZSBhbGxvY2F0aW9uIHdpdGhpbiBgdmhvc3Rfc2NzaV9vcGVuYCBpcyBiZWluZyBjaGFuZ2VkIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2emFsbG9jX29ianNgLiBUaGlzIHN3aXRjaCBpcyBzaWduaWZpY2FudC4gYGt2emFsbG9jX29ianNgIGlzIGEga2VybmVsIEFQSSBjYWxsIHRoYXQgc2hvdWxkIHByZXZlbnQgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgd2UgbWlnaHQgaGF2ZSBzZWVuIHdpdGggdGhlIHByZXZpb3VzIGNhbGwsIHBhcnRpY3VsYXJseSBmb3IgdGhlc2UgbGFyZ2VyIHZhbHVlcy4gVGhlc2UgYXJlIGRpcmVjdGx5IG9ic2VydmFibGUgY2hhbmdlcyB0byBjb2RlIHRoYXTigJlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGAvZGV2L3Zob3N0LXNjc2lgLgoKSSYjMzk7bSBub3RpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCwgYHZob3N0X3Njc2lfb3BlbmAsIGFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBhcyB3ZWxsLCBqdXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGFsaWducyB3aXRoIHRoZSBhbGxvY2F0aW9uIGNoYW5nZXMuIEl0JiMzOTtzIGEgdXNlZnVsIGV4ZXJjaXNlIHRvIHNlZSB0aGUgZW50aXJlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0IGludm9sdmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KClRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCBmb3IgdGhlIGlzc3VlIGFuZCB3aWxsIGxpa2VseSBuZWVkIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBlbmFibGVkIGZvciB0ZXN0aW5nLiBMZXQmIzM5O3MgY2FsbCB0aGlzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9TQ1NJJiMzNDssCiAgICAmIzM0O1RBUkdFVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBJdCBhZGRzIGEgY3VzdG9tIHNldHRlciBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGFuZCBjaGFuZ2VzIHRoZSBhbGxvY2F0aW9uIG9mIHZpcnRxdWV1ZXMgaW4gYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBrdnphbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyBmb3IgbGFyZ2UgdmFsdWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlICh2aWEgc3lzZnMgYW5kIC9kZXYvdmhvc3Qtc2NzaSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIEl0IGFkZHMgYSBjdXN0b20gc2V0dGVyIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgYW5kIGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gb2YgdmlydHF1ZXVlcyBpbiBgdmhvc3Rfc2NzaV9vcGVuYCB0byB1c2UgYGt2emFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzIGZvciBsYXJnZSB2YWx1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUgKHZpYSBzeXNmcyBhbmQgL2Rldi92aG9zdC1zY3NpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjMzLjA4ODgzOTk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTM0ODQ0NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiLFxuICAgIFwidmhvc3Rfc2NzaV9vcGVuXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGluIHRoZSB2aG9zdC1zY3NpIGRyaXZlci4gSXQgYWRkcyBhIGN1c3RvbSBzZXR0ZXIgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIHRvIHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgY2hhbmdlcyB0aGUgYWxsb2NhdGlvbiBvZiB2aXJ0cXVldWVzIGluIGB2aG9zdF9zY3NpX29wZW5gIHRvIHVzZSBga3Z6YWxsb2Nfb2Jqc2AgaW5zdGVhZCBvZiBga21hbGxvY19vYmpzYCB0byBwcmV2ZW50IGFsbG9jYXRpb24gZmFpbHVyZXMgZm9yIGxhcmdlIHZhbHVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZSAodmlhIHN5c2ZzIGFuZCAvZGV2L3Zob3N0LXNjc2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDozMy4wODg4NDY0MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzk0MjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM2MDIzNTAxOTQwNjllZTE1YTdiY2JlYTM0MzJlZjkzMzMyZmRiZDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAyMzo0NDozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuaW5kZXggOWExMjUzYjlkOGM1MC4uZmIyNjJjZjlhMzRkOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuQEAgLTIxMCw3ICsyMTAsMzcgQEAgc3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHtcXG4gI2RlZmluZSBWSE9TVF9TQ1NJX01BWF9FVkVOVFxcdDEyOFxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcXG4tbW9kdWxlX3BhcmFtX25hbWVkKG1heF9pb192cXMsIHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgdWludCwgMDY0NCk7XFxuK1xcbitzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfaW9fdnFzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdWludCh2YWwsIDAsIFxcdTAwMjZtYXhfaW9fdnFzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChtYXhfaW9fdnFzIFxcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJXUuIFVzaW5nICV1LlxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG1heF9pb192cXMsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcXG4rXFx0XFx0bWF4X2lvX3ZxcyA9IFZIT1NUX1NDU0lfTUFYX0lPX1ZRO1xcbitcXHR9IGVsc2UgaWYgKCFtYXhfaW9fdnFzKSB7XFxuK1xcdFxcdHByX2VycihcXFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXFxcXG5cXFwiKTtcXG4rXFx0XFx0bWF4X2lvX3ZxcyA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdFdSSVRFX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCBtYXhfaW9fdnFzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB2aG9zdF9zY3NpX21heF9pb192cXNfb3AgPSB7XFxuK1xcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxcbitcXHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXFxuK307XFxuK1xcbittb2R1bGVfcGFyYW1fY2IobWF4X2lvX3ZxcywgXFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCxcXG4rXFx0XFx0XFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3ZxcywgMDY0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2lvX3ZxcywgXFxcIlNldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LlxcXCIpO1xcbiBcXG4gc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHtcXG5AQCAtMjI3MywyMSArMjMwMywxNCBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XFxuIFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cztcXG4gXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG4tXFx0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzO1xcbitcXHRpbnQgciA9IC1FTk9NRU0sIGksIG52cXM7XFxuIFxcbiBcXHR2cyA9IGt2emFsbG9jX29iaigqdnMpO1xcbiBcXHRpZiAoIXZzKVxcbiBcXHRcXHRnb3RvIGVycl92cztcXG4gXFx0dnMtXFx1MDAzZWlubGluZV9zZ19jbnQgPSB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQ7XFxuIFxcbi1cXHRpZiAobnZxcyBcXHUwMDNlIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKSB7XFxuLVxcdFxcdHByX2VycihcXFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cXFxcblxcXCIsIG52cXMsXFxuLVxcdFxcdCAgICAgICBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XFxuLVxcdFxcdG52cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcXG4tXFx0fSBlbHNlIGlmIChudnFzID09IDApIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nIDEuXFxcXG5cXFwiLCBudnFzKTtcXG4tXFx0XFx0bnZxcyA9IDE7XFxuLVxcdH1cXG4rXFx0bnZxcyA9IFJFQURfT05DRSh2aG9zdF9zY3NpX21heF9pb192cXMpO1xcbiBcXHRudnFzICs9IFZIT1NUX1NDU0lfVlFfSU87XFxuIFxcbiBcXHR2cy1cXHUwMDNlb2xkX2luZmxpZ2h0ID0ga21hbGxvY19vYmpzKCp2cy1cXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxcbkBAIC0yMjk1LDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0aWYgKCF2cy1cXHUwMDNlb2xkX2luZmxpZ2h0KVxcbiBcXHRcXHRnb3RvIGVycl9pbmZsaWdodDtcXG4gXFxuLVxcdHZzLVxcdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVxcdTAwM2V2cXMsIG52cXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4rXFx0dnMtXFx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVxcdTAwM2V2cXMsIG52cXMpO1xcbiBcXHRpZiAoIXZzLVxcdTAwM2V2cXMpXFxuIFxcdFxcdGdvdG8gZXJyX3ZxcztcXG4gXFxuQEAgLTIzMzEsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9sb2NhbF92cXM6XFxuLVxcdGtmcmVlKHZzLVxcdTAwM2V2cXMpO1xcbitcXHRrdmZyZWUodnMtXFx1MDAzZXZxcyk7XFxuIGVycl92cXM6XFxuIFxcdGtmcmVlKHZzLVxcdTAwM2VvbGRfaW5mbGlnaHQpO1xcbiBlcnJfaW5mbGlnaHQ6XFxuQEAgLTIzNTIsNyArMjM3NSw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHR2aG9zdF9kZXZfc3RvcChcXHUwMDI2dnMtXFx1MDAzZWRldik7XFxuIFxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2cy1cXHUwMDNlZGV2KTtcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZWRldi52cXMpO1xcbi1cXHRrZnJlZSh2cy1cXHUwMDNldnFzKTtcXG4rXFx0a3ZmcmVlKHZzLVxcdTAwM2V2cXMpO1xcbiBcXHRrZnJlZSh2cy1cXHUwMDNlb2xkX2luZmxpZ2h0KTtcXG4gXFx0a3ZmcmVlKHZzKTtcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjMzLjQ3NzQ4NjMxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU1NTQ2MTg5MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiLFxuICAgIFwidmhvc3Rfc2NzaV9vcGVuXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGluIHRoZSB2aG9zdC1zY3NpIGRyaXZlci4gSXQgYWRkcyBhIGN1c3RvbSBzZXR0ZXIgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIHRvIHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgY2hhbmdlcyB0aGUgYWxsb2NhdGlvbiBvZiB2aXJ0cXVldWVzIGluIGB2aG9zdF9zY3NpX29wZW5gIHRvIHVzZSBga3Z6YWxsb2Nfb2Jqc2AgaW5zdGVhZCBvZiBga21hbGxvY19vYmpzYCB0byBwcmV2ZW50IGFsbG9jYXRpb24gZmFpbHVyZXMgZm9yIGxhcmdlIHZhbHVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZSAodmlhIHN5c2ZzIGFuZCAvZGV2L3Zob3N0LXNjc2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjAyMzUwMTk0MDY5ZWUxNWE3YmNiZWEzNDMyZWY5MzMzMmZkYmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAyMzo0NDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmZiMjYyY2Y5YTM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuKysrIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbkBAIC0yMTAsNyArMjEwLDM3IEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7XG4gI2RlZmluZSBWSE9TVF9TQ1NJX01BWF9FVkVOVFx0MTI4XG4gXG4gc3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbi1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcbitcbitzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2lvX3ZxcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3RydG91aW50KHZhbCwgMCwgXHUwMDI2bWF4X2lvX3Zxcyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKG1heF9pb192cXMgXHUwMDNlIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKSB7XG4rXHRcdHByX2VycihcIkludmFsaWQgbWF4X2lvX3ZxcyBvZiAldS4gVXNpbmcgJXUuXFxuXCIsXG4rXHRcdCAgICAgICBtYXhfaW9fdnFzLCBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XG4rXHRcdG1heF9pb192cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcbitcdH0gZWxzZSBpZiAoIW1heF9pb192cXMpIHtcbitcdFx0cHJfZXJyKFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXFxuXCIpO1xuK1x0XHRtYXhfaW9fdnFzID0gMTtcbitcdH1cbitcbitcdFdSSVRFX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCBtYXhfaW9fdnFzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0ge1xuK1x0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXG4rXHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4rfTtcbitcbittb2R1bGVfcGFyYW1fY2IobWF4X2lvX3ZxcywgXHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLFxuK1x0XHRcdTAwMjZ2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2lvX3ZxcywgXCJTZXQgdGhlIG1heCBudW1iZXIgb2YgSU8gdmlydHF1ZXVlcyBhIHZob3N0IHNjc2kgZGV2aWNlIGNhbiBzdXBwb3J0LiBUaGUgZGVmYXVsdCBpcyAxMjguIFRoZSBtYXggaXMgMTAyNC5cIik7XG4gXG4gc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHtcbkBAIC0yMjczLDIxICsyMzAzLDE0IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xuLVx0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzO1xuK1x0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzO1xuIFxuIFx0dnMgPSBrdnphbGxvY19vYmooKnZzKTtcbiBcdGlmICghdnMpXG4gXHRcdGdvdG8gZXJyX3ZzO1xuIFx0dnMtXHUwMDNlaW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDtcbiBcbi1cdGlmIChudnFzIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9JT19WUSkge1xuLVx0XHRwcl9lcnIoXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nICVkLlxcblwiLCBudnFzLFxuLVx0XHQgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpO1xuLVx0XHRudnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7XG4tXHR9IGVsc2UgaWYgKG52cXMgPT0gMCkge1xuLVx0XHRwcl9lcnIoXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nIDEuXFxuXCIsIG52cXMpO1xuLVx0XHRudnFzID0gMTtcbi1cdH1cbitcdG52cXMgPSBSRUFEX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzKTtcbiBcdG52cXMgKz0gVkhPU1RfU0NTSV9WUV9JTztcbiBcbiBcdHZzLVx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxuQEAgLTIyOTUsNyArMjMxOCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0aWYgKCF2cy1cdTAwM2VvbGRfaW5mbGlnaHQpXG4gXHRcdGdvdG8gZXJyX2luZmxpZ2h0O1xuIFxuLVx0dnMtXHUwMDNldnFzID0ga21hbGxvY19vYmpzKCp2cy1cdTAwM2V2cXMsIG52cXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbitcdHZzLVx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcyk7XG4gXHRpZiAoIXZzLVx1MDAzZXZxcylcbiBcdFx0Z290byBlcnJfdnFzO1xuIFxuQEAgLTIzMzEsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX2xvY2FsX3Zxczpcbi1cdGtmcmVlKHZzLVx1MDAzZXZxcyk7XG4rXHRrdmZyZWUodnMtXHUwMDNldnFzKTtcbiBlcnJfdnFzOlxuIFx0a2ZyZWUodnMtXHUwMDNlb2xkX2luZmxpZ2h0KTtcbiBlcnJfaW5mbGlnaHQ6XG5AQCAtMjM1Miw3ICsyMzc1LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2KTtcbiBcdGtmcmVlKHZzLVx1MDAzZWRldi52cXMpO1xuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbitcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIFx0a2ZyZWUodnMtXHUwMDNlb2xkX2luZmxpZ2h0KTtcbiBcdGt2ZnJlZSh2cyk7XG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjMzLjQ3NzQ4NzUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzA0NTQ3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhYm91dCBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIG1hbmFnZWQuIFRoZXkndmUgc3dhcHBlZCBvdXQgYG1vZHVsZV9wYXJhbV9uYW1lZGAgZm9yIGBtb2R1bGVfcGFyYW1fY2JgIGFuZCBpbnRyb2R1Y2VkIGEgY3VzdG9tIHNldHRlciwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLiBTbWFydCBtb3ZlLCB1c2luZyBhIGNhbGxiYWNrIGdpdmVzIG1vcmUgY29udHJvbC4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBSRUFEX09OQ0VgIG9uIGB2aG9zdF9zY3NpX21heF9pb192cXNgIOKAkyBnb29kIGZvciBtZW1vcnkgb3JkZXJpbmcsIGFuZCBtb3ZpbmcgdGhlIGJvdW5kcyBjaGVja2luZyB0byB0aGUgc2V0dGVyIGlzIHByb2JhYmx5IGNsZWFuZXIuIFRoZSBhbGxvY2F0aW9uIGNoYW5nZSwgbW92aW5nIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2emFsbG9jX29ianNgIGZvciBgdnMtXHUwMDNldnFzYCBhbmQgdXNpbmcgYGt2ZnJlZWAgbm93LCB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBpbXByb3ZlbWVudDsgcHJldmVudGluZyBhbGxvY2F0aW9uIGZhaWx1cmVzIGZyb20gbGFyZ2UgYXJyYXlzIGlzIGFsd2F5cyBhIHdpbiwgYW5kIHRoZSB6ZXJvZWQgbWVtb3J5IGZyb20gYGt2emFsbG9jYCBtaWdodCBiZSBoZWxwZnVsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgZnV6emFibGU/IGB2aG9zdF9zY3NpX29wZW5gIGlzIHRoZSBvcGVuIGNhbGxiYWNrIGZvciB0aGUgdmhvc3Qtc2NzaSBjaGFyYWN0ZXIgZGV2aWNlLCBzbyB0aGF0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGAvZGV2L3Zob3N0LXNjc2lgLiBUaGUgYG1heF9pb192cXNgIHBhcmFtZXRlciBpcyBhZGp1c3RhYmxlIHRocm91Z2ggc3lzZnMsIG9yIGF0IGJvb3QtdGltZSB3aGljaCBpcyBhbHNvIGhlbHBmdWwgZm9yIHRlc3RpbmcsIGFzc3VtaW5nIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgZm9yIGl0LiBUaGUgYWxsb2NhdGlvbiBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgY29tbW9ubHkgdXNlZCBwYXRoLlxuXG5MZXQgbWUgZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIHZob3N0LXNjc2kgbm93LiBJJ2xsIHVzZSBgZ2l0IGdyZXBgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDAuOTA3OTQ0NjE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTg3MDY2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdC9zY3NpLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDAuOTY3MTQyNjQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MjExMDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2aG9zdCBEcml2ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgdmhvc3QgZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBnZW5lcmFsbHkgYnJvdWdodCB0b2dldGhlci4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHJ1bGVzIGZvciBidWlsZGluZyB0aGUgdmhvc3Qga2VybmVsIG1vZHVsZSwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3IgbGlicmFyaWVzLCBwb3RlbnRpYWxseSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgcHJvYmFibHkgc29tZSBjbHVlcyBhYm91dCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdmFyaWFibGVzIGRlZmluaW5nIHNvdXJjZSBmaWxlcywgaW5jbHVkZSBwYXRocywgY29tcGlsZXIgZmxhZ3MsIGFuZCBsaW5raW5nIGNvbW1hbmRzLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGJ1aWxkIGlzc3VlcywgbW9kaWZ5aW5nIHRoZSBkcml2ZXIsIG9yIGV2ZW4gb3B0aW1pemluZyBpdHMgcGVyZm9ybWFuY2UuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIHRoaXMgTWFrZWZpbGUgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDo0NC4yMDkyNjExMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICs9IHZob3N0X25ldC5vXFxuICAgMzpcXHR2aG9zdF9uZXQteSA6PSBuZXQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgKz0gdmhvc3Rfc2NzaS5vXFxuICAgNjpcXHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgKz0gdmhvc3RfdnNvY2sub1xcbiAgIDk6XFx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSArPSB2cmluZ2gub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgKz0gdmhvc3RfdmRwYS5vXFxuICAxNDpcXHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19WSE9TVClcXHQrPSB2aG9zdC5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgKz0gdmhvc3RfaW90bGIub1xcbiAgMTk6XFx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjQ0LjIwOTMzNTcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMjk0MDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50IGFuZCBzcGVjaWZpY2FsbHkgd29ya2luZyB3aXRoIHZob3N0LXNjc2k6XG5cbioqRGVidWdnaW5nIGEgVkhPU1RfU0NTSSBDb25maWd1cmF0aW9uIElzc3VlKipcblxuQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYENPTkZJR19WSE9TVF9TQ1NJYC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgc29tZXRoaW5nIGlzbid0IHF1aXRlIHJpZ2h0IHdpdGggaXRzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3Mgbm90IGJlaGF2aW5nIGFzIGV4cGVjdGVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgbG9naWNhbCBhbmQgaW5ncmFpbmVkOiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgcmVsYXRlZCB0byB0aGlzIG1vZHVsZS4gSSBuZWVkIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGBWSE9TVF9TQ1NJYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGJ1aWxkIGNvbmRpdGlvbnMuIEJ5IGV4YW1pbmluZyB0aGF0IGZpbGUsIEkgd2lsbCBsaWtlbHkgZ2FpbiBpbnNpZ2h0IGludG8gd2h5IHRoaXMgb3B0aW9uIGlzbid0IGF2YWlsYWJsZSBvciBiZWhhdmluZyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDcuMzMyMjc5NTE4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzQ2NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9TQ1NJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDcuMzkxMDQ5MDA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyNzYzNDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZob3N0IEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHZob3N0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgbGluZSA0Ni4gSSdtIGd1ZXNzaW5nIHRoYXQgcGFydGljdWxhciBzZWN0aW9uIGhvbGRzIHNvbWUgY3J1Y2lhbCBzZXR0aW5ncywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgY29yZSB2aG9zdCBmdW5jdGlvbmFsaXR5IG9yIG1heWJlIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSB0aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBUaW1lIHRvIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0IHRoaXMgc2VjdGlvbiByZXZlYWxzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgbmV3IGZlYXR1cmUgb3IgYW4gaW1wb3J0YW50IGNsYXJpZmljYXRpb24gb2Ygc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IG91ciB2aG9zdCBpbXBsZW1lbnRhdGlvbiBiZWhhdmVzLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDo1MC43MTg2ODYyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxcbiAgNDE6XFx0XFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA0NDpcXHRcXHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBWSE9TVF9TQ1NJXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNDk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA1MDpcXHRcXHRzZWxlY3QgU0dfUE9PTFxcbiAgNTE6XFx0XFx0ZGVmYXVsdCBuXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHRTYXkgTSBoZXJlIHRvIGVuYWJsZSB0aGUgdmhvc3Rfc2NzaSBUQ00gZmFicmljIG1vZHVsZVxcbiAgNTQ6XFx0XFx0Zm9yIHVzZSB3aXRoIHZpcnRpby1zY3NpIGd1ZXN0c1xcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgVkhPU1RfVlNPQ0tcXG4gIDU3OlxcdFxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA1OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NTAuNzE4NzcyMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0ODM0NTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBWSE9TVF9TQ1NJIE1vZHVsZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX1NDU0lgIG1vZHVsZS4gVGhlIGFyY2hpdGVjdHVyZSBoZXJlIGlzIHRoYXQgaXQgbGVhbnMgb24gYFRBUkdFVF9DT1JFYCDigJMgdGhhdCdzIHRoZSBnZW5lcmljIHRhcmdldCBjb3JlIOKAkyBhbmQgYWxzbyBgRVZFTlRGRGAuIFJpZ2h0LCBzdGFuZGFyZCBkZXBlbmRlbmNpZXMuIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoZXJlIGRvIHdlIHN0YXJ0IGZ1enppbmc/XG5cblRoZSBwYXRjaCBoaXN0b3J5IGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AsIGB2aG9zdF9zY3NpX29wZW5gLCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuICBgdmhvc3Rfc2NzaV9vcGVuYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgdG8gbWUgYXMgdGhlICpvcGVuKiBjYWxsYmFjay4gIFRoZW4gYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gQWxyaWdodCwgc28gd2UgaGF2ZSBzb21lIGhvb2tzIGZvciBlbnRyeSBhbmQgY29udHJvbC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIHNvIGEgZnV6emluZyBjYW1wYWlnbiBzaG91bGQgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDo1Ny4zNjcxMjA5MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjY1ODE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MjI0OD1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgdTY0IGZlYXR1cmVzKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMwMC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzAxOnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMDIte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDY0LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2NTpcXHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9zY3NpX29wZW4sXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2Ni1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NTcuNjUzNzg2Mzk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MjE1MDcyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgdmhvc3Qtc2NzaSBNb2R1bGUgUGFyYW1ldGVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgdGhlc2UgYXJlIGNsZWFybHkgZmlsZSBvcGVyYXRpb25zLCByaWdodD8gQW5kIEkgc2VlIHRoYXQgYG1heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciB0aGF0IGNhbiBiZSB0d2Vha2VkIHZpYSBzeXNmcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCBpdCBpcyEgVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBBcHBhcmVudGx5LCBzb21lb25lIGNvdWxkIHNldCBgbWF4X2lvX3Zxc2AgdG8gYW4gdW5yZWFzb25hYmx5IGhpZ2ggdmFsdWUsIGFuZCBgdmhvc3Rfc2NzaV9vcGVuYCB3b3VsZCBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgbWFzc2l2ZSBhcnJheSB1c2luZyBga21hbGxvY19vYmpzYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgaXNzdWVzLiBUaGUgZml4IG1vdmVzIHRvIGBrdnphbGxvY19vYmpzYCBhbmQgaW5jbHVkZXMgYm91bmRzIGNoZWNraW5nIGluIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRlci5cblxuV2FpdCBhIHNlY29uZCwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIHRoZSBhY3R1YWwgbW9kdWxlIHBhcmFtZXRlciBzZXR0ZXIgZnVuY3Rpb24sIGlzbid0IGl0PyBUaGF0IG1lYW5zIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIHRvbyBieSB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS92aG9zdF9zY3NpL3BhcmFtZXRlcnMvbWF4X2lvX3Zxc2AuIFBlcmZlY3QhIFRoaXMgbWFrZXMgYHZob3N0X3Njc2lfb3BlbmAgZXZlbiBtb3JlIHJlYWNoYWJsZSBhbmQgZGVmaW5pdGVseSBmdXp6YWJsZS5cblxuU28gdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBpbXBvcnRhbnRseSwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLlxuXG5BcyBmb3IgY29uZmlncywgaXQgbG9va3MgbGlrZSBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgYXJlIHRoZSBrZXkgb25lcyBoZXJlLiBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDA2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ1OjA0LjI3NTI5NjkzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODIzNTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEFSR0VUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnOjM6bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBUYXJnZXQgQ29yZSBNb2QgKFRDTSkgYW5kIENvbmZpZ0ZTIEluZnJhc3RydWN0dXJlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NTowNi4zOTM1Mzg5NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MDM0NjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIHRoZSB0YXJnZXQgaXMgYFRBUkdFVF9DT1JFYC4gR290IGl0LiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgbmVlZCB0byBjaGVjayBpZiBpdCdzIHN0YXRpYy4gWWVwLCBpdCBpcy4gSG1tLCBidXQgd2FpdCBhIHNlY29uZC4uLiBpdCdzIGEgY2FsbGJhY2sgZm9yIGBtb2R1bGVfcGFyYW1fY2JgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IFN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhhdCBieSB3cml0aW5nIHRvIHRoZSBzeXNmcyBmaWxlLlxuXG5Ob3csIEkgcmVjYWxsIHRoZSBndWlkYW5jZSB0aGF0IHNwZWNpZmljYWxseSBtZW50aW9ucyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYyBvbmVzLCBiZWNhdXNlIGlubGluZWQgZnVuY3Rpb25zIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0IGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBpcyBzdGF0aWMsICpob3dldmVyKiBpdHMgYWRkcmVzcyBpcyB0YWtlbiB3aXRoaW4gYHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcGAuIFNvLCBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGF0J3MgZ29vZC5cblxuQWxzbywgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gaW4gYHZob3N0X3Njc2lfZm9wc2AuIEkgdGhpbmsgSSB3aWxsIGxpc3QgYWxsIHRoZXNlOlxuXG5UaGUgb25lcyBJIHdhbnQgdG8gZm9jdXMgb24gYXJlOiBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGB2aG9zdF9zY3NpX3JlbGVhc2VgIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2BcblxuXG4iLCJJbnB1dFRva2VucyI6NjczNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToxMS45NjM4ODg2NDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzc2NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz00Mjg9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NDUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDQ2OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NDcte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDg3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODkte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NTAwPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZHJvcF9jbWRzKHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA2LVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCB0LCBsbG5vZGUsIHR2Y19jb21wbGV0aW9uX2xpc3QpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTA3OlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFxcdTAwMjZjbWQtXFx1MDAzZXR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUwOC19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA5LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxMDpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfY21kKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NzE2PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfY21kX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NjQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzY1OlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHNlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzY2LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEzMTQ9dmhvc3Rfc2NzaV9oYW5kbGVfdnEoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0OTUtXFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIGFsbG9jIHJlY3YgaW92c1xcXFxuXFxcIik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ5NjpcXHRcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDk3LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMi1cXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1MDM6XFx0XFx0XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXFx1MDAyNmNtZC1cXHUwMDNldHZjX3NlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwNC1cXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MTgtXFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIG1hcCBpb3YgdG8gc2dsXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTE5OlxcdFxcdFxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFxcdTAwMjZjbWQtXFx1MDAzZXR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MjAtXFx0XFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNTc4PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdG1mX3Jlc3Bfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTU5NjpcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTctfVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTU5OT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3RtZl9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2MDktXFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dG1mLVxcdTAwM2V2d29yaykpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYxMDpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2MTEtfVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTYxND12aG9zdF9zY3NpX2hhbmRsZV90bWYoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTItXFx0XFx0XFx0cHJfZXJyKFxcXCJ2aG9zdF9zY3NpIHRtZiBsb2cgYWxsb2NhdGlvbiBlcnJvclxcXFxuXFxcIik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY1MzpcXHRcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTQtXFx0XFx0XFx0Z290byBzZW5kX3JlamVjdDtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NjEtXFx0XFx0XFx0ICAgICAgVEFSR0VUX1NDRl9BQ0tfS1JFRikgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY2MjpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NjMtXFx0XFx0Z290byBzZW5kX3JlamVjdDtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzMDE9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzY1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzNjY6c3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM2Ny17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYxLVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NjI6XFx0LnJlbGVhc2UgICAgICAgID0gdmhvc3Rfc2NzaV9yZWxlYXNlLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjMtXFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3Rfc2NzaV9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI5NDU9c3RhdGljIGNvbnN0IHN0cnVjdCB0YXJnZXRfY29yZV9mYWJyaWNfb3BzIHZob3N0X3Njc2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk1My1cXHQudHBnX2NoZWNrX3Byb3RfZmFicmljX29ubHlcXHQ9IHZob3N0X3Njc2lfY2hlY2tfcHJvdF9mYWJyaWNfb25seSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTU0OlxcdC5yZWxlYXNlX2NtZFxcdFxcdFxcdD0gdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTU1LVxcdC5jaGVja19zdG9wX2ZyZWVcXHRcXHQ9IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToxMi4wMTcyNzA2MjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4OTAwMjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0X3Njc2lfcmVsZWFzZSBGdW5jdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB2aG9zdF9zY3NpX3JlbGVhc2VgIGlzIGluZGVlZCBhIGZpbGUgb3BlcmF0aW9uLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBzZXR0aW5ncyB0aGF0IGFyZSByZXF1aXJlZCBvciB0aGF0IG1pZ2h0IGJlIG1pc3NpbmcgdGhhdCB3b3VsZCBiZSByZWxldmFudCB0byB3aGF0IEknbSBkb2luZy4gTG9va2luZyBpbnRvIHRoaXMsIEkgc2VlIHRoYXQgYFZIT1NUX1NDU0lgIGRlcGVuZHMgb24gYm90aCBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIGBFVkVOVEZEYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQncyBwcm9iYWJseSBub3QgYSBjb25jZXJuLiBOb3csIGBUQVJHRVRfQ09SRWAgbWFwcyBkaXJlY3RseSB0byBgQ09ORklHX1RBUkdFVF9DT1JFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGVuYWJsZWQuIEJ1dCBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVxdWlyZW1lbnRzLlxuXG5PaCwgcmlnaHQsIEkgc2VlIHRoYXQgYFZIT1NUYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gYFZIT1NUX1NDU0lgIGlzIGNob3Nlbi4gVGhhdOKAmXMgaGVscGZ1bDsgbGVzcyB0byBtYW5hZ2UuIEFsc28sIGBTR19QT09MYCBpcyBzZWxlY3RlZCBieSBgVkhPU1RfU0NTSWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCByZW1lbWJlciB0aGF0IGZvciBsYXRlci5cblxuSSBzdXBwb3NlIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGFnYWluLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ1OjE2LjAwNjI3NjUzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDY6XFx0Y29uZmlnIFZIT1NUX1NDU0lcXG4gIDQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRSBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA0OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDUwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuICA1MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXFxuICA1NDpcXHRcXHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXFxuICA1NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDU6MTYuMDA2MzYwNDQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDA5NTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVkhPU1RfU0NTSSBhbmQgVEFSR0VUX0NPUkUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBhcmUgZW5hYmxlZCBpbiBteSBjb25maWd1cmF0aW9uLiAgVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwIGlzIHRvIGludmVzdGlnYXRlIHRoZSBgdmhvc3Rfc2NzaWAgbW9kdWxlJ3MgZnVuY3Rpb25hbGl0eS4gIEZpcnN0LCBJJ2xsIHNlZSBpZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgaXMgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuIEFoLCBpdCdzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gVGhhdCdzIGdvb2Q7IFN5emthbGxlciBjYW4gZnV6eiB0aGF0IGRpcmVjdGx5IGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3Zob3N0X3Njc2kvcGFyYW1ldGVycy9tYXhfaW9fdnFzYC4gIExldCBtZSBxdWlja2x5IHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgYmVzaWRlcyB0aGUgcGFyYW1ldGVyIHNldHRpbmcuIFllcywgSSBzZWUgdGhhdCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIHRoZSBvdGhlciBwcmltYXJ5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSSdsbCBkZWZpbml0ZWx5IGFkZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzcGVsbGluZyBhbmQgY2FzZSBvZiB0aGVzZSBmdW5jdGlvbnMuICBTbywgd2UndmUgZ290IGB2aG9zdF9zY3NpX29wZW5gLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYC4gIFBlcmZlY3QuXG5cbkZpbmFsbHksIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToyMS4zMDczMTk3NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDE1MDI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIxMj1zdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxMy1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTQ6c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTUtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODpcXHQuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzktXFx0LmdldCA9IHBhcmFtX2dldF91aW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToyMS40ODE0NzU4MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ1Nzk3MjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2aG9zdC1zY3NpIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIEl0J3MgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYG1heF9pb192cXNgIHBhcmFtZXRlci4gSSBzZWUgdGhhdCB0aGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBhIGxhcmdlIHZhbHVlIHdhcyBzZXQgZm9yIGBtYXhfaW9fdnFzYCwgdGhlIGB2aG9zdF9zY3NpX29wZW5gIGZ1bmN0aW9uIHdvdWxkIGF0dGVtcHQgdG8gYWxsb2NhdGUgYSBtYXNzaXZlIGFycmF5IHVzaW5nIGBrbWFsbG9jX29ianNgLiBDbGVhcmx5LCB0aGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIG90aGVyIHVucHJlZGljdGFibGUgYmVoYXZpb3IsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIHRoYXQuXG5cblRoZSBzb2x1dGlvbiBpcyBjbGV2ZXIgYW5kIHNvdW5kLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1c3RvbSBzZXR0ZXIsIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCwgd2hpY2ggd2lsbCBub3cgdmFsaWRhdGUgdGhlIGlucHV0IGZvciBgbWF4X2lvX3Zxc2AuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gIEZ1cnRoZXJtb3JlLCB0aGUgYWxsb2NhdGlvbiB3aXRoaW4gYHZob3N0X3Njc2lfb3BlbmAgaXMgYmVpbmcgY2hhbmdlZCBmcm9tIGBrbWFsbG9jX29ianNgIHRvIGBrdnphbGxvY19vYmpzYC4gVGhpcyBzd2l0Y2ggaXMgc2lnbmlmaWNhbnQuIGBrdnphbGxvY19vYmpzYCBpcyBhIGtlcm5lbCBBUEkgY2FsbCB0aGF0IHNob3VsZCBwcmV2ZW50IHRoZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdlIG1pZ2h0IGhhdmUgc2VlbiB3aXRoIHRoZSBwcmV2aW91cyBjYWxsLCBwYXJ0aWN1bGFybHkgZm9yIHRoZXNlIGxhcmdlciB2YWx1ZXMuIFRoZXNlIGFyZSBkaXJlY3RseSBvYnNlcnZhYmxlIGNoYW5nZXMgdG8gY29kZSB0aGF04oCZcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCBgL2Rldi92aG9zdC1zY3NpYC5cblxuSSdtIG5vdGluZyB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLCBgdmhvc3Rfc2NzaV9vcGVuYCwgYW5kIHdoaWxlIEknbSBhdCBpdCwgSSdsbCB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBhcyB3ZWxsLCBqdXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGFsaWducyB3aXRoIHRoZSBhbGxvY2F0aW9uIGNoYW5nZXMuIEl0J3MgYSB1c2VmdWwgZXhlcmNpc2UgdG8gc2VlIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIG9mIHRoZSBvYmplY3QgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggZm9yIHRoZSBpc3N1ZSBhbmQgd2lsbCBsaWtlbHkgbmVlZCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgZW5hYmxlZCBmb3IgdGVzdGluZy4gTGV0J3MgY2FsbCB0aGlzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDM1LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToyOC45Mzk0NTEwNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDIyMDkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBJdCBhZGRzIGEgY3VzdG9tIHNldHRlciBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGFuZCBjaGFuZ2VzIHRoZSBhbGxvY2F0aW9uIG9mIHZpcnRxdWV1ZXMgaW4gYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBrdnphbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyBmb3IgbGFyZ2UgdmFsdWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlICh2aWEgc3lzZnMgYW5kIC9kZXYvdmhvc3Qtc2NzaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBJdCBhZGRzIGEgY3VzdG9tIHNldHRlciBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGFuZCBjaGFuZ2VzIHRoZSBhbGxvY2F0aW9uIG9mIHZpcnRxdWV1ZXMgaW4gYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBrdnphbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyBmb3IgbGFyZ2UgdmFsdWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlICh2aWEgc3lzZnMgYW5kIC9kZXYvdmhvc3Qtc2NzaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrqjrn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 23:42:34 +0000 UTC FinishedAt: 2026-08-02 23:45:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2d2338c93da79b3bfe4b6099a931d9468d539952", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "fa7f9910-c99c-4a6d-89f5-428bf6ef46ec" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vhost_scsi_set_max_io_vqs", "vhost_scsi_open", "vhost_scsi_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIEl0IGFkZHMgYSBjdXN0b20gc2V0dGVyIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgYW5kIGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gb2YgdmlydHF1ZXVlcyBpbiBgdmhvc3Rfc2NzaV9vcGVuYCB0byB1c2UgYGt2emFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzIGZvciBsYXJnZSB2YWx1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUgKHZpYSBzeXNmcyBhbmQgL2Rldi92aG9zdC1zY3NpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM2MDIzNTAxOTQwNjllZTE1YTdiY2JlYTM0MzJlZjkzMzMyZmRiZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDIzOjQ0OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmZiMjYyY2Y5YTM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbkBAIC0yMTAsNyAmIzQzOzIxMCwzNyBAQCBzdGF0aWMgY29uc3QgaW50IHZob3N0X3Njc2lfYml0c1tdID0ge1xuICNkZWZpbmUgVkhPU1RfU0NTSV9NQVhfRVZFTlRcdDEyOFxuIFxuIHN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7XG4tbW9kdWxlX3BhcmFtX25hbWVkKG1heF9pb192cXMsIHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgdWludCwgMDY0NCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X2lvX3ZxcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG91aW50KHZhbCwgMCwgXHUwMDI2bWF4X2lvX3Zxcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChtYXhfaW9fdnFzIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9JT19WUSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ludmFsaWQgbWF4X2lvX3ZxcyBvZiAldS4gVXNpbmcgJXUuXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG1heF9pb192cXMsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcbiYjNDM7XHRcdG1heF9pb192cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcbiYjNDM7XHR9IGVsc2UgaWYgKCFtYXhfaW9fdnFzKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdG1heF9pb192cXMgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRSh2aG9zdF9zY3NpX21heF9pb192cXMsIG1heF9pb192cXMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0ge1xuJiM0MztcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxuJiM0MztcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO21vZHVsZV9wYXJhbV9jYihtYXhfaW9fdnFzLCBcdTAwMjZ2aG9zdF9zY3NpX21heF9pb192cXNfb3AsXG4mIzQzO1x0XHRcdTAwMjZ2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2lvX3ZxcywgXCYjMzQ7U2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXCYjMzQ7KTtcbiBcbiBzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUge1xuQEAgLTIyNzMsMjEgJiM0MzsyMzAzLDE0IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xuLVx0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzO1xuJiM0MztcdGludCByID0gLUVOT01FTSwgaSwgbnZxcztcbiBcbiBcdHZzID0ga3Z6YWxsb2Nfb2JqKCp2cyk7XG4gXHRpZiAoIXZzKVxuIFx0XHRnb3RvIGVycl92cztcbiBcdHZzLVx1MDAzZWlubGluZV9zZ19jbnQgPSB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQ7XG4gXG4tXHRpZiAobnZxcyBcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcbi1cdFx0cHJfZXJyKFwmIzM0O0ludmFsaWQgbWF4X2lvX3ZxcyBvZiAlZC4gVXNpbmcgJWQuXFxuXCYjMzQ7LCBudnFzLFxuLVx0XHQgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpO1xuLVx0XHRudnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7XG4tXHR9IGVsc2UgaWYgKG52cXMgPT0gMCkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxcblwmIzM0OywgbnZxcyk7XG4tXHRcdG52cXMgPSAxO1xuLVx0fVxuJiM0MztcdG52cXMgPSBSRUFEX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzKTtcbiBcdG52cXMgJiM0Mzs9IFZIT1NUX1NDU0lfVlFfSU87XG4gXG4gXHR2cy1cdTAwM2VvbGRfaW5mbGlnaHQgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZW9sZF9pbmZsaWdodCwgbnZxcyxcbkBAIC0yMjk1LDcgJiM0MzsyMzE4LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHRpZiAoIXZzLVx1MDAzZW9sZF9pbmZsaWdodClcbiBcdFx0Z290byBlcnJfaW5mbGlnaHQ7XG4gXG4tXHR2cy1cdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuJiM0MztcdHZzLVx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcyk7XG4gXHRpZiAoIXZzLVx1MDAzZXZxcylcbiBcdFx0Z290byBlcnJfdnFzO1xuIFxuQEAgLTIzMzEsNyAmIzQzOzIzNTQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiAwO1xuIFxuIGVycl9sb2NhbF92cXM6XG4tXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuJiM0MztcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIGVycl92cXM6XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIGVycl9pbmZsaWdodDpcbkBAIC0yMzUyLDcgJiM0MzsyMzc1LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2KTtcbiBcdGtmcmVlKHZzLVx1MDAzZWRldi52cXMpO1xuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbiYjNDM7XHRrdmZyZWUodnMtXHUwMDNldnFzKTtcbiBcdGtmcmVlKHZzLVx1MDAzZW9sZF9pbmZsaWdodCk7XG4gXHRrdmZyZWUodnMpO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIEl0IGFkZHMgYSBjdXN0b20gc2V0dGVyIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgYW5kIGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gb2YgdmlydHF1ZXVlcyBpbiBgdmhvc3Rfc2NzaV9vcGVuYCB0byB1c2UgYGt2emFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzIGZvciBsYXJnZSB2YWx1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUgKHZpYSBzeXNmcyBhbmQgL2Rldi92aG9zdC1zY3NpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM2MDIzNTAxOTQwNjllZTE1YTdiY2JlYTM0MzJlZjkzMzMyZmRiZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDIzOjQ0OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCA5YTEyNTNiOWQ4YzUwLi5mYjI2MmNmOWEzNGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtMjEwLDcgJiM0MzsyMTAsMzcgQEAgc3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHsKICNkZWZpbmUgVkhPU1RfU0NTSV9NQVhfRVZFTlQJMTI4CiAKIHN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG1heF9pb192cXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b3VpbnQodmFsLCAwLCAmYW1wO21heF9pb192cXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKG1heF9pb192cXMgJmd0OyBWSE9TVF9TQ1NJX01BWF9JT19WUSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICV1LiBVc2luZyAldS5cbiYjMzQ7LAomIzQzOwkJICAgICAgIG1heF9pb192cXMsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTsKJiM0MzsJCW1heF9pb192cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTsKJiM0MzsJfSBlbHNlIGlmICghbWF4X2lvX3ZxcykgewomIzQzOwkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXG4mIzM0Oyk7CiYjNDM7CQltYXhfaW9fdnFzID0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgbWF4X2lvX3Zxcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0gewomIzQzOwkuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcywKJiM0MzsJLmdldCA9IHBhcmFtX2dldF91aW50LAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsICZhbXA7dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLAomIzQzOwkJJmFtcDt2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCAmIzM0O1NldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LiYjMzQ7KTsKIAogc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHsKQEAgLTIyNzMsMjEgJiM0MzsyMzAzLDE0IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxOwogCXN0cnVjdCB2aG9zdF9zY3NpICp2czsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzOwotCWludCByID0gLUVOT01FTSwgaSwgbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxczsKJiM0MzsJaW50IHIgPSAtRU5PTUVNLCBpLCBudnFzOwogCiAJdnMgPSBrdnphbGxvY19vYmooKnZzKTsKIAlpZiAoIXZzKQogCQlnb3RvIGVycl92czsKIAl2cy0mZ3Q7aW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDsKIAotCWlmIChudnFzICZndDsgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cbiYjMzQ7LCBudnFzLAotCQkgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpOwotCQludnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7Ci0JfSBlbHNlIGlmIChudnFzID09IDApIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxuJiMzNDssIG52cXMpOwotCQludnFzID0gMTsKLQl9CiYjNDM7CW52cXMgPSBSRUFEX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzKTsKIAludnFzICYjNDM7PSBWSE9TVF9TQ1NJX1ZRX0lPOwogCiAJdnMtJmd0O29sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtJmd0O29sZF9pbmZsaWdodCwgbnZxcywKQEAgLTIyOTUsNyAmIzQzOzIzMTgsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAlpZiAoIXZzLSZndDtvbGRfaW5mbGlnaHQpCiAJCWdvdG8gZXJyX2luZmxpZ2h0OwogCi0JdnMtJmd0O3ZxcyA9IGttYWxsb2Nfb2JqcygqdnMtJmd0O3ZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwomIzQzOwl2cy0mZ3Q7dnFzID0ga3Z6YWxsb2Nfb2JqcygqdnMtJmd0O3ZxcywgbnZxcyk7CiAJaWYgKCF2cy0mZ3Q7dnFzKQogCQlnb3RvIGVycl92cXM7CiAKQEAgLTIzMzEsNyAmIzQzOzIzNTQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAlyZXR1cm4gMDsKIAogZXJyX2xvY2FsX3ZxczoKLQlrZnJlZSh2cy0mZ3Q7dnFzKTsKJiM0MzsJa3ZmcmVlKHZzLSZndDt2cXMpOwogZXJyX3ZxczoKIAlrZnJlZSh2cy0mZ3Q7b2xkX2luZmxpZ2h0KTsKIGVycl9pbmZsaWdodDoKQEAgLTIzNTIsNyAmIzQzOzIzNzUsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAl2aG9zdF9kZXZfc3RvcCgmYW1wO3ZzLSZndDtkZXYpOwogCXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7dnMtJmd0O2Rldik7CiAJa2ZyZWUodnMtJmd0O2Rldi52cXMpOwotCWtmcmVlKHZzLSZndDt2cXMpOwomIzQzOwlrdmZyZWUodnMtJmd0O3Zxcyk7CiAJa2ZyZWUodnMtJmd0O29sZF9pbmZsaWdodCk7CiAJa3ZmcmVlKHZzKTsKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXNjc2kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvdmhvc3Qvc2NzaS5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBtYW5hZ2VkLiBUaGV5JiMzOTt2ZSBzd2FwcGVkIG91dCBgbW9kdWxlX3BhcmFtX25hbWVkYCBmb3IgYG1vZHVsZV9wYXJhbV9jYmAgYW5kIGludHJvZHVjZWQgYSBjdXN0b20gc2V0dGVyLCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIFNtYXJ0IG1vdmUsIHVzaW5nIGEgY2FsbGJhY2sgZ2l2ZXMgbW9yZSBjb250cm9sLiBUaGV5JiMzOTt2ZSBhbHNvIHVwZGF0ZWQgYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBSRUFEX09OQ0VgIG9uIGB2aG9zdF9zY3NpX21heF9pb192cXNgIOKAkyBnb29kIGZvciBtZW1vcnkgb3JkZXJpbmcsIGFuZCBtb3ZpbmcgdGhlIGJvdW5kcyBjaGVja2luZyB0byB0aGUgc2V0dGVyIGlzIHByb2JhYmx5IGNsZWFuZXIuIFRoZSBhbGxvY2F0aW9uIGNoYW5nZSwgbW92aW5nIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2emFsbG9jX29ianNgIGZvciBgdnMtJmd0O3Zxc2AgYW5kIHVzaW5nIGBrdmZyZWVgIG5vdywgdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGltcHJvdmVtZW50OyBwcmV2ZW50aW5nIGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBsYXJnZSBhcnJheXMgaXMgYWx3YXlzIGEgd2luLCBhbmQgdGhlIHplcm9lZCBtZW1vcnkgZnJvbSBga3Z6YWxsb2NgIG1pZ2h0IGJlIGhlbHBmdWwuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgZnV6emFibGU/IGB2aG9zdF9zY3NpX29wZW5gIGlzIHRoZSBvcGVuIGNhbGxiYWNrIGZvciB0aGUgdmhvc3Qtc2NzaSBjaGFyYWN0ZXIgZGV2aWNlLCBzbyB0aGF0IG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBgL2Rldi92aG9zdC1zY3NpYC4gVGhlIGBtYXhfaW9fdnFzYCBwYXJhbWV0ZXIgaXMgYWRqdXN0YWJsZSB0aHJvdWdoIHN5c2ZzLCBvciBhdCBib290LXRpbWUgd2hpY2ggaXMgYWxzbyBoZWxwZnVsIGZvciB0ZXN0aW5nLCBhc3N1bWluZyB0aGUga2VybmVsIGlzIGNvbXBpbGVkIGZvciBpdC4gVGhlIGFsbG9jYXRpb24gY2hhbmdlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhpcyBpcyBhIGNvbW1vbmx5IHVzZWQgcGF0aC4KCkxldCBtZSBmaW5kIHRoZSBjb25maWcgb3B0aW9ucyBmb3Igdmhvc3Qtc2NzaSBub3cuIEkmIzM5O2xsIHVzZSBgZ2l0IGdyZXBgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Qvc2NzaS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3QgRHJpdmVyIE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSB2aG9zdCBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBnZW5lcmFsbHkgYnJvdWdodCB0b2dldGhlci4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBydWxlcyBmb3IgYnVpbGRpbmcgdGhlIHZob3N0IGtlcm5lbCBtb2R1bGUsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcywgcG90ZW50aWFsbHkgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYW5kIHByb2JhYmx5IHNvbWUgY2x1ZXMgYWJvdXQgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJIGFudGljaXBhdGUgc2VlaW5nIHZhcmlhYmxlcyBkZWZpbmluZyBzb3VyY2UgZmlsZXMsIGluY2x1ZGUgcGF0aHMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBjb21tYW5kcy4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBidWlsZCBpc3N1ZXMsIG1vZGlmeWluZyB0aGUgZHJpdmVyLCBvciBldmVuIG9wdGltaXppbmcgaXRzIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0cmVhc3VyZXMgdGhpcyBNYWtlZmlsZSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICYjNDM7PSB2aG9zdF9uZXQub1xuICAgMzpcdHZob3N0X25ldC15IDo9IG5ldC5vXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1NDU0kpICYjNDM7PSB2aG9zdF9zY3NpLm9cbiAgIDY6XHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSAmIzQzOz0gdmhvc3RfdnNvY2sub1xuICAgOTpcdHZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xuICAxMDpcdFxuICAxMTpcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSAmIzQzOz0gdnJpbmdoLm9cbiAgMTI6XHRcbiAgMTM6XHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgJiM0Mzs9IHZob3N0X3ZkcGEub1xuICAxNDpcdHZob3N0X3ZkcGEteSA6PSB2ZHBhLm9cbiAgMTU6XHRcbiAgMTY6XHRvYmotJChDT05GSUdfVkhPU1QpXHQmIzQzOz0gdmhvc3Qub1xuICAxNzpcdFxuICAxODpcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgJiM0Mzs9IHZob3N0X2lvdGxiLm9cbiAgMTk6XHR2aG9zdF9pb3RsYi15IDo9IGlvdGxiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50IGFuZCBzcGVjaWZpY2FsbHkgd29ya2luZyB3aXRoIHZob3N0LXNjc2k6CgoqKkRlYnVnZ2luZyBhIFZIT1NUX1NDU0kgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSBgQ09ORklHX1ZIT1NUX1NDU0lgLiBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCBzb21ldGhpbmcgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0IHdpdGggaXRzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIG5vdCBiZWhhdmluZyBhcyBleHBlY3RlZC4KCk15IG5leHQgc3RlcCBpcyBsb2dpY2FsIGFuZCBpbmdyYWluZWQ6IEkgaW1tZWRpYXRlbHkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSByZWxhdGVkIHRvIHRoaXMgbW9kdWxlLiBJIG5lZWQgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgYFZIT1NUX1NDU0lgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgZGlyZWN0bHkgdG8gYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG9zc2libGUgYnVpbGQgY29uZGl0aW9ucy4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSB3aWxsIGxpa2VseSBnYWluIGluc2lnaHQgaW50byB3aHkgdGhpcyBvcHRpb24gaXNuJiMzOTt0IGF2YWlsYWJsZSBvciBiZWhhdmluZyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfU0NTSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7VkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVmhvc3QgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB2aG9zdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmUgNDYuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gaG9sZHMgc29tZSBjcnVjaWFsIHNldHRpbmdzLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBjb3JlIHZob3N0IGZ1bmN0aW9uYWxpdHkgb3IgbWF5YmUgc29tZSBzcGVjaWZpYyBmZWF0dXJlIHRoYXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBUaW1lIHRvIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0IHRoaXMgc2VjdGlvbiByZXZlYWxzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIG5ldyBmZWF0dXJlIG9yIGFuIGltcG9ydGFudCBjbGFyaWZpY2F0aW9uIG9mIHNldHRpbmdzIHRoYXQgZGVmaW5lIGhvdyBvdXIgdmhvc3QgaW1wbGVtZW50YXRpb24gYmVoYXZlcy4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdCAgZ3Vlc3QgbmV0d29ya2luZyB3aXRoIHZpcnRpb19uZXQuIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHZpcnRpb19uZXRcbiAgNDE6XHRcdCAgbW9kdWxlIGl0c2VsZiB3aGljaCBuZWVkcyB0byBiZSBsb2FkZWQgaW4gZ3Vlc3Qga2VybmVsLlxuICA0MjpcdFxuICA0MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgNDQ6XHRcdCAgYmUgY2FsbGVkIHZob3N0X25ldC5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgVkhPU1RfU0NTSVxuICA0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7VkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRSBcdTAwMjZcdTAwMjYgRVZFTlRGRFxuICA0OTpcdFx0c2VsZWN0IFZIT1NUXG4gIDUwOlx0XHRzZWxlY3QgU0dfUE9PTFxuICA1MTpcdFx0ZGVmYXVsdCBuXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHRTYXkgTSBoZXJlIHRvIGVuYWJsZSB0aGUgdmhvc3Rfc2NzaSBUQ00gZmFicmljIG1vZHVsZVxuICA1NDpcdFx0Zm9yIHVzZSB3aXRoIHZpcnRpby1zY3NpIGd1ZXN0c1xuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBWSE9TVF9WU09DS1xuICA1NzpcdFx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcdTAwMjZcdTAwMjYgRVZFTlRGRFxuICA1OTpcdFx0c2VsZWN0IFZIT1NUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1czogVkhPU1RfU0NTSSBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX1NDU0lgIG1vZHVsZS4gVGhlIGFyY2hpdGVjdHVyZSBoZXJlIGlzIHRoYXQgaXQgbGVhbnMgb24gYFRBUkdFVF9DT1JFYCDigJMgdGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyB0YXJnZXQgY29yZSDigJMgYW5kIGFsc28gYEVWRU5URkRgLiBSaWdodCwgc3RhbmRhcmQgZGVwZW5kZW5jaWVzLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogd2hlcmUgZG8gd2Ugc3RhcnQgZnV6emluZz8KClRoZSBwYXRjaCBoaXN0b3J5IGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AsIGB2aG9zdF9zY3NpX29wZW5gLCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuICBgdmhvc3Rfc2NzaV9vcGVuYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgdG8gbWUgYXMgdGhlICpvcGVuKiBjYWxsYmFjay4gIFRoZW4gYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gQWxyaWdodCwgc28gd2UgaGF2ZSBzb21lIGhvb2tzIGZvciBlbnRyeSBhbmQgY29udHJvbC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgaW50byBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGFuZCBzcGVjaWZpY2FsbHkgZXhhbWluZSBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCBzbyBhIGZ1enppbmcgY2FtcGFpZ24gc2hvdWxkIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjQ4PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCB1NjQgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMwMC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMDE6c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzAyLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDY0LVx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2NTpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Njc2lfb3BlbixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjYtXHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgdmhvc3Qtc2NzaSBNb2R1bGUgUGFyYW1ldGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgLCB0aGVzZSBhcmUgY2xlYXJseSBmaWxlIG9wZXJhdGlvbnMsIHJpZ2h0PyBBbmQgSSBzZWUgdGhhdCBgbWF4X2lvX3Zxc2AgaXMgYSBtb2R1bGUgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIHR3ZWFrZWQgdmlhIHN5c2ZzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIGl0IGlzISBUaGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBBcHBhcmVudGx5LCBzb21lb25lIGNvdWxkIHNldCBgbWF4X2lvX3Zxc2AgdG8gYW4gdW5yZWFzb25hYmx5IGhpZ2ggdmFsdWUsIGFuZCBgdmhvc3Rfc2NzaV9vcGVuYCB3b3VsZCBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgbWFzc2l2ZSBhcnJheSB1c2luZyBga21hbGxvY19vYmpzYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgaXNzdWVzLiBUaGUgZml4IG1vdmVzIHRvIGBrdnphbGxvY19vYmpzYCBhbmQgaW5jbHVkZXMgYm91bmRzIGNoZWNraW5nIGluIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRlci4KCldhaXQgYSBzZWNvbmQsIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBpcyB0aGUgYWN0dWFsIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGVyIGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IFRoYXQgbWVhbnMgc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgdG9vIGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3Zob3N0X3Njc2kvcGFyYW1ldGVycy9tYXhfaW9fdnFzYC4gUGVyZmVjdCEgVGhpcyBtYWtlcyBgdmhvc3Rfc2NzaV9vcGVuYCBldmVuIG1vcmUgcmVhY2hhYmxlIGFuZCBkZWZpbml0ZWx5IGZ1enphYmxlLgoKU28gdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBpbXBvcnRhbnRseSwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLgoKQXMgZm9yIGNvbmZpZ3MsIGl0IGxvb2tzIGxpa2UgYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgIGFyZSB0aGUga2V5IG9uZXMgaGVyZS4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGV4YWN0IG5hbWVzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUQVJHRVRfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnLTItXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnOjM6bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxuZHJpdmVycy90YXJnZXQvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBUYXJnZXQgQ29yZSBNb2QgKFRDTSkgYW5kIENvbmZpZ0ZTIEluZnJhc3RydWN0dXJlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLZXJuZWwgRW50cnlwb2ludHMqKgoKT2theSwgc28gdGhlIHRhcmdldCBpcyBgVEFSR0VUX0NPUkVgLiBHb3QgaXQuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBzdGF0aWMuIFllcCwgaXQgaXMuIEhtbSwgYnV0IHdhaXQgYSBzZWNvbmQuLi4gaXQmIzM5O3MgYSBjYWxsYmFjayBmb3IgYG1vZHVsZV9wYXJhbV9jYmAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IFN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhhdCBieSB3cml0aW5nIHRvIHRoZSBzeXNmcyBmaWxlLgoKTm93LCBJIHJlY2FsbCB0aGUgZ3VpZGFuY2UgdGhhdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgb25lcywgYmVjYXVzZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIHN0YXRpYywgKmhvd2V2ZXIqIGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wYC4gU28sIGl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2QuCgpBbHNvLCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIGFsc28gc3RhdGljLCBidXQgdGhlaXIgYWRkcmVzc2VzIGFyZSB0YWtlbiBpbiBgdmhvc3Rfc2NzaV9mb3BzYC4gSSB0aGluayBJIHdpbGwgbGlzdCBhbGwgdGhlc2U6CgpUaGUgb25lcyBJIHdhbnQgdG8gZm9jdXMgb24gYXJlOiBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuCgpJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBpbiBgZHJpdmVycy92aG9zdC9zY3NpLmNgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvc2NzaS5jPTQyOD1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NDUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0NDY6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDQ3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODctXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0ODg6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXMoc3RydWN0IHZob3N0X3Njc2lfdG1mICp0bWYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODkte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTUwMD1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2Ryb3BfY21kcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDYtXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZCwgdCwgbGxub2RlLCB0dmNfY29tcGxldGlvbl9saXN0KVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTA3Olx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MDgtfVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA5LVxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTEwOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWQoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTExLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz03MTY9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9jbWRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NjQtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NjU6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHNlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NjYtXHR9XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTMxND12aG9zdF9zY3NpX2hhbmRsZV92cShzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0OTUtXHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2MgcmVjdiBpb3ZzXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE0OTY6XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXHUwMDI2Y21kLVx1MDAzZXR2Y19zZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ5Ny1cdFx0XHRnb3RvIGVycjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTAyLVx0XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTAzOlx0XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXHUwMDI2Y21kLVx1MDAzZXR2Y19zZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwNC1cdFx0XHRcdGdvdG8gZXJyO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MTgtXHRcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byBtYXAgaW92IHRvIHNnbFxcblwmIzM0Oyk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTE5Olx0XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXHUwMDI2Y21kLVx1MDAzZXR2Y19zZV9jbWQpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUyMC1cdFx0XHRcdGdvdG8gZXJyO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1Nzg9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV90bWZfcmVzcF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTk2Olx0dmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXModG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTctfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1OTk9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV90bWZfZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYwOS1cdGlmICghdmhvc3RfdnFfd29ya19xdWV1ZSh2cSwgXHUwMDI2dG1mLVx1MDAzZXZ3b3JrKSlcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2MTA6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjExLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNjE0PXZob3N0X3Njc2lfaGFuZGxlX3RtZihzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTItXHRcdFx0cHJfZXJyKFwmIzM0O3Zob3N0X3Njc2kgdG1mIGxvZyBhbGxvY2F0aW9uIGVycm9yXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2NTM6XHRcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXModG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTQtXHRcdFx0Z290byBzZW5kX3JlamVjdDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjYxLVx0XHRcdCAgICAgIFRBUkdFVF9TQ0ZfQUNLX0tSRUYpIFx1MDAzYyAwKSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjYyOlx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY2My1cdFx0Z290byBzZW5kX3JlamVjdDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMzAxPXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzNjUtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzY2OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM2Ny17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYxLVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDYyOlx0LnJlbGVhc2UgICAgICAgID0gdmhvc3Rfc2NzaV9yZWxlYXNlLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2My1cdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Njc2lfaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9Mjk0NT1zdGF0aWMgY29uc3Qgc3RydWN0IHRhcmdldF9jb3JlX2ZhYnJpY19vcHMgdmhvc3Rfc2NzaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk1My1cdC50cGdfY2hlY2tfcHJvdF9mYWJyaWNfb25seVx0PSB2aG9zdF9zY3NpX2NoZWNrX3Byb3RfZmFicmljX29ubHksXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTU0Olx0LnJlbGVhc2VfY21kXHRcdFx0PSB2aG9zdF9zY3NpX3JlbGVhc2VfY21kLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk1NS1cdC5jaGVja19zdG9wX2ZyZWVcdFx0PSB2aG9zdF9zY3NpX2NoZWNrX3N0b3BfZnJlZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjM6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0X3Njc2lfcmVsZWFzZSBGdW5jdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHZob3N0X3Njc2lfcmVsZWFzZWAgaXMgaW5kZWVkIGEgZmlsZSBvcGVyYXRpb24sIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBmcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIHNldHRpbmdzIHRoYXQgYXJlIHJlcXVpcmVkIG9yIHRoYXQgbWlnaHQgYmUgbWlzc2luZyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSBkb2luZy4gTG9va2luZyBpbnRvIHRoaXMsIEkgc2VlIHRoYXQgYFZIT1NUX1NDU0lgIGRlcGVuZHMgb24gYm90aCBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIGBFVkVOVEZEYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IGEgY29uY2Vybi4gTm93LCBgVEFSR0VUX0NPUkVgIG1hcHMgZGlyZWN0bHkgdG8gYENPTkZJR19UQVJHRVRfQ09SRWAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgZW5hYmxlZC4gQnV0IEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZXF1aXJlbWVudHMuCgpPaCwgcmlnaHQsIEkgc2VlIHRoYXQgYFZIT1NUYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gYFZIT1NUX1NDU0lgIGlzIGNob3Nlbi4gVGhhdOKAmXMgaGVscGZ1bDsgbGVzcyB0byBtYW5hZ2UuIEFsc28sIGBTR19QT09MYCBpcyBzZWxlY3RlZCBieSBgVkhPU1RfU0NTSWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCByZW1lbWJlciB0aGF0IGZvciBsYXRlci4KCkkgc3VwcG9zZSBJIHNob3VsZCBjaGVjayBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBhZ2FpbiwganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NjpcdGNvbmZpZyBWSE9TVF9TQ1NJXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDQ5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNTA6XHRcdHNlbGVjdCBTR19QT09MXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXG4gIDU0Olx0XHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXG4gIDU1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVkhPU1RfU0NTSSBhbmQgVEFSR0VUX0NPUkUqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4gIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGB2aG9zdF9zY3NpYCBtb2R1bGUmIzM5O3MgZnVuY3Rpb25hbGl0eS4gIEZpcnN0LCBJJiMzOTtsbCBzZWUgaWYgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBBaCwgaXQmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrLiBUaGF0JiMzOTtzIGdvb2Q7IFN5emthbGxlciBjYW4gZnV6eiB0aGF0IGRpcmVjdGx5IGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3Zob3N0X3Njc2kvcGFyYW1ldGVycy9tYXhfaW9fdnFzYC4gIExldCBtZSBxdWlja2x5IHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgYmVzaWRlcyB0aGUgcGFyYW1ldGVyIHNldHRpbmcuIFllcywgSSBzZWUgdGhhdCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIHRoZSBvdGhlciBwcmltYXJ5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSSYjMzk7bGwgZGVmaW5pdGVseSBhZGQgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIHRvIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzcGVsbGluZyBhbmQgY2FzZSBvZiB0aGVzZSBmdW5jdGlvbnMuICBTbywgd2UmIzM5O3ZlIGdvdCBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuICBQZXJmZWN0LgoKRmluYWxseSwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfc2V0X21heF9pb192cXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMTI9c3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxMy1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIxNDpzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE1LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODpcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM5LVx0LmdldCA9IHBhcmFtX2dldF91aW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgdmhvc3Qtc2NzaSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYG1heF9pb192cXNgIHBhcmFtZXRlci4gSSBzZWUgdGhhdCB0aGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBhIGxhcmdlIHZhbHVlIHdhcyBzZXQgZm9yIGBtYXhfaW9fdnFzYCwgdGhlIGB2aG9zdF9zY3NpX29wZW5gIGZ1bmN0aW9uIHdvdWxkIGF0dGVtcHQgdG8gYWxsb2NhdGUgYSBtYXNzaXZlIGFycmF5IHVzaW5nIGBrbWFsbG9jX29ianNgLiBDbGVhcmx5LCB0aGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIG90aGVyIHVucHJlZGljdGFibGUgYmVoYXZpb3IsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIHRoYXQuCgpUaGUgc29sdXRpb24gaXMgY2xldmVyIGFuZCBzb3VuZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjdXN0b20gc2V0dGVyLCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AsIHdoaWNoIHdpbGwgbm93IHZhbGlkYXRlIHRoZSBpbnB1dCBmb3IgYG1heF9pb192cXNgLiBUaGF0JiMzOTtzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLiAgRnVydGhlcm1vcmUsIHRoZSBhbGxvY2F0aW9uIHdpdGhpbiBgdmhvc3Rfc2NzaV9vcGVuYCBpcyBiZWluZyBjaGFuZ2VkIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2emFsbG9jX29ianNgLiBUaGlzIHN3aXRjaCBpcyBzaWduaWZpY2FudC4gYGt2emFsbG9jX29ianNgIGlzIGEga2VybmVsIEFQSSBjYWxsIHRoYXQgc2hvdWxkIHByZXZlbnQgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgd2UgbWlnaHQgaGF2ZSBzZWVuIHdpdGggdGhlIHByZXZpb3VzIGNhbGwsIHBhcnRpY3VsYXJseSBmb3IgdGhlc2UgbGFyZ2VyIHZhbHVlcy4gVGhlc2UgYXJlIGRpcmVjdGx5IG9ic2VydmFibGUgY2hhbmdlcyB0byBjb2RlIHRoYXTigJlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UgYW5kIGAvZGV2L3Zob3N0LXNjc2lgLgoKSSYjMzk7bSBub3RpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCwgYHZob3N0X3Njc2lfb3BlbmAsIGFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBhcyB3ZWxsLCBqdXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGFsaWducyB3aXRoIHRoZSBhbGxvY2F0aW9uIGNoYW5nZXMuIEl0JiMzOTtzIGEgdXNlZnVsIGV4ZXJjaXNlIHRvIHNlZSB0aGUgZW50aXJlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0IGludm9sdmVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KClRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCBmb3IgdGhlIGlzc3VlIGFuZCB3aWxsIGxpa2VseSBuZWVkIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBlbmFibGVkIGZvciB0ZXN0aW5nLiBMZXQmIzM5O3MgY2FsbCB0aGlzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIzOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9TQ1NJJiMzNDssCiAgICAmIzM0O1RBUkdFVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBJdCBhZGRzIGEgY3VzdG9tIHNldHRlciBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGFuZCBjaGFuZ2VzIHRoZSBhbGxvY2F0aW9uIG9mIHZpcnRxdWV1ZXMgaW4gYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBrdnphbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyBmb3IgbGFyZ2UgdmFsdWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlICh2aWEgc3lzZnMgYW5kIC9kZXYvdmhvc3Qtc2NzaSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpbiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIuIEl0IGFkZHMgYSBjdXN0b20gc2V0dGVyIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgYW5kIGNoYW5nZXMgdGhlIGFsbG9jYXRpb24gb2YgdmlydHF1ZXVlcyBpbiBgdmhvc3Rfc2NzaV9vcGVuYCB0byB1c2UgYGt2emFsbG9jX29ianNgIGluc3RlYWQgb2YgYGttYWxsb2Nfb2Jqc2AgdG8gcHJldmVudCBhbGxvY2F0aW9uIGZhaWx1cmVzIGZvciBsYXJnZSB2YWx1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUgKHZpYSBzeXNmcyBhbmQgL2Rldi92aG9zdC1zY3NpKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjMzLjA4ODgzOTk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTM0ODQ0NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiLFxuICAgIFwidmhvc3Rfc2NzaV9vcGVuXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGluIHRoZSB2aG9zdC1zY3NpIGRyaXZlci4gSXQgYWRkcyBhIGN1c3RvbSBzZXR0ZXIgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIHRvIHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgY2hhbmdlcyB0aGUgYWxsb2NhdGlvbiBvZiB2aXJ0cXVldWVzIGluIGB2aG9zdF9zY3NpX29wZW5gIHRvIHVzZSBga3Z6YWxsb2Nfb2Jqc2AgaW5zdGVhZCBvZiBga21hbGxvY19vYmpzYCB0byBwcmV2ZW50IGFsbG9jYXRpb24gZmFpbHVyZXMgZm9yIGxhcmdlIHZhbHVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZSAodmlhIHN5c2ZzIGFuZCAvZGV2L3Zob3N0LXNjc2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDozMy4wODg4NDY0MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzk0MjA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM2MDIzNTAxOTQwNjllZTE1YTdiY2JlYTM0MzJlZjkzMzMyZmRiZDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAyMzo0NDozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuaW5kZXggOWExMjUzYjlkOGM1MC4uZmIyNjJjZjlhMzRkOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXFxuQEAgLTIxMCw3ICsyMTAsMzcgQEAgc3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHtcXG4gI2RlZmluZSBWSE9TVF9TQ1NJX01BWF9FVkVOVFxcdDEyOFxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcXG4tbW9kdWxlX3BhcmFtX25hbWVkKG1heF9pb192cXMsIHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgdWludCwgMDY0NCk7XFxuK1xcbitzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfaW9fdnFzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdWludCh2YWwsIDAsIFxcdTAwMjZtYXhfaW9fdnFzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChtYXhfaW9fdnFzIFxcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJXUuIFVzaW5nICV1LlxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG1heF9pb192cXMsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcXG4rXFx0XFx0bWF4X2lvX3ZxcyA9IFZIT1NUX1NDU0lfTUFYX0lPX1ZRO1xcbitcXHR9IGVsc2UgaWYgKCFtYXhfaW9fdnFzKSB7XFxuK1xcdFxcdHByX2VycihcXFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXFxcXG5cXFwiKTtcXG4rXFx0XFx0bWF4X2lvX3ZxcyA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdFdSSVRFX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCBtYXhfaW9fdnFzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB2aG9zdF9zY3NpX21heF9pb192cXNfb3AgPSB7XFxuK1xcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxcbitcXHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXFxuK307XFxuK1xcbittb2R1bGVfcGFyYW1fY2IobWF4X2lvX3ZxcywgXFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCxcXG4rXFx0XFx0XFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3ZxcywgMDY0NCk7XFxuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2lvX3ZxcywgXFxcIlNldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LlxcXCIpO1xcbiBcXG4gc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHtcXG5AQCAtMjI3MywyMSArMjMwMywxNCBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XFxuIFxcdHN0cnVjdCB2aG9zdF9zY3NpICp2cztcXG4gXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG4tXFx0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzO1xcbitcXHRpbnQgciA9IC1FTk9NRU0sIGksIG52cXM7XFxuIFxcbiBcXHR2cyA9IGt2emFsbG9jX29iaigqdnMpO1xcbiBcXHRpZiAoIXZzKVxcbiBcXHRcXHRnb3RvIGVycl92cztcXG4gXFx0dnMtXFx1MDAzZWlubGluZV9zZ19jbnQgPSB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQ7XFxuIFxcbi1cXHRpZiAobnZxcyBcXHUwMDNlIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKSB7XFxuLVxcdFxcdHByX2VycihcXFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cXFxcblxcXCIsIG52cXMsXFxuLVxcdFxcdCAgICAgICBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XFxuLVxcdFxcdG52cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcXG4tXFx0fSBlbHNlIGlmIChudnFzID09IDApIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nIDEuXFxcXG5cXFwiLCBudnFzKTtcXG4tXFx0XFx0bnZxcyA9IDE7XFxuLVxcdH1cXG4rXFx0bnZxcyA9IFJFQURfT05DRSh2aG9zdF9zY3NpX21heF9pb192cXMpO1xcbiBcXHRudnFzICs9IFZIT1NUX1NDU0lfVlFfSU87XFxuIFxcbiBcXHR2cy1cXHUwMDNlb2xkX2luZmxpZ2h0ID0ga21hbGxvY19vYmpzKCp2cy1cXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxcbkBAIC0yMjk1LDcgKzIzMTgsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0aWYgKCF2cy1cXHUwMDNlb2xkX2luZmxpZ2h0KVxcbiBcXHRcXHRnb3RvIGVycl9pbmZsaWdodDtcXG4gXFxuLVxcdHZzLVxcdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVxcdTAwM2V2cXMsIG52cXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4rXFx0dnMtXFx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVxcdTAwM2V2cXMsIG52cXMpO1xcbiBcXHRpZiAoIXZzLVxcdTAwM2V2cXMpXFxuIFxcdFxcdGdvdG8gZXJyX3ZxcztcXG4gXFxuQEAgLTIzMzEsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9sb2NhbF92cXM6XFxuLVxcdGtmcmVlKHZzLVxcdTAwM2V2cXMpO1xcbitcXHRrdmZyZWUodnMtXFx1MDAzZXZxcyk7XFxuIGVycl92cXM6XFxuIFxcdGtmcmVlKHZzLVxcdTAwM2VvbGRfaW5mbGlnaHQpO1xcbiBlcnJfaW5mbGlnaHQ6XFxuQEAgLTIzNTIsNyArMjM3NSw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHR2aG9zdF9kZXZfc3RvcChcXHUwMDI2dnMtXFx1MDAzZWRldik7XFxuIFxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2cy1cXHUwMDNlZGV2KTtcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZWRldi52cXMpO1xcbi1cXHRrZnJlZSh2cy1cXHUwMDNldnFzKTtcXG4rXFx0a3ZmcmVlKHZzLVxcdTAwM2V2cXMpO1xcbiBcXHRrZnJlZSh2cy1cXHUwMDNlb2xkX2luZmxpZ2h0KTtcXG4gXFx0a3ZmcmVlKHZzKTtcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjMzLjQ3NzQ4NjMxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU1NTQ2MTg5MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiLFxuICAgIFwidmhvc3Rfc2NzaV9vcGVuXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGluIHRoZSB2aG9zdC1zY3NpIGRyaXZlci4gSXQgYWRkcyBhIGN1c3RvbSBzZXR0ZXIgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIHRvIHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgY2hhbmdlcyB0aGUgYWxsb2NhdGlvbiBvZiB2aXJ0cXVldWVzIGluIGB2aG9zdF9zY3NpX29wZW5gIHRvIHVzZSBga3Z6YWxsb2Nfb2Jqc2AgaW5zdGVhZCBvZiBga21hbGxvY19vYmpzYCB0byBwcmV2ZW50IGFsbG9jYXRpb24gZmFpbHVyZXMgZm9yIGxhcmdlIHZhbHVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZSAodmlhIHN5c2ZzIGFuZCAvZGV2L3Zob3N0LXNjc2kpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjAyMzUwMTk0MDY5ZWUxNWE3YmNiZWEzNDMyZWY5MzMzMmZkYmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAyMzo0NDozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmZiMjYyY2Y5YTM0ZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuKysrIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbkBAIC0yMTAsNyArMjEwLDM3IEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7XG4gI2RlZmluZSBWSE9TVF9TQ1NJX01BWF9FVkVOVFx0MTI4XG4gXG4gc3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbi1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcbitcbitzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X2lvX3ZxcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3RydG91aW50KHZhbCwgMCwgXHUwMDI2bWF4X2lvX3Zxcyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKG1heF9pb192cXMgXHUwMDNlIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKSB7XG4rXHRcdHByX2VycihcIkludmFsaWQgbWF4X2lvX3ZxcyBvZiAldS4gVXNpbmcgJXUuXFxuXCIsXG4rXHRcdCAgICAgICBtYXhfaW9fdnFzLCBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XG4rXHRcdG1heF9pb192cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcbitcdH0gZWxzZSBpZiAoIW1heF9pb192cXMpIHtcbitcdFx0cHJfZXJyKFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mIDAuIFVzaW5nIDEuXFxuXCIpO1xuK1x0XHRtYXhfaW9fdnFzID0gMTtcbitcdH1cbitcbitcdFdSSVRFX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCBtYXhfaW9fdnFzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0ge1xuK1x0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXG4rXHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4rfTtcbitcbittb2R1bGVfcGFyYW1fY2IobWF4X2lvX3ZxcywgXHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLFxuK1x0XHRcdTAwMjZ2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MobWF4X2lvX3ZxcywgXCJTZXQgdGhlIG1heCBudW1iZXIgb2YgSU8gdmlydHF1ZXVlcyBhIHZob3N0IHNjc2kgZGV2aWNlIGNhbiBzdXBwb3J0LiBUaGUgZGVmYXVsdCBpcyAxMjguIFRoZSBtYXggaXMgMTAyNC5cIik7XG4gXG4gc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHtcbkBAIC0yMjczLDIxICsyMzAzLDE0IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0c3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnE7XG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnM7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xuLVx0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzO1xuK1x0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzO1xuIFxuIFx0dnMgPSBrdnphbGxvY19vYmooKnZzKTtcbiBcdGlmICghdnMpXG4gXHRcdGdvdG8gZXJyX3ZzO1xuIFx0dnMtXHUwMDNlaW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDtcbiBcbi1cdGlmIChudnFzIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9JT19WUSkge1xuLVx0XHRwcl9lcnIoXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nICVkLlxcblwiLCBudnFzLFxuLVx0XHQgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpO1xuLVx0XHRudnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7XG4tXHR9IGVsc2UgaWYgKG52cXMgPT0gMCkge1xuLVx0XHRwcl9lcnIoXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nIDEuXFxuXCIsIG52cXMpO1xuLVx0XHRudnFzID0gMTtcbi1cdH1cbitcdG52cXMgPSBSRUFEX09OQ0Uodmhvc3Rfc2NzaV9tYXhfaW9fdnFzKTtcbiBcdG52cXMgKz0gVkhPU1RfU0NTSV9WUV9JTztcbiBcbiBcdHZzLVx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxuQEAgLTIyOTUsNyArMjMxOCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0aWYgKCF2cy1cdTAwM2VvbGRfaW5mbGlnaHQpXG4gXHRcdGdvdG8gZXJyX2luZmxpZ2h0O1xuIFxuLVx0dnMtXHUwMDNldnFzID0ga21hbGxvY19vYmpzKCp2cy1cdTAwM2V2cXMsIG52cXMsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbitcdHZzLVx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcyk7XG4gXHRpZiAoIXZzLVx1MDAzZXZxcylcbiBcdFx0Z290byBlcnJfdnFzO1xuIFxuQEAgLTIzMzEsNyArMjM1NCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX2xvY2FsX3Zxczpcbi1cdGtmcmVlKHZzLVx1MDAzZXZxcyk7XG4rXHRrdmZyZWUodnMtXHUwMDNldnFzKTtcbiBlcnJfdnFzOlxuIFx0a2ZyZWUodnMtXHUwMDNlb2xkX2luZmxpZ2h0KTtcbiBlcnJfaW5mbGlnaHQ6XG5AQCAtMjM1Miw3ICsyMzc1LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2KTtcbiBcdGtmcmVlKHZzLVx1MDAzZWRldi52cXMpO1xuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbitcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIFx0a2ZyZWUodnMtXHUwMDNlb2xkX2luZmxpZ2h0KTtcbiBcdGt2ZnJlZSh2cyk7XG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjMzLjQ3NzQ4NzUyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzA0NTQ3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy92aG9zdC9zY3NpLmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhYm91dCBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIG1hbmFnZWQuIFRoZXkndmUgc3dhcHBlZCBvdXQgYG1vZHVsZV9wYXJhbV9uYW1lZGAgZm9yIGBtb2R1bGVfcGFyYW1fY2JgIGFuZCBpbnRyb2R1Y2VkIGEgY3VzdG9tIHNldHRlciwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLiBTbWFydCBtb3ZlLCB1c2luZyBhIGNhbGxiYWNrIGdpdmVzIG1vcmUgY29udHJvbC4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBSRUFEX09OQ0VgIG9uIGB2aG9zdF9zY3NpX21heF9pb192cXNgIOKAkyBnb29kIGZvciBtZW1vcnkgb3JkZXJpbmcsIGFuZCBtb3ZpbmcgdGhlIGJvdW5kcyBjaGVja2luZyB0byB0aGUgc2V0dGVyIGlzIHByb2JhYmx5IGNsZWFuZXIuIFRoZSBhbGxvY2F0aW9uIGNoYW5nZSwgbW92aW5nIGZyb20gYGttYWxsb2Nfb2Jqc2AgdG8gYGt2emFsbG9jX29ianNgIGZvciBgdnMtXHUwMDNldnFzYCBhbmQgdXNpbmcgYGt2ZnJlZWAgbm93LCB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBpbXByb3ZlbWVudDsgcHJldmVudGluZyBhbGxvY2F0aW9uIGZhaWx1cmVzIGZyb20gbGFyZ2UgYXJyYXlzIGlzIGFsd2F5cyBhIHdpbiwgYW5kIHRoZSB6ZXJvZWQgbWVtb3J5IGZyb20gYGt2emFsbG9jYCBtaWdodCBiZSBoZWxwZnVsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSBwYXRoIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgZnV6emFibGU/IGB2aG9zdF9zY3NpX29wZW5gIGlzIHRoZSBvcGVuIGNhbGxiYWNrIGZvciB0aGUgdmhvc3Qtc2NzaSBjaGFyYWN0ZXIgZGV2aWNlLCBzbyB0aGF0IG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGAvZGV2L3Zob3N0LXNjc2lgLiBUaGUgYG1heF9pb192cXNgIHBhcmFtZXRlciBpcyBhZGp1c3RhYmxlIHRocm91Z2ggc3lzZnMsIG9yIGF0IGJvb3QtdGltZSB3aGljaCBpcyBhbHNvIGhlbHBmdWwgZm9yIHRlc3RpbmcsIGFzc3VtaW5nIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgZm9yIGl0LiBUaGUgYWxsb2NhdGlvbiBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgY29tbW9ubHkgdXNlZCBwYXRoLlxuXG5MZXQgbWUgZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIHZob3N0LXNjc2kgbm93LiBJJ2xsIHVzZSBgZ2l0IGdyZXBgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDAuOTA3OTQ0NjE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTg3MDY2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdC9zY3NpLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDAuOTY3MTQyNjQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MjExMDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB2aG9zdCBEcml2ZXIgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgdmhvc3QgZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBnZW5lcmFsbHkgYnJvdWdodCB0b2dldGhlci4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHJ1bGVzIGZvciBidWlsZGluZyB0aGUgdmhvc3Qga2VybmVsIG1vZHVsZSwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3IgbGlicmFyaWVzLCBwb3RlbnRpYWxseSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgcHJvYmFibHkgc29tZSBjbHVlcyBhYm91dCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdmFyaWFibGVzIGRlZmluaW5nIHNvdXJjZSBmaWxlcywgaW5jbHVkZSBwYXRocywgY29tcGlsZXIgZmxhZ3MsIGFuZCBsaW5raW5nIGNvbW1hbmRzLiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGJ1aWxkIGlzc3VlcywgbW9kaWZ5aW5nIHRoZSBkcml2ZXIsIG9yIGV2ZW4gb3B0aW1pemluZyBpdHMgcGVyZm9ybWFuY2UuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIHRoaXMgTWFrZWZpbGUgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDo0NC4yMDkyNjExMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICs9IHZob3N0X25ldC5vXFxuICAgMzpcXHR2aG9zdF9uZXQteSA6PSBuZXQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgKz0gdmhvc3Rfc2NzaS5vXFxuICAgNjpcXHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgKz0gdmhvc3RfdnNvY2sub1xcbiAgIDk6XFx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSArPSB2cmluZ2gub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgKz0gdmhvc3RfdmRwYS5vXFxuICAxNDpcXHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19WSE9TVClcXHQrPSB2aG9zdC5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgKz0gdmhvc3RfaW90bGIub1xcbiAgMTk6XFx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ0OjQ0LjIwOTMzNTcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMjk0MDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50IGFuZCBzcGVjaWZpY2FsbHkgd29ya2luZyB3aXRoIHZob3N0LXNjc2k6XG5cbioqRGVidWdnaW5nIGEgVkhPU1RfU0NTSSBDb25maWd1cmF0aW9uIElzc3VlKipcblxuQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYENPTkZJR19WSE9TVF9TQ1NJYC4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgc29tZXRoaW5nIGlzbid0IHF1aXRlIHJpZ2h0IHdpdGggaXRzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3Mgbm90IGJlaGF2aW5nIGFzIGV4cGVjdGVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgbG9naWNhbCBhbmQgaW5ncmFpbmVkOiBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgcmVsYXRlZCB0byB0aGlzIG1vZHVsZS4gSSBuZWVkIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGBWSE9TVF9TQ1NJYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBvc3NpYmxlIGJ1aWxkIGNvbmRpdGlvbnMuIEJ5IGV4YW1pbmluZyB0aGF0IGZpbGUsIEkgd2lsbCBsaWtlbHkgZ2FpbiBpbnNpZ2h0IGludG8gd2h5IHRoaXMgb3B0aW9uIGlzbid0IGF2YWlsYWJsZSBvciBiZWhhdmluZyBwcm9wZXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDcuMzMyMjc5NTE4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzQ2NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9TQ1NJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NDcuMzkxMDQ5MDA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyNzYzNDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZob3N0IEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHZob3N0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgbGluZSA0Ni4gSSdtIGd1ZXNzaW5nIHRoYXQgcGFydGljdWxhciBzZWN0aW9uIGhvbGRzIHNvbWUgY3J1Y2lhbCBzZXR0aW5ncywgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgY29yZSB2aG9zdCBmdW5jdGlvbmFsaXR5IG9yIG1heWJlIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSB0aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBUaW1lIHRvIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0IHRoaXMgc2VjdGlvbiByZXZlYWxzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgbmV3IGZlYXR1cmUgb3IgYW4gaW1wb3J0YW50IGNsYXJpZmljYXRpb24gb2Ygc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IG91ciB2aG9zdCBpbXBsZW1lbnRhdGlvbiBiZWhhdmVzLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDo1MC43MTg2ODYyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxcbiAgNDE6XFx0XFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA0NDpcXHRcXHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBWSE9TVF9TQ1NJXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNDk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA1MDpcXHRcXHRzZWxlY3QgU0dfUE9PTFxcbiAgNTE6XFx0XFx0ZGVmYXVsdCBuXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHRTYXkgTSBoZXJlIHRvIGVuYWJsZSB0aGUgdmhvc3Rfc2NzaSBUQ00gZmFicmljIG1vZHVsZVxcbiAgNTQ6XFx0XFx0Zm9yIHVzZSB3aXRoIHZpcnRpby1zY3NpIGd1ZXN0c1xcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgVkhPU1RfVlNPQ0tcXG4gIDU3OlxcdFxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA1OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NTAuNzE4NzcyMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0ODM0NTUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBWSE9TVF9TQ1NJIE1vZHVsZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYFZIT1NUX1NDU0lgIG1vZHVsZS4gVGhlIGFyY2hpdGVjdHVyZSBoZXJlIGlzIHRoYXQgaXQgbGVhbnMgb24gYFRBUkdFVF9DT1JFYCDigJMgdGhhdCdzIHRoZSBnZW5lcmljIHRhcmdldCBjb3JlIOKAkyBhbmQgYWxzbyBgRVZFTlRGRGAuIFJpZ2h0LCBzdGFuZGFyZCBkZXBlbmRlbmNpZXMuIE5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoZXJlIGRvIHdlIHN0YXJ0IGZ1enppbmc/XG5cblRoZSBwYXRjaCBoaXN0b3J5IGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AsIGB2aG9zdF9zY3NpX29wZW5gLCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuICBgdmhvc3Rfc2NzaV9vcGVuYCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgdG8gbWUgYXMgdGhlICpvcGVuKiBjYWxsYmFjay4gIFRoZW4gYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gQWxyaWdodCwgc28gd2UgaGF2ZSBzb21lIGhvb2tzIGZvciBlbnRyeSBhbmQgY29udHJvbC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIHNvIGEgZnV6emluZyBjYW1wYWlnbiBzaG91bGQgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NDo1Ny4zNjcxMjA5MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjY1ODE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MjI0OD1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgdTY0IGZlYXR1cmVzKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjMwMC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzAxOnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMDIte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDY0LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ2NTpcXHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9zY3NpX29wZW4sXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ2Ni1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDQ6NTcuNjUzNzg2Mzk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MjE1MDcyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgdmhvc3Qtc2NzaSBNb2R1bGUgUGFyYW1ldGVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgdGhlc2UgYXJlIGNsZWFybHkgZmlsZSBvcGVyYXRpb25zLCByaWdodD8gQW5kIEkgc2VlIHRoYXQgYG1heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciB0aGF0IGNhbiBiZSB0d2Vha2VkIHZpYSBzeXNmcy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCBpdCBpcyEgVGhlIHBhdGNoIEknbSBsb29raW5nIGF0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBBcHBhcmVudGx5LCBzb21lb25lIGNvdWxkIHNldCBgbWF4X2lvX3Zxc2AgdG8gYW4gdW5yZWFzb25hYmx5IGhpZ2ggdmFsdWUsIGFuZCBgdmhvc3Rfc2NzaV9vcGVuYCB3b3VsZCBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgbWFzc2l2ZSBhcnJheSB1c2luZyBga21hbGxvY19vYmpzYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgaXNzdWVzLiBUaGUgZml4IG1vdmVzIHRvIGBrdnphbGxvY19vYmpzYCBhbmQgaW5jbHVkZXMgYm91bmRzIGNoZWNraW5nIGluIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRlci5cblxuV2FpdCBhIHNlY29uZCwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIHRoZSBhY3R1YWwgbW9kdWxlIHBhcmFtZXRlciBzZXR0ZXIgZnVuY3Rpb24sIGlzbid0IGl0PyBUaGF0IG1lYW5zIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIHRvbyBieSB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS92aG9zdF9zY3NpL3BhcmFtZXRlcnMvbWF4X2lvX3Zxc2AuIFBlcmZlY3QhIFRoaXMgbWFrZXMgYHZob3N0X3Njc2lfb3BlbmAgZXZlbiBtb3JlIHJlYWNoYWJsZSBhbmQgZGVmaW5pdGVseSBmdXp6YWJsZS5cblxuU28gdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBpbXBvcnRhbnRseSwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLlxuXG5BcyBmb3IgY29uZmlncywgaXQgbG9va3MgbGlrZSBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgYXJlIHRoZSBrZXkgb25lcyBoZXJlLiBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDA2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ1OjA0LjI3NTI5NjkzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODIzNTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEFSR0VUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnOjM6bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBUYXJnZXQgQ29yZSBNb2QgKFRDTSkgYW5kIENvbmZpZ0ZTIEluZnJhc3RydWN0dXJlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NTowNi4zOTM1Mzg5NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MDM0NjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIHRoZSB0YXJnZXQgaXMgYFRBUkdFVF9DT1JFYC4gR290IGl0LiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgbmVlZCB0byBjaGVjayBpZiBpdCdzIHN0YXRpYy4gWWVwLCBpdCBpcy4gSG1tLCBidXQgd2FpdCBhIHNlY29uZC4uLiBpdCdzIGEgY2FsbGJhY2sgZm9yIGBtb2R1bGVfcGFyYW1fY2JgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IFN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhhdCBieSB3cml0aW5nIHRvIHRoZSBzeXNmcyBmaWxlLlxuXG5Ob3csIEkgcmVjYWxsIHRoZSBndWlkYW5jZSB0aGF0IHNwZWNpZmljYWxseSBtZW50aW9ucyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIHN0YXRpYyBvbmVzLCBiZWNhdXNlIGlubGluZWQgZnVuY3Rpb25zIGRvbid0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0IGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBpcyBzdGF0aWMsICpob3dldmVyKiBpdHMgYWRkcmVzcyBpcyB0YWtlbiB3aXRoaW4gYHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcGAuIFNvLCBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGF0J3MgZ29vZC5cblxuQWxzbywgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgIGFyZSBhbHNvIHN0YXRpYywgYnV0IHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gaW4gYHZob3N0X3Njc2lfZm9wc2AuIEkgdGhpbmsgSSB3aWxsIGxpc3QgYWxsIHRoZXNlOlxuXG5UaGUgb25lcyBJIHdhbnQgdG8gZm9jdXMgb24gYXJlOiBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGB2aG9zdF9zY3NpX3JlbGVhc2VgIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2BcblxuXG4iLCJJbnB1dFRva2VucyI6NjczNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToxMS45NjM4ODg2NDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzc2NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz00Mjg9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NDUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDQ2OnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NDcte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDg3LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ4ODpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODkte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NTAwPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZHJvcF9jbWRzKHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA2LVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCB0LCBsbG5vZGUsIHR2Y19jb21wbGV0aW9uX2xpc3QpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NTA3OlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFxcdTAwMjZjbWQtXFx1MDAzZXR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTUwOC19XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNTA5LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjUxMDpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfY21kKHN0cnVjdCBzZV9jbWQgKnNlX2NtZClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy01MTEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9NzE2PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfY29tcGxldGVfY21kX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NjQtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NzY1OlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKHNlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNzY2LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTEzMTQ9dmhvc3Rfc2NzaV9oYW5kbGVfdnEoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0OTUtXFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIGFsbG9jIHJlY3YgaW92c1xcXFxuXFxcIik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ5NjpcXHRcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDk3LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMi1cXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1MDM6XFx0XFx0XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXFx1MDAyNmNtZC1cXHUwMDNldHZjX3NlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwNC1cXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MTgtXFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIG1hcCBpb3YgdG8gc2dsXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTE5OlxcdFxcdFxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFxcdTAwMjZjbWQtXFx1MDAzZXR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1MjAtXFx0XFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNTc4PXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdG1mX3Jlc3Bfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTUtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTU5NjpcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTctfVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTU5OT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3RtZl9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2MDktXFx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcXHUwMDI2dG1mLVxcdTAwM2V2d29yaykpXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYxMDpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2MTEtfVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTYxND12aG9zdF9zY3NpX2hhbmRsZV90bWYoc3RydWN0IHZob3N0X3Njc2kgKnZzLCBzdHJ1Y3Qgdmhvc3Rfc2NzaV90cGcgKnRwZyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTItXFx0XFx0XFx0cHJfZXJyKFxcXCJ2aG9zdF9zY3NpIHRtZiBsb2cgYWxsb2NhdGlvbiBlcnJvclxcXFxuXFxcIik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY1MzpcXHRcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NTQtXFx0XFx0XFx0Z290byBzZW5kX3JlamVjdDtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NjEtXFx0XFx0XFx0ICAgICAgVEFSR0VUX1NDRl9BQ0tfS1JFRikgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTY2MjpcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NjMtXFx0XFx0Z290byBzZW5kX3JlamVjdDtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzMDE9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzY1LVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzNjY6c3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM2Ny17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDYxLVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NjI6XFx0LnJlbGVhc2UgICAgICAgID0gdmhvc3Rfc2NzaV9yZWxlYXNlLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NjMtXFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3Rfc2NzaV9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI5NDU9c3RhdGljIGNvbnN0IHN0cnVjdCB0YXJnZXRfY29yZV9mYWJyaWNfb3BzIHZob3N0X3Njc2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjk1My1cXHQudHBnX2NoZWNrX3Byb3RfZmFicmljX29ubHlcXHQ9IHZob3N0X3Njc2lfY2hlY2tfcHJvdF9mYWJyaWNfb25seSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyOTU0OlxcdC5yZWxlYXNlX2NtZFxcdFxcdFxcdD0gdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTU1LVxcdC5jaGVja19zdG9wX2ZyZWVcXHRcXHQ9IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToxMi4wMTcyNzA2MjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4OTAwMjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0X3Njc2lfcmVsZWFzZSBGdW5jdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB2aG9zdF9zY3NpX3JlbGVhc2VgIGlzIGluZGVlZCBhIGZpbGUgb3BlcmF0aW9uLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBzZXR0aW5ncyB0aGF0IGFyZSByZXF1aXJlZCBvciB0aGF0IG1pZ2h0IGJlIG1pc3NpbmcgdGhhdCB3b3VsZCBiZSByZWxldmFudCB0byB3aGF0IEknbSBkb2luZy4gTG9va2luZyBpbnRvIHRoaXMsIEkgc2VlIHRoYXQgYFZIT1NUX1NDU0lgIGRlcGVuZHMgb24gYm90aCBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAuIGBFVkVOVEZEYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQncyBwcm9iYWJseSBub3QgYSBjb25jZXJuLiBOb3csIGBUQVJHRVRfQ09SRWAgbWFwcyBkaXJlY3RseSB0byBgQ09ORklHX1RBUkdFVF9DT1JFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGVuYWJsZWQuIEJ1dCBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVxdWlyZW1lbnRzLlxuXG5PaCwgcmlnaHQsIEkgc2VlIHRoYXQgYFZIT1NUYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gYFZIT1NUX1NDU0lgIGlzIGNob3Nlbi4gVGhhdOKAmXMgaGVscGZ1bDsgbGVzcyB0byBtYW5hZ2UuIEFsc28sIGBTR19QT09MYCBpcyBzZWxlY3RlZCBieSBgVkhPU1RfU0NTSWAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIHNob3VsZCByZW1lbWJlciB0aGF0IGZvciBsYXRlci5cblxuSSBzdXBwb3NlIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGFnYWluLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIzOjQ1OjE2LjAwNjI3NjUzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDY6XFx0Y29uZmlnIFZIT1NUX1NDU0lcXG4gIDQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRSBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA0OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDUwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuICA1MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXFxuICA1NDpcXHRcXHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXFxuICA1NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjM6NDU6MTYuMDA2MzYwNDQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDA5NTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gVkhPU1RfU0NTSSBhbmQgVEFSR0VUX0NPUkUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBhcmUgZW5hYmxlZCBpbiBteSBjb25maWd1cmF0aW9uLiAgVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwIGlzIHRvIGludmVzdGlnYXRlIHRoZSBgdmhvc3Rfc2NzaWAgbW9kdWxlJ3MgZnVuY3Rpb25hbGl0eS4gIEZpcnN0LCBJJ2xsIHNlZSBpZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgaXMgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuIEFoLCBpdCdzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gVGhhdCdzIGdvb2Q7IFN5emthbGxlciBjYW4gZnV6eiB0aGF0IGRpcmVjdGx5IGJ5IHdyaXRpbmcgdG8gYC9zeXMvbW9kdWxlL3Zob3N0X3Njc2kvcGFyYW1ldGVycy9tYXhfaW9fdnFzYC4gIExldCBtZSBxdWlja2x5IHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgYmVzaWRlcyB0aGUgcGFyYW1ldGVyIHNldHRpbmcuIFllcywgSSBzZWUgdGhhdCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIHRoZSBvdGhlciBwcmltYXJ5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSSdsbCBkZWZpbml0ZWx5IGFkZCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBzcGVsbGluZyBhbmQgY2FzZSBvZiB0aGVzZSBmdW5jdGlvbnMuICBTbywgd2UndmUgZ290IGB2aG9zdF9zY3NpX29wZW5gLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYC4gIFBlcmZlY3QuXG5cbkZpbmFsbHksIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToyMS4zMDczMTk3NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDE1MDI3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIxMj1zdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4O1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxMy1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTQ6c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTUtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzODpcXHQuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzktXFx0LmdldCA9IHBhcmFtX2dldF91aW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToyMS40ODE0NzU4MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ1Nzk3MjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2aG9zdC1zY3NpIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIEl0J3MgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYG1heF9pb192cXNgIHBhcmFtZXRlci4gSSBzZWUgdGhhdCB0aGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBhIGxhcmdlIHZhbHVlIHdhcyBzZXQgZm9yIGBtYXhfaW9fdnFzYCwgdGhlIGB2aG9zdF9zY3NpX29wZW5gIGZ1bmN0aW9uIHdvdWxkIGF0dGVtcHQgdG8gYWxsb2NhdGUgYSBtYXNzaXZlIGFycmF5IHVzaW5nIGBrbWFsbG9jX29ianNgLiBDbGVhcmx5LCB0aGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIG90aGVyIHVucHJlZGljdGFibGUgYmVoYXZpb3IsIGFuZCB3ZSB3YW50IHRvIGF2b2lkIHRoYXQuXG5cblRoZSBzb2x1dGlvbiBpcyBjbGV2ZXIgYW5kIHNvdW5kLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1c3RvbSBzZXR0ZXIsIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCwgd2hpY2ggd2lsbCBub3cgdmFsaWRhdGUgdGhlIGlucHV0IGZvciBgbWF4X2lvX3Zxc2AuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gIEZ1cnRoZXJtb3JlLCB0aGUgYWxsb2NhdGlvbiB3aXRoaW4gYHZob3N0X3Njc2lfb3BlbmAgaXMgYmVpbmcgY2hhbmdlZCBmcm9tIGBrbWFsbG9jX29ianNgIHRvIGBrdnphbGxvY19vYmpzYC4gVGhpcyBzd2l0Y2ggaXMgc2lnbmlmaWNhbnQuIGBrdnphbGxvY19vYmpzYCBpcyBhIGtlcm5lbCBBUEkgY2FsbCB0aGF0IHNob3VsZCBwcmV2ZW50IHRoZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHdlIG1pZ2h0IGhhdmUgc2VlbiB3aXRoIHRoZSBwcmV2aW91cyBjYWxsLCBwYXJ0aWN1bGFybHkgZm9yIHRoZXNlIGxhcmdlciB2YWx1ZXMuIFRoZXNlIGFyZSBkaXJlY3RseSBvYnNlcnZhYmxlIGNoYW5nZXMgdG8gY29kZSB0aGF04oCZcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCBgL2Rldi92aG9zdC1zY3NpYC5cblxuSSdtIG5vdGluZyB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLCBgdmhvc3Rfc2NzaV9vcGVuYCwgYW5kIHdoaWxlIEknbSBhdCBpdCwgSSdsbCB0YWtlIGEgbG9vayBhdCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBhcyB3ZWxsLCBqdXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGFsaWducyB3aXRoIHRoZSBhbGxvY2F0aW9uIGNoYW5nZXMuIEl0J3MgYSB1c2VmdWwgZXhlcmNpc2UgdG8gc2VlIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIG9mIHRoZSBvYmplY3QgaW52b2x2ZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggZm9yIHRoZSBpc3N1ZSBhbmQgd2lsbCBsaWtlbHkgbmVlZCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgZW5hYmxlZCBmb3IgdGVzdGluZy4gTGV0J3MgY2FsbCB0aGlzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDM1LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMzo0NToyOC45Mzk0NTEwNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDIyMDkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBJdCBhZGRzIGEgY3VzdG9tIHNldHRlciBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGFuZCBjaGFuZ2VzIHRoZSBhbGxvY2F0aW9uIG9mIHZpcnRxdWV1ZXMgaW4gYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBrdnphbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyBmb3IgbGFyZ2UgdmFsdWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlICh2aWEgc3lzZnMgYW5kIC9kZXYvdmhvc3Qtc2NzaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzXCIsXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaW4gdGhlIHZob3N0LXNjc2kgZHJpdmVyLiBJdCBhZGRzIGEgY3VzdG9tIHNldHRlciBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGFuZCBjaGFuZ2VzIHRoZSBhbGxvY2F0aW9uIG9mIHZpcnRxdWV1ZXMgaW4gYHZob3N0X3Njc2lfb3BlbmAgdG8gdXNlIGBrdnphbGxvY19vYmpzYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX29ianNgIHRvIHByZXZlbnQgYWxsb2NhdGlvbiBmYWlsdXJlcyBmb3IgbGFyZ2UgdmFsdWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlICh2aWEgc3lzZnMgYW5kIC9kZXYvdmhvc3Qtc2NzaSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrqjrn[1] Phase: Succeeded StartedAt: 2026-08-02 23:45:40 +0000 UTC FinishedAt: 2026-08-02 23:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 23:45:40 +0000 UTC FinishedAt: 2026-08-02 23:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2] Phase: Succeeded StartedAt: 2026-08-02 23:45:40 +0000 UTC FinishedAt: 2026-08-03 01:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 23:45:40 +0000 UTC FinishedAt: 2026-08-03 01:11:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 23:45:40 +0000 UTC FinishedAt: 2026-08-02 23:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 23:45:40 +0000 UTC FinishedAt: 2026-08-02 23:45:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrqjrn/series-workflowrqjrn-convert-artifact-2721991107/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 23:45:50 +0000 UTC FinishedAt: 2026-08-03 00:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 23:45:50 +0000 UTC FinishedAt: 2026-08-03 00:03:28 +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:*1f6a0682-041f-4f4a-97c0-895c1bda27fc,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-workflowrqjrn/series-workflowrqjrn-convert-artifact-2721991107/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": "73c3e418-4b67-4c01-a97e-604a5b12b4aa", "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-workflowrqjrn/series-workflowrqjrn-build-action-3482436657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 23:45:50 +0000 UTC FinishedAt: 2026-08-03 00:03:17 +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:*1f6a0682-041f-4f4a-97c0-895c1bda27fc,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-workflowrqjrn/series-workflowrqjrn-convert-artifact-2721991107/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": "73c3e418-4b67-4c01-a97e-604a5b12b4aa", "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-workflowrqjrn/series-workflowrqjrn-build-action-3482436657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 00:03:28 +0000 UTC FinishedAt: 2026-08-03 00:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 00:03:28 +0000 UTC FinishedAt: 2026-08-03 00:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 00:03:28 +0000 UTC FinishedAt: 2026-08-03 00:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 00:03:28 +0000 UTC FinishedAt: 2026-08-03 00:03:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrqjrn/series-workflowrqjrn-convert-artifact-2317877626/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 00:03:40 +0000 UTC FinishedAt: 2026-08-03 00:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 00:03:40 +0000 UTC FinishedAt: 2026-08-03 00:05:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*73c3e418-4b67-4c01-a97e-604a5b12b4aa,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-workflowrqjrn/series-workflowrqjrn-build-action-3482436657/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-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 00:05:53 +0000 UTC FinishedAt: 2026-08-03 00:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 00:05:53 +0000 UTC FinishedAt: 2026-08-03 00:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 00:05:53 +0000 UTC FinishedAt: 2026-08-03 00:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 00:05:53 +0000 UTC FinishedAt: 2026-08-03 00:34:19 +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:*1f6a0682-041f-4f4a-97c0-895c1bda27fc,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-workflowrqjrn/series-workflowrqjrn-convert-artifact-2317877626/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": "83605fdf-e8a8-4c18-bb9b-0aa6c40ca590", "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-workflowrqjrn/series-workflowrqjrn-build-action-1283629278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 00:05:53 +0000 UTC FinishedAt: 2026-08-03 00:34:09 +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:*1f6a0682-041f-4f4a-97c0-895c1bda27fc,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-workflowrqjrn/series-workflowrqjrn-convert-artifact-2317877626/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": "83605fdf-e8a8-4c18-bb9b-0aa6c40ca590", "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-workflowrqjrn/series-workflowrqjrn-build-action-1283629278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 00:34:19 +0000 UTC FinishedAt: 2026-08-03 00:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 00:34:19 +0000 UTC FinishedAt: 2026-08-03 00:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 00:34:19 +0000 UTC FinishedAt: 2026-08-03 00:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 00:34:19 +0000 UTC FinishedAt: 2026-08-03 00:36:02 +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:*83605fdf-e8a8-4c18-bb9b-0aa6c40ca590,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-workflowrqjrn/series-workflowrqjrn-build-action-1283629278/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-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 00:36:12 +0000 UTC FinishedAt: 2026-08-03 01:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 00:36:12 +0000 UTC FinishedAt: 2026-08-03 01:11:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"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:*73c3e418-4b67-4c01-a97e-604a5b12b4aa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83605fdf-e8a8-4c18-bb9b-0aa6c40ca590,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-workflowrqjrn/series-workflowrqjrn-build-action-3482436657/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-workflowrqjrn/series-workflowrqjrn-build-action-1283629278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 00:36:12 +0000 UTC FinishedAt: 2026-08-03 00:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 00:36:12 +0000 UTC FinishedAt: 2026-08-03 00:36:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"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-workflowrqjrn/series-workflowrqjrn-convert-artifact-281991343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 00:36:12 +0000 UTC FinishedAt: 2026-08-03 00:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 00:36:12 +0000 UTC FinishedAt: 2026-08-03 00:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 00:36:12 +0000 UTC FinishedAt: 2026-08-03 00:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 00:36:33 +0000 UTC FinishedAt: 2026-08-03 01:11:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrqjrn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_set_max_io_vqs","vhost_scsi_open","vhost_scsi_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2d2338c93da79b3bfe4b6099a931d9468d539952","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"fa7f9910-c99c-4a6d-89f5-428bf6ef46ec","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 00:36:33 +0000 UTC FinishedAt: 2026-08-03 01:10:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*73c3e418-4b67-4c01-a97e-604a5b12b4aa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*83605fdf-e8a8-4c18-bb9b-0aa6c40ca590,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-workflowrqjrn/series-workflowrqjrn-build-action-3482436657/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-workflowrqjrn/series-workflowrqjrn-build-action-1283629278/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-workflowrqjrn/series-workflowrqjrn-convert-artifact-281991343/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,}