Name: series-workflowjkqzz Phase: Succeeded StartedAt: 2026-06-22 03:12:54 +0000 UTC FinishedAt: 2026-06-22 04:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[0] Phase: Succeeded StartedAt: 2026-06-22 03:12:54 +0000 UTC FinishedAt: 2026-06-22 03:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 03:12:54 +0000 UTC FinishedAt: 2026-06-22 03:20:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "d83bae63-48e5-4a70-a0f0-c1b92052815d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vcpu_ioctl_interrupt", "dmsintc_deliver_msi_to_vcpu", "eiointc_update_irq", "ipi_set", "ipi_clear" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUmIzM0OywKICAgICYjMzQ7ZWlvaW50Y191cGRhdGVfaXJxJiMzNDssCiAgICAmIzM0O2lwaV9zZXQmIzM0OywKICAgICYjMzQ7aXBpX2NsZWFyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVjM2U4NjkzZDlhZmQ3ZjU1YWE2ZjU0OTNmMjQzNGNlNTRmMzFjM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwMzoxODoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li5hNzI2YzZjYWZlYzMzYSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5AQCAtNDcsNyAmIzQzOzQ3LDYgQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpXG4ge1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XG4gXHRzdHJ1Y3QgZG1zaW50Y19zdGF0ZSAqZHMgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZG1zaW50Y19zdGF0ZTtcbiBcbiBcdGlmICghbGV2ZWwpXG5AQCAtNTcsOSAmIzQzOzU2LDExIEBAIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0aWYgKCFkcylcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHR2Y3B1X2lycS5pcnEgPSBJTlRfQVZFQztcbiYjNDM7XHRpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRzZXRfYml0KHZlY3RvciwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZkcy1cdTAwM2V2ZWN0b3JfbWFwKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4mIzQzO1x0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfQVZFQyk7XG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uYzZhMzA5Njk1MDMwMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuQEAgLTE3LDcgJiM0MzsxNyw4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxuIFx0XHRpZiAoIShzLVx1MDAzZXN0YXR1cyBcdTAwMjYgQklUKEVJT0lOVENfRU5BQkxFX0lOVF9FTkNPREUpKSkge1xuIFx0XHRcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xuIFx0XHRcdGlwbnVtID0gaXBudW0gXHUwMDNjIDQgPyBpcG51bSA6IDA7XG4tXHRcdH1cbiYjNDM7XHRcdH0gZWxzZSBpZiAoaXBudW0gXHUwMDNlPSBMT09OR1NPTl9JUF9OVU0pXG4mIzQzO1x0XHRcdGlwbnVtID0gMDtcbiBcbiBcdFx0Y3B1aWQgPSAoKHU4ICopcy1cdTAwM2Vjb3JlbWFwKVtpcnFdO1xuIFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXHUwMDNla3ZtLCBjcHVpZCk7XG5AQCAtMzYsMTMgJiM0MzszNywxMyBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4ge1xuIFx0aW50IGlwbnVtLCBjcHUsIGZvdW5kO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XG4gXG4gXHRpcG51bSA9IChzLVx1MDAzZWlwbWFwIFx1MDAzZVx1MDAzZSAoaXJxIC8gMzIgKiA4KSkgXHUwMDI2IDB4ZmY7XG4gXHRpZiAoIShzLVx1MDAzZXN0YXR1cyBcdTAwMjYgQklUKEVJT0lOVENfRU5BQkxFX0lOVF9FTkNPREUpKSkge1xuIFx0XHRpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTtcbiBcdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbi1cdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuJiM0MztcdFx0aXBudW0gPSAwO1xuIFxuIFx0Y3B1ID0gcy1cdTAwM2Vzd19jb3JlbWFwW2lycV07XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXHUwMDNla3ZtLCBjcHUpO1xuQEAgLTY3LDggJiM0Mzs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4gXHRpZiAoZm91bmQgXHUwMDNjIEVJT0lOVENfSVJRUylcbiBcdFx0cmV0dXJuOyAvKiBvdGhlciBpcnEgaXMgaGFuZGxpbmcsIG5lZWRuJiMzOTt0IHVwZGF0ZSBwYXJlbnQgaXJxICovXG4gXG4tXHR2Y3B1X2lycS5pcnEgPSBsZXZlbCA/IChJTlRfSFdJMCAmIzQzOyBpcG51bSkgOiAtKElOVF9IV0kwICYjNDM7IGlwbnVtKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4mIzQzO1x0aWYgKGxldmVsKVxuJiM0MztcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIElOVF9IV0kwICYjNDM7IGlwbnVtKTtcbiYjNDM7XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZWlvaW50Y191cGRhdGVfc3dfY29yZW1hcChzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmI3NzQ0ZGNiZGQ4ZTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG5AQCAtMTAsMTYgJiM0MzsxMCwxNSBAQFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyB8PSBkYXRhO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmICgoc3RhdHVzID09IDApIFx1MDAyNlx1MDAyNiBkYXRhKSB7XG4tXHRcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xuLVx0XHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2aXJxKTtcbiYjNDM7XHRcdGt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XG4mIzQzO1x0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbkBAIC00MCwxNiAmIzQzOzM5LDE1IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXHUwMDI2PSB+ZGF0YTtcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmIChzdGF0dXMgPT0gMCkge1xuLVx0XHRpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuJiM0MztcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIExBUkNIX0lOVF9JUEkpO1xuJiM0MztcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xuaW5kZXggMjBjMjA3ZDgwZTMxYWUuLjgyYzk2ODU0ZGY5M2UxIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xuQEAgLTE0NjUsNiAmIzQzOzE0NjUsOSBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcbiBcdGlmICh2ZWN0b3IgXHUwMDNlPSBFWENDT0RFX0lOVF9OVU0pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkgXHUwMDI2XHUwMDI2ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xNDcyLDEwICYjNDM7MTQ3NSw4IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuIFx0XHRrdm1fcXVldWVfaXJxKHZjcHUsIGludHIpO1xuIFx0ZWxzZSBpZiAoaW50ciBcdTAwM2MgMClcbiBcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTtcbi1cdGVsc2Uge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBpbnZhbGlkIGludGVycnVwdCBpb2N0bCAlZFxcblwmIzM0OywgX19mdW5jX18sIGlycS1cdTAwM2VpcnEpO1xuJiM0MztcdGVsc2VcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUmIzM0OywKICAgICYjMzQ7ZWlvaW50Y191cGRhdGVfaXJxJiMzNDssCiAgICAmIzM0O2lwaV9zZXQmIzM0OywKICAgICYjMzQ7aXBpX2NsZWFyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWMzZTg2OTNkOWFmZDdmNTVhYTZmNTQ5M2YyNDM0Y2U1NGYzMWMzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDAzOjE4OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jCmluZGV4IGRlMjU3MzVjZTAzOTQ2Li5hNzI2YzZjYWZlYzMzYSAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYwpAQCAtNDcsNyAmIzQzOzQ3LDYgQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpCiB7Ci0Jc3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7CiAJc3RydWN0IGRtc2ludGNfc3RhdGUgKmRzID0gJmFtcDt2Y3B1LSZndDthcmNoLmRtc2ludGNfc3RhdGU7CiAKIAlpZiAoIWxldmVsKQpAQCAtNTcsOSAmIzQzOzU2LDExIEBAIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLAogCWlmICghZHMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7CiYjNDM7CWlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXNldF9iaXQodmVjdG9yLCAodW5zaWduZWQgbG9uZyAqKSZhbXA7ZHMtJmd0O3ZlY3Rvcl9tYXApOwotCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO3ZjcHVfaXJxKTsKJiM0MzsJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfQVZFQyk7CiAJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jCmluZGV4IDJiMTQ0ODVkMTRhNzA4Li5jNmEzMDk2OTUwMzAzNCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYwpAQCAtMTcsNyAmIzQzOzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpCiAJCWlmICghKHMtJmd0O3N0YXR1cyAmYW1wOyBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7CiAJCQlpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTsKIAkJCWlwbnVtID0gaXBudW0gJmx0OyA0ID8gaXBudW0gOiAwOwotCQl9CiYjNDM7CQl9IGVsc2UgaWYgKGlwbnVtICZndDs9IExPT05HU09OX0lQX05VTSkKJiM0MzsJCQlpcG51bSA9IDA7CiAKIAkJY3B1aWQgPSAoKHU4ICopcy0mZ3Q7Y29yZW1hcClbaXJxXTsKIAkJdmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChzLSZndDtrdm0sIGNwdWlkKTsKQEAgLTM2LDEzICYjNDM7MzcsMTMgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKQogewogCWludCBpcG51bSwgY3B1LCBmb3VuZDsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7CiAKIAlpcG51bSA9IChzLSZndDtpcG1hcCAmZ3Q7Jmd0OyAoaXJxIC8gMzIgKiA4KSkgJmFtcDsgMHhmZjsKIAlpZiAoIShzLSZndDtzdGF0dXMgJmFtcDsgQklUKEVJT0lOVENfRU5BQkxFX0lOVF9FTkNPREUpKSkgewogCQlpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTsKIAkJaXBudW0gPSBpcG51bSAmbHQ7IDQgPyBpcG51bSA6IDA7Ci0JfQomIzQzOwl9IGVsc2UgaWYgKGlwbnVtICZndDs9IExPT05HU09OX0lQX05VTSkKJiM0MzsJCWlwbnVtID0gMDsKIAogCWNwdSA9IHMtJmd0O3N3X2NvcmVtYXBbaXJxXTsKIAl2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtJmd0O2t2bSwgY3B1KTsKQEAgLTY3LDggJiM0Mzs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiAJaWYgKGZvdW5kICZsdDsgRUlPSU5UQ19JUlFTKQogCQlyZXR1cm47IC8qIG90aGVyIGlycSBpcyBoYW5kbGluZywgbmVlZG4mIzM5O3QgdXBkYXRlIHBhcmVudCBpcnEgKi8KIAotCXZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICYjNDM7IGlwbnVtKSA6IC0oSU5UX0hXSTAgJiM0MzsgaXBudW0pOwotCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO3ZjcHVfaXJxKTsKJiM0MzsJaWYgKGxldmVsKQomIzQzOwkJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWVsc2UKJiM0MzsJCWt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMKaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmI3NzQ0ZGNiZGQ4ZTNkIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwpAQCAtMTAsMTYgJiM0MzsxMCwxNSBAQAogc3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpCiB7CiAJdWludDMyX3Qgc3RhdHVzOwotCXN0cnVjdCBrdm1faW50ZXJydXB0IGlycTsKIAogCXNwaW5fbG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgfD0gZGF0YTsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmICgoc3RhdHVzID09IDApICZhbXA7JmFtcDsgZGF0YSkgewotCQlpcnEuaXJxID0gTEFSQ0hfSU5UX0lQSTsKLQkJa3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsICZhbXA7aXJxKTsKJiM0MzsJCWt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKQpAQCAtNDAsMTYgJiM0MzszOSwxNSBAQCBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpCiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKQogewogCXVpbnQzMl90IHN0YXR1czsKLQlzdHJ1Y3Qga3ZtX2ludGVycnVwdCBpcnE7CiAKIAlzcGluX2xvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgJmFtcDs9IH5kYXRhOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmIChzdGF0dXMgPT0gMCkgewotCQlpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7Ci0JCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO2lycSk7CiYjNDM7CQlrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwppbmRleCAyMGMyMDdkODBlMzFhZS4uODJjOTY4NTRkZjkzZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwpAQCAtMTQ2NSw2ICYjNDM7MTQ2NSw5IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKQogCWlmICh2ZWN0b3IgJmd0Oz0gRVhDQ09ERV9JTlRfTlVNKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAoa3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSAmYW1wOyZhbXA7ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTQ3MiwxMCAmIzQzOzE0NzUsOCBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSkKIAkJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBpbnRyKTsKIAllbHNlIGlmIChpbnRyICZsdDsgMCkKIAkJa3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTsKLQllbHNlIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBpbnZhbGlkIGludGVycnVwdCBpb2N0bCAlZFxuJiMzNDssIF9fZnVuY19fLCBpcnEtJmd0O2lycSk7CiYjNDM7CWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvb25nQXJjaCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBMb29uZ0FyY2ggS1ZNLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgLCBgZWlvaW50Y191cGRhdGVfaXJxYCwgYGlwaV9zZXRgLCBgaXBpX2NsZWFyYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBjYWxscyB0byBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCB3aXRoIGBrdm1fcXVldWVfaXJxYCBhbmQgYGt2bV92Y3B1X2tpY2tgLiBUaGVyZSYjMzk7cyBhbHNvIGEgbmV3IGNoZWNrIGFkZGVkIGluIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgOiBgaWYgKGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHZjcHUtJmd0O2t2bSkpIHJldHVybiAtRUlOVkFMO2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGZ1enogdGhpcz8gSXMgdGhpcyBldmVuIHJlYWNoYWJsZSBhbmQgd29ydGggdGhlIGVmZm9ydD8gIExvb25nQXJjaCwgdGhhdCYjMzk7cyB0aGUgYXJjaGl0ZWN0dXJlLiBOb3csIGRvZXMgc3l6a2FsbGVyIHBsYXkgbmljZSB3aXRoIExvb25nQXJjaCBLVk0/ICBJIGtub3cgc3RhbmRhcmQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBwcmUtYnVpbHQgc2V0dXAgZm9yIGl0LiAgQnV0LCB3YWl0LCB0aGVzZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBJIHJlbWVtYmVyIHJlYWRpbmcuLi4gaXQgbWVudGlvbnMgcGF0aHMgdGhhdCBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uICBBaCwgYnV0IFFFTVUgKmRvZXMqIHN1cHBvcnQgTG9vbmdBcmNoLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQuIEJ1dCwgZG9lcyBzeXprYWxsZXIgKnJ1biogTG9vbmdBcmNoIEtWTT8gVGhlIHN0YW5kYXJkIGJ1aWxkcyB0YXJnZXQgeDg2XzY0LCBhcm02NCwgcmlzY3Y2NCwgZXRjLiBCdXQsIHRoZSBwYXRjaCBpcyBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL2AsIHNvIGNsZWFybHksIHdlICpuZWVkKiBhIExvb25nQXJjaCBob3N0IHRvIHJ1biBLVk0sIHJpZ2h0PwoKU28sIGNhbiB3ZSBmdXp6IExvb25nQXJjaCBLVk0/ICBJZiB3ZSYjMzk7cmUgKm9uKiBhIExvb25nQXJjaCBob3N0LCB5ZXMsIGRlZmluaXRlbHkuIEJhY2sgdG8gdGhlIGRvYywgdGhvdWdoOiAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uJiMzNDsuIEJ1dCwgTG9vbmdBcmNoIEtWTSAqaXMqIHJlYWNoYWJsZSBpZiB3ZSBydW4gUUVNVSB3aXRoIEtWTSBvbiBhIExvb25nQXJjaCBob3N0LiBPa2F5LCBsZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIGZ1enphYmxlIGlmIGl0JiMzOTtzIGZ1bmN0aW9uYWwuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgY2FsbGVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEtWTV9JTlRFUlJVUFRgIGlvY3RsLiBUaGUgcGF0Y2ggYWRkcyB0aGF0IGBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbGAgY2hlY2suICBCYXNpY2FsbHksIGlmIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLCB1c2Vyc3BhY2UgKmNhbm5vdCogaW5qZWN0IGludGVycnVwdHMgdmlhIGBLVk1fSU5URVJSVVBUYC4gIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZS4gRnVydGhlcm1vcmUsIHRoZSBpbnRlcm5hbCBLVk0gY29kZSAoZS5nLiwgdGhvc2UgYGRtc2ludGMuLi5gIGZ1bmN0aW9ucyksIHdoaWNoICp1c2VkKiB0byBjYWxsIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGludGVybmFsbHksIG5vdyBkaXJlY3RseSBjYWxsIGBrdm1fcXVldWVfaXJxYCBhbmQgYGt2bV92Y3B1X2tpY2tgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGUgb2xkIGNvZGUgd291bGQgcmV0dXJuIGAtRUlOVkFMYCB1bmRlciB0aGUgbmV3IGFkZGVkIGNvbmRpdGlvbi4KCkkgbmVlZCB0byBjb25maXJtIEtjb25maWcgc2V0dGluZ3MuIEkgbmVlZCBgQ09ORklHX0tWTWAgYXQgYSBtaW5pbXVtLiAgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGZvciBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM9MTQyNT12b2lkIGt2bV9sb3NlX2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDU5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYzoxNDYwOmludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDYxLXtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jPTE0ODY9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDk5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYzoxNTAwOlx0XHRyZXR1cm4ga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFx1MDAyNmlycSk7XG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE1MDEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJbnRlcnJ1cHQgQ29udHJvbGxlciBJbnRlcmFjdGlvbnMgaW4gS1ZNKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBwbHVzIGl0IHNlZW1zIHRvIGJlIG1lc3Npbmcgd2l0aCB0aGUgaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXJzLiBSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYGRtc2ludGNgLCBgZWlvaW50Y2AsIGFuZCBgaXBpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSBjaGFuZ2VzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IGZvciB0aGVzZS4gTGV0JiMzOTtzIGdldCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciB0aG9zZSBjb250cm9sbGVycyBzdHJhaWdodCBpbiBteSBoZWFkIOKAkyB0aGF0JiMzOTtsbCBnaXZlIG1lIGEgbXVjaCBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIHBvdGVudGlhbCBzY29wZSBhbmQgaW1wYWN0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGJpZyBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBLVk0gY29uZmlndXJhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gaW50ZXJydXB0IGRlbGl2ZXJ5LCBzcGVjaWZpY2FsbHkgaG93IGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHRzIChJUElzKSBhcmUgaGFuZGxlZC4gSSYjMzk7dmUgZ290IGEgZmV3IGtleSBzeW1ib2xzIEkmIzM5O20gdHJhY2tpbmc6IGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYW5kIGBpcGlfY2xlYXJgLiBUaGVzZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZmxvdy4KCldhaXQgYSBzZWNvbmTigKYgYGlwaV9zZXRgIGFuZCBgaXBpX2NsZWFyYOKApiB0aG9zZSBhcmUgZGVmaW5lZCBhcyBzdGF0aWMuIEhtbSwgdGhpcyBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIGhhcmRlciB0byB0cmFjZSwgYXMgdGhleSBhcmVuJiMzOTt0IG5lY2Vzc2FyaWx5IGV4cG9zZWQgb3V0c2lkZSB0aGUgZmlsZSB0aGV5IGFyZSBkZWZpbmVkIGluLiBBbHJpZ2h0LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqcmVhY2hhYmxlKiB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXkmIzM5O3JlIGV2ZW4gY2FsbGVkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHRyYWNlIHRoZWlyIHVzYWdlIGZyb20gd2hlcmUgdGhleSBhcmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwaV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy05LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MTA6c3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0xMS17XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MjQ9c3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTM1LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MzY6XHRpcGlfc2V0KHZjcHUsIEJJVChkYXRhIFx1MDAyNiAweDFmKSk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0zNy19XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MjIxPXN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zdCB2b2lkICp2YWwpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMjM5LVx0Y2FzZSBJT0NTUl9JUElfU0VUOlxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MjQwOlx0XHRpcGlfc2V0KHZjcHUsIGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMjQxLVx0XHRicmVhaztcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zNjg9c3RhdGljIGludCBrdm1faXBpX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzc5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MzgwOnN0YXRpYyBpbnQga3ZtX2lwaV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzgxLVx0XHRcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9NDU1PXN0YXRpYyBzdHJ1Y3Qga3ZtX2RldmljZV9vcHMga3ZtX2lwaV9kZXZfb3BzID0ge1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQ1OC1cdC5kZXN0cm95ID0ga3ZtX2lwaV9kZXN0cm95LFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDU5Olx0LnNldF9hdHRyID0ga3ZtX2lwaV9zZXRfYXR0cixcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQ2MC1cdC5nZXRfYXR0ciA9IGt2bV9pcGlfZ2V0X2F0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgSW50ZXJydXB0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBsb29uZ2FyY2hgIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgRXh0ZXJuYWwgSW50ZXJydXB0IENvbnRyb2xsZXIgKEVJQyksIGxpa2VseSBpbiBhbiBlbWJlZGRlZCBzeXN0ZW0uIFRoZSB0cmFpbCBzdGFydHMgd2l0aCBgaXBpX3NlbmRgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbG9vbmdhcmNoX2lwaV93cml0ZWxgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgYGxvb25nYXJjaF9pcGlfd3JpdGVsYCBtdXN0IGJlIHRoZSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgaGFuZGxlciBmb3IgSW50ZXItUHJvY2Vzc29yIEludGVycnVwdHMgKElQSXMpIG9uIHRoaXMgc3lzdGVtLiBTbywgd3JpdGluZyB0byBhIHNwZWNpZmljIE1NSU8gYWRkcmVzcyB0cmlnZ2VycyBhbiBJUEkgc2VuZC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBFSUMgY29tZXMgaW4uIEkgc2VlIGBlaW9pbnRjX3VwZGF0ZV9pcnFgIGJlaW5nIGNhbGxlZC4gVGhpbmtpbmcgYmFjayB0byBob3cgdGhlIGVpY2ludGMgZHJpdmVyIHdvcmtzLCBJIHN1c3BlY3QgYGVpb2ludGNfdXBkYXRlX2lycWAgaXMgY2FsbGVkIGZyb20gYGVpb2ludGNfc2V0X2lycWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBtZWFucyBgZWlvaW50Y191cGRhdGVfaXJxYCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBpbnRlcnJ1cHRzIHZpc2libGUgYW5kIHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgRUlDIGNvbmZpZ3VyYXRpb24uIFNvLCB0aGUgaW50ZXJydXB0IGdldHMgc2V0LCBhbmQgdGhlbiB0aGUgZWljIGRyaXZlciBwcm9iYWJseSBtYWtlcyBzdXJlIHRoZSBFSUMgaXMgYXdhcmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHM6IElQSSB3cml0ZSwgd2hpY2ggaXMgaGFuZGxlZCBieSB0aGUgTU1JTyBoYW5kbGVyLCByZXN1bHRpbmcgaW4gYSBjYWxsIHRvIHNldCB0aGUgaW50ZXJydXB0IG9uIHRoZSBlaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vpb2ludGNfdXBkYXRlX2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTA9c3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTM1LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjM2OnN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0zNy17XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTc4PXN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTAyLVx0XHRcdC8qIGxvd2VyIGlycSBhdCBvbGQgY3B1IGFuZCByYWlzZSBpcnEgYXQgbmV3IGNwdSAqL1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjEwMzpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGksIDApO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEwNC1cdFx0XHRzLVx1MDAzZXN3X2NvcmVtYXBbaXJxICYjNDM7IGldID0gY3B1O1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjEwNTpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGksIDEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEwNi1cdFx0fSBlbHNlIHtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTEyPXZvaWQgZWlvaW50Y19zZXRfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMTgtXHRsZXZlbCA/IF9fc2V0X2JpdChpcnEsIGlzcikgOiBfX2NsZWFyX2JpdChpcnEsIGlzcik7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MTE5Olx0ZWlvaW50Y191cGRhdGVfaXJxKHMsIGlycSwgbGV2ZWwpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEyMC1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTIwNz1zdGF0aWMgaW50IGxvb25nYXJjaF9laW9pbnRjX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjQ3LVx0XHRcdGlycSA9IF9fZmZzKGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI0ODpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGluZGV4ICogNjQsIDEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI0OS1cdFx0XHRkYXRhIFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjU3LVx0XHRcdGlycSA9IF9fZmZzKGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI1ODpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGluZGV4ICogNjQsIDApO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI1OS1cdFx0XHRkYXRhIFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjc3LVx0XHRcdGlycSA9IF9fZmZzKGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI3ODpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGluZGV4ICogNjQsIDApO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI3OS1cdFx0XHRkYXRhIFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246CgoqKlRyYWNpbmcgdGhlIEludGVycnVwdCBIYW5kbGVyIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBlaW9pbnRjX3NldF9pcnFgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGNhbGxlZCBmcm9tPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBpdCBjYWxsZWQgZnJvbSBhIGRyaXZlcj8gSXMgaXQgcGFydCBvZiB0aGUgY29yZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbml0aWFsaXphdGlvbj8gV2hhdCYjMzk7cyB0aGUgY2FsbCBncmFwaCBsb29rIGxpa2U/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzLiBJIHdvdWxkIHJlYWNoIGZvciBncmVwIG9yIGEgc2ltaWxhciBzZWFyY2ggdG9vbCwgbWF5YmUgd2l0aGluIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBvciBkaXJlY3RvcnkgcmVsYXRlZCB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7ZCBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB0aGUgZXhhY3Qgc3RyaW5nLCBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYGVpb2ludGNfc2V0X2lycWAuIEkgY291bGQgYWxzbyBsZXZlcmFnZSB0aGUgY3Jvc3MtcmVmZXJlbmNpbmcgY2FwYWJpbGl0aWVzIG9mIG15IElERSBvciBhIGNvZGUgYW5hbHlzaXMgdG9vbCBpZiBhdmFpbGFibGUuCgpEZXBlbmRpbmcgb24gdGhlIHNlYXJjaCByZXN1bHRzLCBteSBmb2N1cyB3b3VsZCBzaGlmdC4gSWYgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBsaW1pdGVkIG51bWJlciBvZiBwbGFjZXMsIEkmIzM5O2xsIGV4YW1pbmUgdGhvc2UgY2FsbCBzaXRlcyBkaXJlY3RseSB0byBkZXRlcm1pbmUgdGhlIHB1cnBvc2UgYW5kIGhvdyB0aGUgaW50ZXJydXB0IGlzIGJlaW5nIGNvbmZpZ3VyZWQuIElmIHRoZSBzZWFyY2ggeWllbGRzIGEgbG90IG9mIGhpdHMsIEkmIzM5O2xsIG5lZWQgdG8gbmFycm93IHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIG9yIGVtcGxveSBtb3JlIHNvcGhpc3RpY2F0ZWQgYW5hbHlzaXMgbWV0aG9kcywgc3VjaCBhcyB0cmFjaW5nIHRvb2xzIG9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgbW9kdWxlcyBpbnZvbHZlZC4gVWx0aW1hdGVseSwgSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vpb2ludGNfc2V0X2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTc4PXN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjExMjp2b2lkIGVpb2ludGNfc2V0X2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMTMte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYz0xMz1zdGF0aWMgdm9pZCBwY2hfcGljX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9wY2hfcGljICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTI0LVx0XHRcdGlycSA9IHMtXHUwMDNlaHRtc2lfdmVjdG9yW2lycV07XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM6MjU6XHRcdFx0ZWlvaW50Y19zZXRfaXJxKHMtXHUwMDNla3ZtLVx1MDAzZWFyY2guZWlvaW50YywgaXJxLCBsZXZlbCk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtMjYtXHRcdH1cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtMzAtXHRcdFx0aXJxID0gcy1cdTAwM2VodG1zaV92ZWN0b3JbaXJxXTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYzozMTpcdFx0XHRlaW9pbnRjX3NldF9pcnEocy1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjLCBpcnEsIGxldmVsKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy0zMi1cdFx0fVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYz03MT1pbnQgcGNoX21zaV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIGludCBsZXZlbClcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtODAtXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM6ODE6XHRlaW9pbnRjX3NldF9pcnEoa3ZtLVx1MDAzZWFyY2guZWlvaW50YywgZS1cdTAwM2Vtc2kuZGF0YSwgbGV2ZWwpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTgyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTVNJIERlbGl2ZXJ5IGFuZCBJbnRlcnJ1cHQgUm91dGluZyoqCgpSaWdodCwgc28gYHBjaF9tc2lfc2V0X2lycWAgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYW4gTVNJIChNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCkgaXMgaW5qZWN0ZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlJiMzOTtyZSBjb25maWd1cmluZyB0aGUgc3lzdGVtIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0LiBCdXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3csIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTVNJIGdldHMgdG8gdGhlIFZpcnR1YWwgQ1BVLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgIGJlaW5nIGNhbGxlZCAqZnJvbSo/IElzIGl0IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHdpdGhpbiB0aGUgTVNJIGluamVjdGlvbiBwYXRoLCBvciBpcyB0aGVyZSBhbiBpbnRlcm1lZGlhdGUgaGFuZGxlcj8gSXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgUENJIHN1YnN5c3RlbSwgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGNvZGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LiBUaGF0IHdpbGwgdGVsbCBtZSBob3cgdGhlIE1TSSBpcyByb3V0ZWQgdG8gdGhlIHRhcmdldGVkIHZDUFUuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBjYWxsZXIgb2YgdGhhdCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBvZmZlciBhbnkgY2x1ZXMgb3IgaWYgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY2FsbCBzdGFja3MgYW5kIGxvb2sgZm9yIHRoZSBpbnRlcnJ1cHQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9MTE9dm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYy00Ni1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYzo0NzppbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYy00OC1cdFx0XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYz02OT1pbnQgZG1zaW50Y19zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGFkZHIsIGludCBkYXRhLCBpbnQgbGV2ZWwpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgxLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jOjgyOlx0cmV0dXJuIGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShrdm0sIHZjcHUsIGlycSwgbGV2ZWwpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZG1zaW50Y19zZXRfaXJxYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBmb3IgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIHRoaXMgc3BlY2lmaWMgaW50ZXJydXB0IGluaXRpYWxpemF0aW9uIGlzIHRyaWdnZXJlZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBjb25maWd1cmF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgd2lsbCBjYWxsIGl0LCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdXNlIHNvbWUgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIG9yIHNlYXJjaCB3aXRoaW4gdGhlIHByb2plY3QgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzLiBUaGVuIEkgY2FuIGRldGVybWluZSB3aGF0IHRoaXMgaW50ZXJydXB0IGlzIHJlbGF0ZWQgdG8gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgaW50ZXJydXB0IGhhbmRsaW5nIHN5c3RlbSwgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IGlzLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyB0ZWNobmlxdWUgdG8gdW5kZXJzdGFuZCBpbnRlcnJ1cHQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1zaW50Y19zZXRfaXJxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9NDc9aW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTY4LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jOjY5OmludCBkbXNpbnRjX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgaW50IGRhdGEsIGludCBsZXZlbClcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYy03MC17XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jPTcxPWludCBwY2hfbXNpX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy03Ny1cdFx0bXNnX2FkZHIgXHUwMDNjIChrdm0tXHUwMDNlYXJjaC5kbXNpbnRjLVx1MDAzZW1zZ19hZGRyX2Jhc2UgJiM0Mzsga3ZtLVx1MDAzZWFyY2guZG1zaW50Yy1cdTAwM2Vtc2dfYWRkcl9zaXplKSkge1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jOjc4Olx0XHRyZXR1cm4gZG1zaW50Y19zZXRfaXJxKGt2bSwgbXNnX2FkZHIsIGUtXHUwMDNlbXNpLmRhdGEsIGxldmVsKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy03OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNU0kgYW5kIEludGVycnVwdCBJbmplY3Rpb24gb24gTG9vbmdBcmNoIHdpdGggS1ZNKioKCk9rYXksIHNvIGBwY2hfbXNpX3NldF9pcnFgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgTVNJIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkga25vdyB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSBoaXQgd2hlbiBLVk0gaXMgcnVubmluZyBvbiBMb29uZ0FyY2guIEl0IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIGZ1enppbmcgdGhpczsgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGludGVycnVwdCBpbmplY3Rpb24gaW4gS1ZNLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgpJIHNlZSBhIGd1YXJkIGNvbmRpdGlvbiBhZGRlZCBpbiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YDogYGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSkgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYSBjaGVjayBiZWZvcmUgbWVzc2FnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIG1ha2VzIHNlbnNlLgoKVGhlbiB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiBpbiBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlIGFkZGVkIGNvZGUgYmxvY2sgbG9va3MgbGlrZSBhIGNydWNpYWwgZml4OgoKYGBgYwoJaWYgKCEocy0mZ3Q7c3RhdHVzICZhbXA7IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHsKCQlpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTsKCQlpcG51bSA9IGlwbnVtICZsdDsgNCA/IGlwbnVtIDogMDsKCX0gZWxzZSBpZiAoaXBudW0gJmd0Oz0gTE9PTkdTT05fSVBfTlVNKQoJCWlwbnVtID0gMDsKYGBgCgpUaGlzIGNsZWFybHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWUgaWYgYGlwbnVtYCBnb2VzIGJleW9uZCBgTE9PTkdTT05fSVBfTlVNYC4gSSBzdXNwZWN0IGBMT09OR1NPTl9JUF9OVU1gIGlzIGxpa2VseSBlcXVhbCB0byA4LiBJZiBgaXBudW1gIGlzIG91dCBvZiBib3VuZHMsIHRoaXMgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluY29ycmVjdCBpbnRlcnJ1cHQgaW5qZWN0aW9uLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgZml4LCBhYnNvbHV0ZWx5LgoKSSB3YW50IHRvIGNoZWNrIHRoYXQgYExPT05HU09OX0lQX05VTWAgdmFsdWUuIExldCYjMzk7cyBsb29rIHVwIGhvdyBpdCYjMzk7cyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMT09OR1NPTl9JUF9OVU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC01MS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmg6NTI6I2RlZmluZSBMT09OR1NPTl9JUF9OVU1cdFx0XHQ4XG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oLTUzLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaD01ND1zdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMge1xuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmgtNzYtXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oOjc3Olx0REVDTEFSRV9CSVRNQVAoc3dfY29yZWlzcltFSU9JTlRDX1JPVVRFX01BWF9WQ1BVU11bTE9PTkdTT05fSVBfTlVNXSwgRUlPSU5UQ19JUlFTKTtcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmgtNzgtXHR1aW50OF90ICBzd19jb3JlbWFwW0VJT0lOVENfSVJRU107XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTEwPXN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xOS1cdFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjIwOlx0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTIxLVx0XHRcdGlwbnVtID0gMDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MzY9c3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy00NC1cdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo0NTpcdH0gZWxzZSBpZiAoaXBudW0gXHUwMDNlPSBMT09OR1NPTl9JUF9OVU0pXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNDYtXHRcdGlwbnVtID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gYExPT05HU09OX0lQX05VTWAgaXMgY29uZmlybWVkIHRvIGJlIDguIFRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgdnVsbmVyYWJpbGl0eSBiZWNhdXNlIGBpcG51bWAgd2FzIGFibGUgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDguIFRoaXMgY2F1c2VzIGlzc3VlcyB3aXRoIGBzd19jb3JlaXNyYCBvciBpbnZhbGlkIGludGVycnVwdCBpbmplY3Rpb24sIHJpZ2h0PyBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZywgSSYjMzk7ZCBzYXkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAKKiAgIGBlaW9pbnRjX3VwZGF0ZV9pcnFgCiogICBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YAoqICAgYGlwaV9zZXRgCiogICBgaXBpX2NsZWFyYAoKSG9sZCBvbi4uLiBgaXBpX3NldGAgYW5kIGBpcGlfY2xlYXJgIGFyZSBzdGF0aWMuIFNob3VsZCB3ZSBiZSB0YXJnZXRpbmcgdGhlbT8gWWVhaCwgd2UgY2FuIGluY2x1ZGUgc3RhdGljIGZ1bmN0aW9ucy4gQnV0LCB3YWl0IGEgbWludXRlLCBgZWlvaW50Y191cGRhdGVfaXJxYCBpcyBhbHNvIHN0YXRpYyEKCk9rYXksIG5ldyBwbGFuLiBXZSYjMzk7bGwgdXNlOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC4KCldhaXQsIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGlzIGV4cG9ydGVkLCBpdCYjMzk7cyBnbG9iYWwhIEdvb2QuIExldCYjMzk7cyBtYWtlIHN1cmUgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAgaXMgZ2xvYmFsLCB0b28uIFllcCwgaXQgaXMuCgpUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBtYWtlIHN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3MgYXJlIGNvcnJlY3QuIEkmIzM5O20gc2VlaW5nIGBLVk1gIGFzIHRoZSBwcmltYXJ5IG9uZSwgYXJlIHRoZXJlIGFueSBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2Ugd2UgbmVlZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctNy1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxOAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBMb29uZ0FyY2ggS1ZNIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBzZXQgYW5kIGhlcmUmIzM5O3MgbXkgcGxhbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBzZXZlcmFsIGtleSBmdW5jdGlvbnMuIEZpcnN0LCBgS1ZNYCBpcyBkZWZpbml0ZWx5IHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiBvcHRpb24uICBUaGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgc2V2ZXJhbCBmdW5jdGlvbnMsIGJ1dCBgVklSVFVBTElaQVRJT05gIGlzIGxpc3RlZCBhcyBhIG1lbnVjb25maWcsIHNvLCBvYnZpb3VzbHksIHdlIHdpbGwgaW5jbHVkZSBgS1ZNYC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZyBvcHRpb25zLCBzbyB3ZSBjYW4gc3RpY2sgdG8gYEtWTWAuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUg4oCTIHllcywgY29uZmlybWVkLiAgQW5kIHdoaWxlIGBrdm1fcXVldWVfaXJxYCBpcyBhIGhvdCBwYXRoIHdoZW4gaXQmIzM5O3MgY2FsbGVkLCB0aGVzZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBtb2RpZnkgaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyBvbiBMb29uZ0FyY2guIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgLCBgZWlvaW50Y191cGRhdGVfaXJxYCwgYGlwaV9zZXRgLCBgaXBpX2NsZWFyYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBhcmUgdGhlIG9uZXMgd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBFdmVuIHRob3VnaCBpbnRlcnJ1cHQgZGVsaXZlcnkgY2FuIGJlIHBvdGVudGlhbGx5IGhvdCwgdGhlc2UgYXJlIHNwZWNpZmljIHRvIEtWTSBpbnRlcnJ1cHQgY29udHJvbGxlcnMsIHdoaWNoIGFyZSBvbiBMb29uZ0FyY2guIEZ1enppbmcgdGhlc2Ugc2hvdWxkIGRpcmVjdGx5IHRhcmdldCB0aGUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gbG9naWMsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY2hhbmdlcyBhZ2Fpbi4gVGhlIGZpcnN0LCBpbiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgY2xlYXJseSByZXN0cmljdHMgdXNlci1zcGFjZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHdoZW4gdGhlIGluLWtlcm5lbCBpcnFjaGlwIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBzZWNvbmQgY2hhbmdlLCBpbiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYWx0ZXJzIGhvdyBNU0kgaXMgZGVsaXZlcmVkIGludGVybmFsbHkuICBXZSBieXBhc3MgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgYW5kIGFsc28gYWRkIGEgY2hlY2sgZm9yIGBrdm1fZ3Vlc3RfaGFzX21zZ2ludGAuCgpUaGUgdGhpcmQgY2hhbmdlIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUgcmVnYXJkaW5nIGBpcG51bWAuCgpBbGwgb2YgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgY29yZSBLVk0gbG9naWMgb24gTG9vbmdBcmNoLiAgVGhleSBpbnRyb2R1Y2UgY2hlY2tzLCBpbXByb3ZlIGludGVycnVwdCBkZWxpdmVyeSBwYXRod2F5cywgYW5kIGFkZHJlc3MgcG90ZW50aWFsIGJ1Z3MuIFRoZXJlZm9yZSwgZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb246IGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYW5kIGBpcGlfY2xlYXJgLiBUaGUgYEtWTWAgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBlbmFibGVkLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gcHJpb3JpdGl6ZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGZ1enppbmcgY2FtcGFpZ24gdG8gZW5zdXJlIHdlIGNvdmVyIHRoZSBuZXcgbG9naWMgYW5kIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2Rtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdSYjMzQ7LAogICAgJiMzNDtlaW9pbnRjX3VwZGF0ZV9pcnEmIzM0OywKICAgICYjMzQ7aXBpX3NldCYjMzQ7LAogICAgJiMzNDtpcGlfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSXQgcmVzdHJpY3RzIHVzZXItc3BhY2UgaW50ZXJydXB0IGluamVjdGlvbiB3aGVuIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLCBjaGFuZ2VzIGludGVybmFsIGludGVycnVwdCBkZWxpdmVyeSB0byBieXBhc3MgdGhlIGlvY3RsIHBhdGgsIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlIHdpdGggYGlwbnVtYCBpbiBgZWlvaW50Y19zZXRfc3dfY29yZWlzcmAgYW5kIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7ZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1JiMzNDssCiAgICAmIzM0O2Vpb2ludGNfdXBkYXRlX2lycSYjMzQ7LAogICAgJiMzNDtpcGlfc2V0JiMzNDssCiAgICAmIzM0O2lwaV9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBJdCByZXN0cmljdHMgdXNlci1zcGFjZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHdoZW4gdGhlIGluLWtlcm5lbCBpcnFjaGlwIGlzIGVuYWJsZWQsIGNoYW5nZXMgaW50ZXJuYWwgaW50ZXJydXB0IGRlbGl2ZXJ5IHRvIGJ5cGFzcyB0aGUgaW9jdGwgcGF0aCwgYW5kIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWUgd2l0aCBgaXBudW1gIGluIGBlaW9pbnRjX3NldF9zd19jb3JlaXNyYCBhbmQgYGVpb2ludGNfdXBkYXRlX2lycWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODoyNi4xNzkzMDE1NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3Nzg5NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgICBcImRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdVwiLFxuICAgIFwiZWlvaW50Y191cGRhdGVfaXJxXCIsXG4gICAgXCJpcGlfc2V0XCIsXG4gICAgXCJpcGlfY2xlYXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBJdCByZXN0cmljdHMgdXNlci1zcGFjZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHdoZW4gdGhlIGluLWtlcm5lbCBpcnFjaGlwIGlzIGVuYWJsZWQsIGNoYW5nZXMgaW50ZXJuYWwgaW50ZXJydXB0IGRlbGl2ZXJ5IHRvIGJ5cGFzcyB0aGUgaW9jdGwgcGF0aCwgYW5kIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWUgd2l0aCBgaXBudW1gIGluIGBlaW9pbnRjX3NldF9zd19jb3JlaXNyYCBhbmQgYGVpb2ludGNfdXBkYXRlX2lycWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE4OjI2LjE3OTMxMTE5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzkzMjgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjM2U4NjkzZDlhZmQ3ZjU1YWE2ZjU0OTNmMjQzNGNlNTRmMzFjM2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDM6MTg6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXFxuaW5kZXggZGUyNTczNWNlMDM5NDYuLmE3MjZjNmNhZmVjMzNhIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xcbkBAIC00Nyw3ICs0Nyw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xcbiBcXHRzdHJ1Y3QgZG1zaW50Y19zdGF0ZSAqZHMgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5kbXNpbnRjX3N0YXRlO1xcbiBcXG4gXFx0aWYgKCFsZXZlbClcXG5AQCAtNTcsOSArNTYsMTEgQEAgaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGlmICghZHMpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0dmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7XFxuK1xcdGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHNldF9iaXQodmVjdG9yLCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZkcy1cXHUwMDNldmVjdG9yX21hcCk7XFxuLVxcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcXHUwMDI2dmNwdV9pcnEpO1xcbitcXHRrdm1fcXVldWVfaXJxKHZjcHUsIElOVF9BVkVDKTtcXG4gXFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uYzZhMzA5Njk1MDMwMzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXFxuQEAgLTE3LDcgKzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXFxuIFxcdFxcdGlmICghKHMtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcXG4gXFx0XFx0XFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XFxuIFxcdFxcdFxcdGlwbnVtID0gaXBudW0gXFx1MDAzYyA0ID8gaXBudW0gOiAwO1xcbi1cXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoaXBudW0gXFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxcbitcXHRcXHRcXHRpcG51bSA9IDA7XFxuIFxcbiBcXHRcXHRjcHVpZCA9ICgodTggKilzLVxcdTAwM2Vjb3JlbWFwKVtpcnFdO1xcbiBcXHRcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXFx1MDAzZWt2bSwgY3B1aWQpO1xcbkBAIC0zNiwxMyArMzcsMTMgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbiB7XFxuIFxcdGludCBpcG51bSwgY3B1LCBmb3VuZDtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcXG4gXFxuIFxcdGlwbnVtID0gKHMtXFx1MDAzZWlwbWFwIFxcdTAwM2VcXHUwMDNlIChpcnEgLyAzMiAqIDgpKSBcXHUwMDI2IDB4ZmY7XFxuIFxcdGlmICghKHMtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcXG4gXFx0XFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XFxuIFxcdFxcdGlwbnVtID0gaXBudW0gXFx1MDAzYyA0ID8gaXBudW0gOiAwO1xcbi1cXHR9XFxuK1xcdH0gZWxzZSBpZiAoaXBudW0gXFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxcbitcXHRcXHRpcG51bSA9IDA7XFxuIFxcbiBcXHRjcHUgPSBzLVxcdTAwM2Vzd19jb3JlbWFwW2lycV07XFxuIFxcdHZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfaWQocy1cXHUwMDNla3ZtLCBjcHUpO1xcbkBAIC02Nyw4ICs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXFxuIFxcdGlmIChmb3VuZCBcXHUwMDNjIEVJT0lOVENfSVJRUylcXG4gXFx0XFx0cmV0dXJuOyAvKiBvdGhlciBpcnEgaXMgaGFuZGxpbmcsIG5lZWRuJ3QgdXBkYXRlIHBhcmVudCBpcnEgKi9cXG4gXFxuLVxcdHZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICsgaXBudW0pIDogLShJTlRfSFdJMCArIGlwbnVtKTtcXG4tXFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ2Y3B1X2lycSk7XFxuK1xcdGlmIChsZXZlbClcXG4rXFx0XFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCArIGlwbnVtKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgKyBpcG51bSk7XFxuK1xcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xcbmluZGV4IDRmYTA4OTdkN2JkYjAwLi5iNzc0NGRjYmRkOGUzZCAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXFxuQEAgLTEwLDE2ICsxMCwxNSBAQFxcbiBzdGF0aWMgdm9pZCBpcGlfc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDMyX3QgZGF0YSlcXG4ge1xcbiBcXHR1aW50MzJfdCBzdGF0dXM7XFxuLVxcdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XFxuIFxcdHN0YXR1cyA9IHZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cztcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzIHw9IGRhdGE7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0aWYgKChzdGF0dXMgPT0gMCkgXFx1MDAyNlxcdTAwMjYgZGF0YSkge1xcbi1cXHRcXHRpcnEuaXJxID0gTEFSQ0hfSU5UX0lQSTtcXG4tXFx0XFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZpcnEpO1xcbitcXHRcXHRrdm1fcXVldWVfaXJxKHZjcHUsIExBUkNIX0lOVF9JUEkpO1xcbitcXHRcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbkBAIC00MCwxNiArMzksMTUgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxcbiB7XFxuIFxcdHVpbnQzMl90IHN0YXR1cztcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzIFxcdTAwMjY9IH5kYXRhO1xcbiBcXHRzdGF0dXMgPSB2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0aWYgKHN0YXR1cyA9PSAwKSB7XFxuLVxcdFxcdGlycS5pcnEgPSAtTEFSQ0hfSU5UX0lQSTtcXG4tXFx0XFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZpcnEpO1xcbitcXHRcXHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XFxuK1xcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcXG5pbmRleCAyMGMyMDdkODBlMzFhZS4uODJjOTY4NTRkZjkzZTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcXG5AQCAtMTQ2NSw2ICsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXFxuIFxcdGlmICh2ZWN0b3IgXFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gpIFxcdTAwMjZcXHUwMDI2ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTE0NzIsMTAgKzE0NzUsOCBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcXG4gXFx0XFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBpbnRyKTtcXG4gXFx0ZWxzZSBpZiAoaW50ciBcXHUwMDNjIDApXFxuIFxcdFxcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCAtaW50cik7XFxuLVxcdGVsc2Uge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpcnEtXFx1MDAzZWlycSk7XFxuK1xcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4gXFxuIFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODoyNy41MzgwMTUzODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NzE5MTcyNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV92Y3B1X2lvY3RsX2ludGVycnVwdFwiLFxuICAgIFwiZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1XCIsXG4gICAgXCJlaW9pbnRjX3VwZGF0ZV9pcnFcIixcbiAgICBcImlwaV9zZXRcIixcbiAgICBcImlwaV9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYzNlODY5M2Q5YWZkN2Y1NWFhNmY1NDkzZjI0MzRjZTU0ZjMxYzNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDM6MTg6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li5hNzI2YzZjYWZlYzMzYSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5AQCAtNDcsNyArNDcsNiBAQCB2b2lkIGRtc2ludGNfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IsIGludCBsZXZlbClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcbiBcdHN0cnVjdCBkbXNpbnRjX3N0YXRlICpkcyA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5kbXNpbnRjX3N0YXRlO1xuIFxuIFx0aWYgKCFsZXZlbClcbkBAIC01Nyw5ICs1NiwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmICghZHMpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7XG4rXHRpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c2V0X2JpdCh2ZWN0b3IsICh1bnNpZ25lZCBsb25nICopXHUwMDI2ZHMtXHUwMDNldmVjdG9yX21hcCk7XG4tXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dmNwdV9pcnEpO1xuK1x0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfQVZFQyk7XG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uYzZhMzA5Njk1MDMwMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuQEAgLTE3LDcgKzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXG4gXHRcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG4gXHRcdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbi1cdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuK1x0XHRcdGlwbnVtID0gMDtcbiBcbiBcdFx0Y3B1aWQgPSAoKHU4ICopcy1cdTAwM2Vjb3JlbWFwKVtpcnFdO1xuIFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXHUwMDNla3ZtLCBjcHVpZCk7XG5AQCAtMzYsMTMgKzM3LDEzIEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbiB7XG4gXHRpbnQgaXBudW0sIGNwdSwgZm91bmQ7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcbiBcbiBcdGlwbnVtID0gKHMtXHUwMDNlaXBtYXAgXHUwMDNlXHUwMDNlIChpcnEgLyAzMiAqIDgpKSBcdTAwMjYgMHhmZjtcbiBcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xuIFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuLVx0fVxuK1x0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcbitcdFx0aXBudW0gPSAwO1xuIFxuIFx0Y3B1ID0gcy1cdTAwM2Vzd19jb3JlbWFwW2lycV07XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXHUwMDNla3ZtLCBjcHUpO1xuQEAgLTY3LDggKzY4LDExIEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbiBcdGlmIChmb3VuZCBcdTAwM2MgRUlPSU5UQ19JUlFTKVxuIFx0XHRyZXR1cm47IC8qIG90aGVyIGlycSBpcyBoYW5kbGluZywgbmVlZG4ndCB1cGRhdGUgcGFyZW50IGlycSAqL1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gbGV2ZWwgPyAoSU5UX0hXSTAgKyBpcG51bSkgOiAtKElOVF9IV0kwICsgaXBudW0pO1xuLVx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnZjcHVfaXJxKTtcbitcdGlmIChsZXZlbClcbitcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCArIGlwbnVtKTtcbitcdGVsc2VcbitcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIElOVF9IV0kwICsgaXBudW0pO1xuK1x0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGVpb2ludGNfdXBkYXRlX3N3X2NvcmVtYXAoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbmluZGV4IDRmYTA4OTdkN2JkYjAwLi5iNzc0NGRjYmRkOGUzZCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuQEAgLTEwLDE2ICsxMCwxNSBAQFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyB8PSBkYXRhO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmICgoc3RhdHVzID09IDApIFx1MDAyNlx1MDAyNiBkYXRhKSB7XG4tXHRcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xuLVx0XHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2aXJxKTtcbitcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbitcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbkBAIC00MCwxNiArMzksMTUgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuIHN0YXRpYyB2b2lkIGlwaV9jbGVhcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IGRhdGEpXG4ge1xuIFx0dWludDMyX3Qgc3RhdHVzO1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyBcdTAwMjY9IH5kYXRhO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4tXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0aWYgKHN0YXR1cyA9PSAwKSB7XG4tXHRcdGlycS5pcnEgPSAtTEFSQ0hfSU5UX0lQSTtcbi1cdFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFx1MDAyNmlycSk7XG4rXHRcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbitcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB1aW50NjRfdCByZWFkX21haWxib3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5pbmRleCAyMGMyMDdkODBlMzFhZS4uODJjOTY4NTRkZjkzZTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTQ2NSw2ICsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRpZiAodmVjdG9yIFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpIFx1MDAyNlx1MDAyNiAodmVjdG9yID09IElOVF9BVkVDKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTQ3MiwxMCArMTQ3NSw4IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuIFx0XHRrdm1fcXVldWVfaXJxKHZjcHUsIGludHIpO1xuIFx0ZWxzZSBpZiAoaW50ciBcdTAwM2MgMClcbiBcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTtcbi1cdGVsc2Uge1xuLVx0XHRrdm1fZXJyKFwiJXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXFxuXCIsIF9fZnVuY19fLCBpcnEtXHUwMDNlaXJxKTtcbitcdGVsc2VcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6MjcuNTM4MDE2OTM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MTI0MTA1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTG9vbmdBcmNoIEtWTSBJbnRlcnJ1cHQgSGFuZGxpbmcgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBMb29uZ0FyY2ggS1ZNLCBhbmQgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgdGhlc2UgZnVuY3Rpb25zOiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYGlwaV9jbGVhcmAsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgY2FsbHMgdG8gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgYW5kIGBrdm1fdmNwdV9raWNrYC4gVGhlcmUncyBhbHNvIGEgbmV3IGNoZWNrIGFkZGVkIGluIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgOiBgaWYgKGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSkgcmV0dXJuIC1FSU5WQUw7YC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBmdXp6IHRoaXM/IElzIHRoaXMgZXZlbiByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQ/ICBMb29uZ0FyY2gsIHRoYXQncyB0aGUgYXJjaGl0ZWN0dXJlLiBOb3csIGRvZXMgc3l6a2FsbGVyIHBsYXkgbmljZSB3aXRoIExvb25nQXJjaCBLVk0/ICBJIGtub3cgc3RhbmRhcmQgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIHByZS1idWlsdCBzZXR1cCBmb3IgaXQuICBCdXQsIHdhaXQsIHRoZXNlIGluc3RydWN0aW9ucyBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIEkgcmVtZW1iZXIgcmVhZGluZy4uLiBpdCBtZW50aW9ucyBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXNwZWNpYWxseSB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gIEFoLCBidXQgUUVNVSAqZG9lcyogc3VwcG9ydCBMb29uZ0FyY2gsIEkgc2VlbSB0byByZWNhbGwgdGhhdC4gQnV0LCBkb2VzIHN5emthbGxlciAqcnVuKiBMb29uZ0FyY2ggS1ZNPyBUaGUgc3RhbmRhcmQgYnVpbGRzIHRhcmdldCB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBldGMuIEJ1dCwgdGhlIHBhdGNoIGlzIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vYCwgc28gY2xlYXJseSwgd2UgKm5lZWQqIGEgTG9vbmdBcmNoIGhvc3QgdG8gcnVuIEtWTSwgcmlnaHQ/XG5cblNvLCBjYW4gd2UgZnV6eiBMb29uZ0FyY2ggS1ZNPyAgSWYgd2UncmUgKm9uKiBhIExvb25nQXJjaCBob3N0LCB5ZXMsIGRlZmluaXRlbHkuIEJhY2sgdG8gdGhlIGRvYywgdGhvdWdoOiBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uXCIuIEJ1dCwgTG9vbmdBcmNoIEtWTSAqaXMqIHJlYWNoYWJsZSBpZiB3ZSBydW4gUUVNVSB3aXRoIEtWTSBvbiBhIExvb25nQXJjaCBob3N0LiBPa2F5LCBsZXQncyBhc3N1bWUgaXQncyBmdXp6YWJsZSBpZiBpdCdzIGZ1bmN0aW9uYWwuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGlzIGNhbGxlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fSU5URVJSVVBUYCBpb2N0bC4gVGhlIHBhdGNoIGFkZHMgdGhhdCBga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWxgIGNoZWNrLiAgQmFzaWNhbGx5LCBpZiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgdXNlcnNwYWNlICpjYW5ub3QqIGluamVjdCBpbnRlcnJ1cHRzIHZpYSBgS1ZNX0lOVEVSUlVQVGAuICBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZS4gRnVydGhlcm1vcmUsIHRoZSBpbnRlcm5hbCBLVk0gY29kZSAoZS5nLiwgdGhvc2UgYGRtc2ludGMuLi5gIGZ1bmN0aW9ucyksIHdoaWNoICp1c2VkKiB0byBjYWxsIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGludGVybmFsbHksIG5vdyBkaXJlY3RseSBjYWxsIGBrdm1fcXVldWVfaXJxYCBhbmQgYGt2bV92Y3B1X2tpY2tgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGUgb2xkIGNvZGUgd291bGQgcmV0dXJuIGAtRUlOVkFMYCB1bmRlciB0aGUgbmV3IGFkZGVkIGNvbmRpdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gS2NvbmZpZyBzZXR0aW5ncy4gSSBuZWVkIGBDT05GSUdfS1ZNYCBhdCBhIG1pbmltdW0uICBJIHNob3VsZCBwcm9iYWJseSBzZWFyY2ggZm9yIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6MzguMzUwNDMxNDcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MjIyODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jPTE0MjU9dm9pZCBrdm1fbG9zZV9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDU5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTQ2MDppbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE0NjEte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNDg2PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDk5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTUwMDpcXHRcXHRyZXR1cm4ga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZpcnEpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTUwMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE4OjM4Ljc0MjY2OTUyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjEyOTc4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEludGVycnVwdCBDb250cm9sbGVyIEludGVyYWN0aW9ucyBpbiBLVk0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGhpdHRpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIHBsdXMgaXQgc2VlbXMgdG8gYmUgbWVzc2luZyB3aXRoIHRoZSBpbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlcnMuIFJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBkbXNpbnRjYCwgYGVpb2ludGNgLCBhbmQgYGlwaWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgY2hhbmdlcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgdGhlc2UuIExldCdzIGdldCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciB0aG9zZSBjb250cm9sbGVycyBzdHJhaWdodCBpbiBteSBoZWFkIOKAkyB0aGF0J2xsIGdpdmUgbWUgYSBtdWNoIGJldHRlciBncmFzcCBvZiB0aGUgcG90ZW50aWFsIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo0Mi4wNjM5Njk5MTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2MjIyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NDIuMTI2NjA4MzE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NzA5NTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEludGVyLVByb2Nlc3NvciBJbnRlcnJ1cHRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBLVk0gY29uZmlndXJhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gaW50ZXJydXB0IGRlbGl2ZXJ5LCBzcGVjaWZpY2FsbHkgaG93IGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHRzIChJUElzKSBhcmUgaGFuZGxlZC4gSSd2ZSBnb3QgYSBmZXcga2V5IHN5bWJvbHMgSSdtIHRyYWNraW5nOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC4gVGhlc2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGZsb3cuXG5cbldhaXQgYSBzZWNvbmTigKYgYGlwaV9zZXRgIGFuZCBgaXBpX2NsZWFyYOKApiB0aG9zZSBhcmUgZGVmaW5lZCBhcyBzdGF0aWMuIEhtbSwgdGhpcyBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIGhhcmRlciB0byB0cmFjZSwgYXMgdGhleSBhcmVuJ3QgbmVjZXNzYXJpbHkgZXhwb3NlZCBvdXRzaWRlIHRoZSBmaWxlIHRoZXkgYXJlIGRlZmluZWQgaW4uIEFscmlnaHQsIG15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpyZWFjaGFibGUqIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhleSdyZSBldmVuIGNhbGxlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIGlmIEkgY2FuIHRyYWNlIHRoZWlyIHVzYWdlIGZyb20gd2hlcmUgdGhleSBhcmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NDUuNjgzNzA2MDYzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzMwMDk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MTA6c3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMTEte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MjQ9c3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzUtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MzY6XFx0aXBpX3NldCh2Y3B1LCBCSVQoZGF0YSBcXHUwMDI2IDB4MWYpKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0zNy19XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0yMjE9c3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKnZhbClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTIzOS1cXHRjYXNlIElPQ1NSX0lQSV9TRVQ6XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MjQwOlxcdFxcdGlwaV9zZXQodmNwdSwgZGF0YSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMjQxLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MzY4PXN0YXRpYyBpbnQga3ZtX2lwaV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzc5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjM4MDpzdGF0aWMgaW50IGt2bV9pcGlfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0zODEtXFx0XFx0XFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTQ1NT1zdGF0aWMgc3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9pcGlfZGV2X29wcyA9IHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQ1OC1cXHQuZGVzdHJveSA9IGt2bV9pcGlfZGVzdHJveSxcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0NTk6XFx0LnNldF9hdHRyID0ga3ZtX2lwaV9zZXRfYXR0cixcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00NjAtXFx0LmdldF9hdHRyID0ga3ZtX2lwaV9nZXRfYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NDUuODIxMDEzMDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ0MjAyNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEludGVycnVwdCBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGxvb25nYXJjaGAgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBFeHRlcm5hbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRUlDKSwgbGlrZWx5IGluIGFuIGVtYmVkZGVkIHN5c3RlbS4gVGhlIHRyYWlsIHN0YXJ0cyB3aXRoIGBpcGlfc2VuZGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBsb29uZ2FyY2hfaXBpX3dyaXRlbGAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBgbG9vbmdhcmNoX2lwaV93cml0ZWxgIG11c3QgYmUgdGhlIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKSBoYW5kbGVyIGZvciBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyAoSVBJcykgb24gdGhpcyBzeXN0ZW0uIFNvLCB3cml0aW5nIHRvIGEgc3BlY2lmaWMgTU1JTyBhZGRyZXNzIHRyaWdnZXJzIGFuIElQSSBzZW5kLiBHb3QgaXQuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoZSBFSUMgY29tZXMgaW4uIEkgc2VlIGBlaW9pbnRjX3VwZGF0ZV9pcnFgIGJlaW5nIGNhbGxlZC4gVGhpbmtpbmcgYmFjayB0byBob3cgdGhlIGVpY2ludGMgZHJpdmVyIHdvcmtzLCBJIHN1c3BlY3QgYGVpb2ludGNfdXBkYXRlX2lycWAgaXMgY2FsbGVkIGZyb20gYGVpb2ludGNfc2V0X2lycWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBtZWFucyBgZWlvaW50Y191cGRhdGVfaXJxYCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBpbnRlcnJ1cHRzIHZpc2libGUgYW5kIHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgRUlDIGNvbmZpZ3VyYXRpb24uIFNvLCB0aGUgaW50ZXJydXB0IGdldHMgc2V0LCBhbmQgdGhlbiB0aGUgZWljIGRyaXZlciBwcm9iYWJseSBtYWtlcyBzdXJlIHRoZSBFSUMgaXMgYXdhcmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHM6IElQSSB3cml0ZSwgd2hpY2ggaXMgaGFuZGxlZCBieSB0aGUgTU1JTyBoYW5kbGVyLCByZXN1bHRpbmcgaW4gYSBjYWxsIHRvIHNldCB0aGUgaW50ZXJydXB0IG9uIHRoZSBlaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo0OS41NjUyMTc3NTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Njc2MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVpb2ludGNfdXBkYXRlX2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTEwPXN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTM1LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzozNjpzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTM3LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz03OD1zdGF0aWMgaW5saW5lIHZvaWQgZWlvaW50Y191cGRhdGVfc3dfY29yZW1hcChzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTAyLVxcdFxcdFxcdC8qIGxvd2VyIGlycSBhdCBvbGQgY3B1IGFuZCByYWlzZSBpcnEgYXQgbmV3IGNwdSAqL1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzoxMDM6XFx0XFx0XFx0ZWlvaW50Y191cGRhdGVfaXJxKHMsIGlycSArIGksIDApO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMDQtXFx0XFx0XFx0cy1cXHUwMDNlc3dfY29yZW1hcFtpcnEgKyBpXSA9IGNwdTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MTA1OlxcdFxcdFxcdGVpb2ludGNfdXBkYXRlX2lycShzLCBpcnEgKyBpLCAxKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTEyPXZvaWQgZWlvaW50Y19zZXRfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTExOC1cXHRsZXZlbCA/IF9fc2V0X2JpdChpcnEsIGlzcikgOiBfX2NsZWFyX2JpdChpcnEsIGlzcik7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjExOTpcXHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxLCBsZXZlbCk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEyMC1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MjA3PXN0YXRpYyBpbnQgbG9vbmdhcmNoX2Vpb2ludGNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI0Ny1cXHRcXHRcXHRpcnEgPSBfX2ZmcyhkYXRhKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MjQ4OlxcdFxcdFxcdGVpb2ludGNfdXBkYXRlX2lycShzLCBpcnEgKyBpbmRleCAqIDY0LCAxKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjQ5LVxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0yNTctXFx0XFx0XFx0aXJxID0gX19mZnMoZGF0YSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI1ODpcXHRcXHRcXHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICsgaW5kZXggKiA2NCwgMCk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI1OS1cXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5CSVRfVUxMKGlycSk7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjc3LVxcdFxcdFxcdGlycSA9IF9fZmZzKGRhdGEpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzoyNzg6XFx0XFx0XFx0ZWlvaW50Y191cGRhdGVfaXJxKHMsIGlycSArIGluZGV4ICogNjQsIDApO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0yNzktXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+QklUX1VMTChpcnEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo0OS42NDI5MDY1MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NzEzMjk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246XG5cbioqVHJhY2luZyB0aGUgSW50ZXJydXB0IEhhbmRsZXIgQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBlaW9pbnRjX3NldF9pcnFgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJXaGVyZSdzIHRoaXMgY2FsbGVkIGZyb20/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIGl0IGNhbGxlZCBmcm9tIGEgZHJpdmVyPyBJcyBpdCBwYXJ0IG9mIHRoZSBjb3JlIGludGVycnVwdCBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uPyBXaGF0J3MgdGhlIGNhbGwgZ3JhcGggbG9vayBsaWtlP1xuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzLiBJIHdvdWxkIHJlYWNoIGZvciBncmVwIG9yIGEgc2ltaWxhciBzZWFyY2ggdG9vbCwgbWF5YmUgd2l0aGluIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBvciBkaXJlY3RvcnkgcmVsYXRlZCB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEknbSB0aGlua2luZyBJJ2Qgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgdGhlIGV4YWN0IHN0cmluZywgbG9va2luZyBmb3IgZGlyZWN0IGNhbGxzIHRvIGBlaW9pbnRjX3NldF9pcnFgLiBJIGNvdWxkIGFsc28gbGV2ZXJhZ2UgdGhlIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcyBvZiBteSBJREUgb3IgYSBjb2RlIGFuYWx5c2lzIHRvb2wgaWYgYXZhaWxhYmxlLlxuXG5EZXBlbmRpbmcgb24gdGhlIHNlYXJjaCByZXN1bHRzLCBteSBmb2N1cyB3b3VsZCBzaGlmdC4gSWYgaXQncyBjYWxsZWQgZnJvbSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHBsYWNlcywgSSdsbCBleGFtaW5lIHRob3NlIGNhbGwgc2l0ZXMgZGlyZWN0bHkgdG8gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIGFuZCBob3cgdGhlIGludGVycnVwdCBpcyBiZWluZyBjb25maWd1cmVkLiBJZiB0aGUgc2VhcmNoIHlpZWxkcyBhIGxvdCBvZiBoaXRzLCBJJ2xsIG5lZWQgdG8gbmFycm93IHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIG9yIGVtcGxveSBtb3JlIHNvcGhpc3RpY2F0ZWQgYW5hbHlzaXMgbWV0aG9kcywgc3VjaCBhcyB0cmFjaW5nIHRvb2xzIG9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgbW9kdWxlcyBpbnZvbHZlZC4gVWx0aW1hdGVseSwgSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo1Mi45NDAwNDMzNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODY2NzExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlaW9pbnRjX3NldF9pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9Nzg9c3RhdGljIGlubGluZSB2b2lkIGVpb2ludGNfdXBkYXRlX3N3X2NvcmVtYXAoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTExMS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MTEyOnZvaWQgZWlvaW50Y19zZXRfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMTMte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jPTEzPXN0YXRpYyB2b2lkIHBjaF9waWNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX3BjaF9waWMgKnMsIGludCBpcnEsIGludCBsZXZlbClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy0yNC1cXHRcXHRcXHRpcnEgPSBzLVxcdTAwM2VodG1zaV92ZWN0b3JbaXJxXTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM6MjU6XFx0XFx0XFx0ZWlvaW50Y19zZXRfaXJxKHMtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5laW9pbnRjLCBpcnEsIGxldmVsKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtMjYtXFx0XFx0fVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTMwLVxcdFxcdFxcdGlycSA9IHMtXFx1MDAzZWh0bXNpX3ZlY3RvcltpcnFdO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYzozMTpcXHRcXHRcXHRlaW9pbnRjX3NldF9pcnEocy1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmVpb2ludGMsIGlycSwgbGV2ZWwpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy0zMi1cXHRcXHR9XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM9NzE9aW50IHBjaF9tc2lfc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBpbnQgbGV2ZWwpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtODAtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jOjgxOlxcdGVpb2ludGNfc2V0X2lycShrdm0tXFx1MDAzZWFyY2guZWlvaW50YywgZS1cXHUwMDNlbXNpLmRhdGEsIGxldmVsKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE4OjUzLjIwODcxNzU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDI4NzUwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTVNJIERlbGl2ZXJ5IGFuZCBJbnRlcnJ1cHQgUm91dGluZyoqXG5cblJpZ2h0LCBzbyBgcGNoX21zaV9zZXRfaXJxYCBnZXRzIGNhbGxlZCB3aGVuZXZlciBhbiBNU0kgKE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0KSBpcyBpbmplY3RlZC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBjb25maWd1cmluZyB0aGUgc3lzdGVtIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0LiBCdXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3csIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTVNJIGdldHMgdG8gdGhlIFZpcnR1YWwgQ1BVLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgIGJlaW5nIGNhbGxlZCAqZnJvbSo/IElzIGl0IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHdpdGhpbiB0aGUgTVNJIGluamVjdGlvbiBwYXRoLCBvciBpcyB0aGVyZSBhbiBpbnRlcm1lZGlhdGUgaGFuZGxlcj8gSXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgUENJIHN1YnN5c3RlbSwgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGNvZGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LiBUaGF0IHdpbGwgdGVsbCBtZSBob3cgdGhlIE1TSSBpcyByb3V0ZWQgdG8gdGhlIHRhcmdldGVkIHZDUFUuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBjYWxsZXIgb2YgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNvbW1lbnRzIG9mZmVyIGFueSBjbHVlcyBvciBpZiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIHN0YWNrcyBhbmQgbG9vayBmb3IgdGhlIGludGVycnVwdCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NTYuOTExNTk4MzI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUwMzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9MTE9dm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTQ2LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYzo0NzppbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMtNDgtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9Njk9aW50IGRtc2ludGNfc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCBpbnQgZGF0YSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgxLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYzo4MjpcXHRyZXR1cm4gZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KGt2bSwgdmNwdSwgaXJxLCBsZXZlbCk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NTYuOTcxMTA4NzU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTM0NTkzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgSW50ZXJydXB0IEhhbmRsZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZG1zaW50Y19zZXRfaXJxYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBmb3IgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgdGhpcyBzcGVjaWZpYyBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24gaXMgdHJpZ2dlcmVkLiBJdCdzIGxpa2VseSB0aGF0IGEgY29uZmlndXJhdGlvbiBvciBpbml0aWFsaXphdGlvbiByb3V0aW5lIHdpbGwgY2FsbCBpdCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaWYgSSBjYW4gdXNlIHNvbWUgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIG9yIHNlYXJjaCB3aXRoaW4gdGhlIHByb2plY3QgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzLiBUaGVuIEkgY2FuIGRldGVybWluZSB3aGF0IHRoaXMgaW50ZXJydXB0IGlzIHJlbGF0ZWQgdG8gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgaW50ZXJydXB0IGhhbmRsaW5nIHN5c3RlbSwgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IGlzLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyB0ZWNobmlxdWUgdG8gdW5kZXJzdGFuZCBpbnRlcnJ1cHQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo1OS43MjQ1NzAyODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY5Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbXNpbnRjX3NldF9pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9NDc9aW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMtNjgtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jOjY5OmludCBkbXNpbnRjX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgaW50IGRhdGEsIGludCBsZXZlbClcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMtNzAte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jPTcxPWludCBwY2hfbXNpX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTc3LVxcdFxcdG1zZ19hZGRyIFxcdTAwM2MgKGt2bS1cXHUwMDNlYXJjaC5kbXNpbnRjLVxcdTAwM2Vtc2dfYWRkcl9iYXNlICsga3ZtLVxcdTAwM2VhcmNoLmRtc2ludGMtXFx1MDAzZW1zZ19hZGRyX3NpemUpKSB7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jOjc4OlxcdFxcdHJldHVybiBkbXNpbnRjX3NldF9pcnEoa3ZtLCBtc2dfYWRkciwgZS1cXHUwMDNlbXNpLmRhdGEsIGxldmVsKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtNzktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo1OS44NTIyNzM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODY5NTY1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNU0kgYW5kIEludGVycnVwdCBJbmplY3Rpb24gb24gTG9vbmdBcmNoIHdpdGggS1ZNKipcblxuT2theSwgc28gYHBjaF9tc2lfc2V0X2lycWAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBNU0kgd2l0aGluIHRoaXMgY29udGV4dC4gSSBrbm93IHRoaXMgcGF0aCBpcyBkZWZpbml0ZWx5IGhpdCB3aGVuIEtWTSBpcyBydW5uaW5nIG9uIExvb25nQXJjaC4gSXQgbWFrZXMgc2Vuc2UgdG8gY29uc2lkZXIgZnV6emluZyB0aGlzOyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaW5qZWN0aW9uIGluIEtWTS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cbkkgc2VlIGEgZ3VhcmQgY29uZGl0aW9uIGFkZGVkIGluIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgOiBgaWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIGNoZWNrIGJlZm9yZSBtZXNzYWdlIGludGVycnVwdCBkZWxpdmVyeSwgbWFrZXMgc2Vuc2UuXG5cblRoZW4gdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBpbiBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlIGFkZGVkIGNvZGUgYmxvY2sgbG9va3MgbGlrZSBhIGNydWNpYWwgZml4OlxuXG5gYGBjXG5cdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG5cdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG5cdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcblx0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcblx0XHRpcG51bSA9IDA7XG5gYGBcblxuVGhpcyBjbGVhcmx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlIGlmIGBpcG51bWAgZ29lcyBiZXlvbmQgYExPT05HU09OX0lQX05VTWAuIEkgc3VzcGVjdCBgTE9PTkdTT05fSVBfTlVNYCBpcyBsaWtlbHkgZXF1YWwgdG8gOC4gSWYgYGlwbnVtYCBpcyBvdXQgb2YgYm91bmRzLCB0aGlzIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmNvcnJlY3QgaW50ZXJydXB0IGluamVjdGlvbi4gSXQncyBhIGZ1bmN0aW9uYWwgZml4LCBhYnNvbHV0ZWx5LlxuXG5JIHdhbnQgdG8gY2hlY2sgdGhhdCBgTE9PTkdTT05fSVBfTlVNYCB2YWx1ZS4gTGV0J3MgbG9vayB1cCBob3cgaXQncyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOTowNi41MzkyMzM3OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjQyMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxPT05HU09OX0lQX05VTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC01MS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oOjUyOiNkZWZpbmUgTE9PTkdTT05fSVBfTlVNXFx0XFx0XFx0OFxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmgtNTMtXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaD01ND1zdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMge1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC03Ni1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oOjc3OlxcdERFQ0xBUkVfQklUTUFQKHN3X2NvcmVpc3JbRUlPSU5UQ19ST1VURV9NQVhfVkNQVVNdW0xPT05HU09OX0lQX05VTV0sIEVJT0lOVENfSVJRUyk7XFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC03OC1cXHR1aW50OF90ICBzd19jb3JlbWFwW0VJT0lOVENfSVJRU107XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTA9c3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTktXFx0XFx0XFx0aXBudW0gPSBpcG51bSBcXHUwMDNjIDQgPyBpcG51bSA6IDA7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjIwOlxcdFxcdH0gZWxzZSBpZiAoaXBudW0gXFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0yMS1cXHRcXHRcXHRpcG51bSA9IDA7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MzY9c3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTQ0LVxcdFxcdGlwbnVtID0gaXBudW0gXFx1MDAzYyA0ID8gaXBudW0gOiAwO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo0NTpcXHR9IGVsc2UgaWYgKGlwbnVtIFxcdTAwM2U9IExPT05HU09OX0lQX05VTSlcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNDYtXFx0XFx0aXBudW0gPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOTowNi42MzA4ODU2ODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMjgzNDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGBMT09OR1NPTl9JUF9OVU1gIGlzIGNvbmZpcm1lZCB0byBiZSA4LiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSBgaXBudW1gIHdhcyBhYmxlIHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA4LiBUaGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBgc3dfY29yZWlzcmAgb3IgaW52YWxpZCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCByaWdodD8gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcsIEknZCBzYXkuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gdGhpbmtpbmc6XG5cbiogICBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YFxuKiAgIGBlaW9pbnRjX3VwZGF0ZV9pcnFgXG4qICAgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWBcbiogICBgaXBpX3NldGBcbiogICBgaXBpX2NsZWFyYFxuXG5Ib2xkIG9uLi4uIGBpcGlfc2V0YCBhbmQgYGlwaV9jbGVhcmAgYXJlIHN0YXRpYy4gU2hvdWxkIHdlIGJlIHRhcmdldGluZyB0aGVtPyBZZWFoLCB3ZSBjYW4gaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHdhaXQgYSBtaW51dGUsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgIGlzIGFsc28gc3RhdGljIVxuXG5Pa2F5LCBuZXcgcGxhbi4gV2UnbGwgdXNlOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC5cblxuV2FpdCwgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgZXhwb3J0ZWQsIGl0J3MgZ2xvYmFsISBHb29kLiBMZXQncyBtYWtlIHN1cmUgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAgaXMgZ2xvYmFsLCB0b28uIFllcCwgaXQgaXMuXG5cblRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcsIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlncyBhcmUgY29ycmVjdC4gSSdtIHNlZWluZyBgS1ZNYCBhcyB0aGUgcHJpbWFyeSBvbmUsIGFyZSB0aGVyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IExldCdzIGNoZWNrIGBhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSB3ZSBuZWVkIHRvIGtub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTgzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE5OjEyLjI2MzcyMzkzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MDMwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy03LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOToxMi4zMzUxMzQyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgzOTgyNzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIExvb25nQXJjaCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBzZXQgYW5kIGhlcmUncyBteSBwbGFuLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gdGhlIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgb24gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgYEtWTWAgaXMgZGVmaW5pdGVseSB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiAgVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zLCBidXQgYFZJUlRVQUxJWkFUSU9OYCBpcyBsaXN0ZWQgYXMgYSBtZW51Y29uZmlnLCBzbywgb2J2aW91c2x5LCB3ZSB3aWxsIGluY2x1ZGUgYEtWTWAuIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZyBvcHRpb25zLCBzbyB3ZSBjYW4gc3RpY2sgdG8gYEtWTWAuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUg4oCTIHllcywgY29uZmlybWVkLiAgQW5kIHdoaWxlIGBrdm1fcXVldWVfaXJxYCBpcyBhIGhvdCBwYXRoIHdoZW4gaXQncyBjYWxsZWQsIHRoZXNlIGNoYW5nZXMgc3BlY2lmaWNhbGx5IG1vZGlmeSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljIG9uIExvb25nQXJjaC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGBpcGlfY2xlYXJgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIGFyZSB0aGUgb25lcyB3ZSdyZSBmb2N1c2luZyBvbi4gRXZlbiB0aG91Z2ggaW50ZXJydXB0IGRlbGl2ZXJ5IGNhbiBiZSBwb3RlbnRpYWxseSBob3QsIHRoZXNlIGFyZSBzcGVjaWZpYyB0byBLVk0gaW50ZXJydXB0IGNvbnRyb2xsZXJzLCB3aGljaCBhcmUgb24gTG9vbmdBcmNoLiBGdXp6aW5nIHRoZXNlIHNob3VsZCBkaXJlY3RseSB0YXJnZXQgdGhlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIGNoYW5nZXMgYWdhaW4uIFRoZSBmaXJzdCwgaW4gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIGNsZWFybHkgcmVzdHJpY3RzIHVzZXItc3BhY2UgaW50ZXJydXB0IGluamVjdGlvbiB3aGVuIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBzZWNvbmQgY2hhbmdlLCBpbiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYWx0ZXJzIGhvdyBNU0kgaXMgZGVsaXZlcmVkIGludGVybmFsbHkuICBXZSBieXBhc3MgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgYW5kIGFsc28gYWRkIGEgY2hlY2sgZm9yIGBrdm1fZ3Vlc3RfaGFzX21zZ2ludGAuXG5cblRoZSB0aGlyZCBjaGFuZ2UgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZSByZWdhcmRpbmcgYGlwbnVtYC5cblxuQWxsIG9mIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0aW5nIGNvcmUgS1ZNIGxvZ2ljIG9uIExvb25nQXJjaC4gIFRoZXkgaW50cm9kdWNlIGNoZWNrcywgaW1wcm92ZSBpbnRlcnJ1cHQgZGVsaXZlcnkgcGF0aHdheXMsIGFuZCBhZGRyZXNzIHBvdGVudGlhbCBidWdzLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhlbSBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gZm9jdXMgb246IGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYW5kIGBpcGlfY2xlYXJgLiBUaGUgYEtWTWAgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBlbmFibGVkLiBJJ2xsIG1ha2Ugc3VyZSB0byBwcmlvcml0aXplIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgZnV6emluZyBjYW1wYWlnbiB0byBlbnN1cmUgd2UgY292ZXIgdGhlIG5ldyBsb2dpYyBhbmQgY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTE4LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOToyNC4xNzQ5NjQ1ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjIxNzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0XCIsXG4gICAgXCJkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVcIixcbiAgICBcImVpb2ludGNfdXBkYXRlX2lycVwiLFxuICAgIFwiaXBpX3NldFwiLFxuICAgIFwiaXBpX2NsZWFyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSXQgcmVzdHJpY3RzIHVzZXItc3BhY2UgaW50ZXJydXB0IGluamVjdGlvbiB3aGVuIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLCBjaGFuZ2VzIGludGVybmFsIGludGVycnVwdCBkZWxpdmVyeSB0byBieXBhc3MgdGhlIGlvY3RsIHBhdGgsIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlIHdpdGggYGlwbnVtYCBpbiBgZWlvaW50Y19zZXRfc3dfY29yZWlzcmAgYW5kIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV92Y3B1X2lvY3RsX2ludGVycnVwdFwiLFxuICAgIFwiZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1XCIsXG4gICAgXCJlaW9pbnRjX3VwZGF0ZV9pcnFcIixcbiAgICBcImlwaV9zZXRcIixcbiAgICBcImlwaV9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 03:12:54 +0000 UTC FinishedAt: 2026-06-22 03:19:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ef0c9f75a19532d7675384708fc8621e10850104", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "d83bae63-48e5-4a70-a0f0-c1b92052815d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vcpu_ioctl_interrupt", "dmsintc_deliver_msi_to_vcpu", "eiointc_update_irq", "ipi_set", "ipi_clear" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUmIzM0OywKICAgICYjMzQ7ZWlvaW50Y191cGRhdGVfaXJxJiMzNDssCiAgICAmIzM0O2lwaV9zZXQmIzM0OywKICAgICYjMzQ7aXBpX2NsZWFyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVjM2U4NjkzZDlhZmQ3ZjU1YWE2ZjU0OTNmMjQzNGNlNTRmMzFjM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwMzoxODoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li5hNzI2YzZjYWZlYzMzYSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5AQCAtNDcsNyAmIzQzOzQ3LDYgQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpXG4ge1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XG4gXHRzdHJ1Y3QgZG1zaW50Y19zdGF0ZSAqZHMgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZG1zaW50Y19zdGF0ZTtcbiBcbiBcdGlmICghbGV2ZWwpXG5AQCAtNTcsOSAmIzQzOzU2LDExIEBAIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0aWYgKCFkcylcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHR2Y3B1X2lycS5pcnEgPSBJTlRfQVZFQztcbiYjNDM7XHRpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRzZXRfYml0KHZlY3RvciwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZkcy1cdTAwM2V2ZWN0b3JfbWFwKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4mIzQzO1x0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfQVZFQyk7XG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uYzZhMzA5Njk1MDMwMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuQEAgLTE3LDcgJiM0MzsxNyw4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxuIFx0XHRpZiAoIShzLVx1MDAzZXN0YXR1cyBcdTAwMjYgQklUKEVJT0lOVENfRU5BQkxFX0lOVF9FTkNPREUpKSkge1xuIFx0XHRcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xuIFx0XHRcdGlwbnVtID0gaXBudW0gXHUwMDNjIDQgPyBpcG51bSA6IDA7XG4tXHRcdH1cbiYjNDM7XHRcdH0gZWxzZSBpZiAoaXBudW0gXHUwMDNlPSBMT09OR1NPTl9JUF9OVU0pXG4mIzQzO1x0XHRcdGlwbnVtID0gMDtcbiBcbiBcdFx0Y3B1aWQgPSAoKHU4ICopcy1cdTAwM2Vjb3JlbWFwKVtpcnFdO1xuIFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXHUwMDNla3ZtLCBjcHVpZCk7XG5AQCAtMzYsMTMgJiM0MzszNywxMyBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4ge1xuIFx0aW50IGlwbnVtLCBjcHUsIGZvdW5kO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XG4gXG4gXHRpcG51bSA9IChzLVx1MDAzZWlwbWFwIFx1MDAzZVx1MDAzZSAoaXJxIC8gMzIgKiA4KSkgXHUwMDI2IDB4ZmY7XG4gXHRpZiAoIShzLVx1MDAzZXN0YXR1cyBcdTAwMjYgQklUKEVJT0lOVENfRU5BQkxFX0lOVF9FTkNPREUpKSkge1xuIFx0XHRpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTtcbiBcdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbi1cdH1cbiYjNDM7XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuJiM0MztcdFx0aXBudW0gPSAwO1xuIFxuIFx0Y3B1ID0gcy1cdTAwM2Vzd19jb3JlbWFwW2lycV07XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXHUwMDNla3ZtLCBjcHUpO1xuQEAgLTY3LDggJiM0Mzs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4gXHRpZiAoZm91bmQgXHUwMDNjIEVJT0lOVENfSVJRUylcbiBcdFx0cmV0dXJuOyAvKiBvdGhlciBpcnEgaXMgaGFuZGxpbmcsIG5lZWRuJiMzOTt0IHVwZGF0ZSBwYXJlbnQgaXJxICovXG4gXG4tXHR2Y3B1X2lycS5pcnEgPSBsZXZlbCA/IChJTlRfSFdJMCAmIzQzOyBpcG51bSkgOiAtKElOVF9IV0kwICYjNDM7IGlwbnVtKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4mIzQzO1x0aWYgKGxldmVsKVxuJiM0MztcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIElOVF9IV0kwICYjNDM7IGlwbnVtKTtcbiYjNDM7XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZWlvaW50Y191cGRhdGVfc3dfY29yZW1hcChzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmI3NzQ0ZGNiZGQ4ZTNkIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG5AQCAtMTAsMTYgJiM0MzsxMCwxNSBAQFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyB8PSBkYXRhO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmICgoc3RhdHVzID09IDApIFx1MDAyNlx1MDAyNiBkYXRhKSB7XG4tXHRcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xuLVx0XHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2aXJxKTtcbiYjNDM7XHRcdGt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XG4mIzQzO1x0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbkBAIC00MCwxNiAmIzQzOzM5LDE1IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXHUwMDI2PSB+ZGF0YTtcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmIChzdGF0dXMgPT0gMCkge1xuLVx0XHRpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuJiM0MztcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIExBUkNIX0lOVF9JUEkpO1xuJiM0MztcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xuaW5kZXggMjBjMjA3ZDgwZTMxYWUuLjgyYzk2ODU0ZGY5M2UxIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xuQEAgLTE0NjUsNiAmIzQzOzE0NjUsOSBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcbiBcdGlmICh2ZWN0b3IgXHUwMDNlPSBFWENDT0RFX0lOVF9OVU0pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkgXHUwMDI2XHUwMDI2ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xNDcyLDEwICYjNDM7MTQ3NSw4IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuIFx0XHRrdm1fcXVldWVfaXJxKHZjcHUsIGludHIpO1xuIFx0ZWxzZSBpZiAoaW50ciBcdTAwM2MgMClcbiBcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTtcbi1cdGVsc2Uge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBpbnZhbGlkIGludGVycnVwdCBpb2N0bCAlZFxcblwmIzM0OywgX19mdW5jX18sIGlycS1cdTAwM2VpcnEpO1xuJiM0MztcdGVsc2VcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUmIzM0OywKICAgICYjMzQ7ZWlvaW50Y191cGRhdGVfaXJxJiMzNDssCiAgICAmIzM0O2lwaV9zZXQmIzM0OywKICAgICYjMzQ7aXBpX2NsZWFyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWMzZTg2OTNkOWFmZDdmNTVhYTZmNTQ5M2YyNDM0Y2U1NGYzMWMzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDAzOjE4OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jCmluZGV4IGRlMjU3MzVjZTAzOTQ2Li5hNzI2YzZjYWZlYzMzYSAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYwpAQCAtNDcsNyAmIzQzOzQ3LDYgQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpCiB7Ci0Jc3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7CiAJc3RydWN0IGRtc2ludGNfc3RhdGUgKmRzID0gJmFtcDt2Y3B1LSZndDthcmNoLmRtc2ludGNfc3RhdGU7CiAKIAlpZiAoIWxldmVsKQpAQCAtNTcsOSAmIzQzOzU2LDExIEBAIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLAogCWlmICghZHMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7CiYjNDM7CWlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXNldF9iaXQodmVjdG9yLCAodW5zaWduZWQgbG9uZyAqKSZhbXA7ZHMtJmd0O3ZlY3Rvcl9tYXApOwotCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO3ZjcHVfaXJxKTsKJiM0MzsJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfQVZFQyk7CiAJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jCmluZGV4IDJiMTQ0ODVkMTRhNzA4Li5jNmEzMDk2OTUwMzAzNCAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYwpAQCAtMTcsNyAmIzQzOzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpCiAJCWlmICghKHMtJmd0O3N0YXR1cyAmYW1wOyBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7CiAJCQlpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTsKIAkJCWlwbnVtID0gaXBudW0gJmx0OyA0ID8gaXBudW0gOiAwOwotCQl9CiYjNDM7CQl9IGVsc2UgaWYgKGlwbnVtICZndDs9IExPT05HU09OX0lQX05VTSkKJiM0MzsJCQlpcG51bSA9IDA7CiAKIAkJY3B1aWQgPSAoKHU4ICopcy0mZ3Q7Y29yZW1hcClbaXJxXTsKIAkJdmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChzLSZndDtrdm0sIGNwdWlkKTsKQEAgLTM2LDEzICYjNDM7MzcsMTMgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKQogewogCWludCBpcG51bSwgY3B1LCBmb3VuZDsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7CiAKIAlpcG51bSA9IChzLSZndDtpcG1hcCAmZ3Q7Jmd0OyAoaXJxIC8gMzIgKiA4KSkgJmFtcDsgMHhmZjsKIAlpZiAoIShzLSZndDtzdGF0dXMgJmFtcDsgQklUKEVJT0lOVENfRU5BQkxFX0lOVF9FTkNPREUpKSkgewogCQlpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTsKIAkJaXBudW0gPSBpcG51bSAmbHQ7IDQgPyBpcG51bSA6IDA7Ci0JfQomIzQzOwl9IGVsc2UgaWYgKGlwbnVtICZndDs9IExPT05HU09OX0lQX05VTSkKJiM0MzsJCWlwbnVtID0gMDsKIAogCWNwdSA9IHMtJmd0O3N3X2NvcmVtYXBbaXJxXTsKIAl2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtJmd0O2t2bSwgY3B1KTsKQEAgLTY3LDggJiM0Mzs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiAJaWYgKGZvdW5kICZsdDsgRUlPSU5UQ19JUlFTKQogCQlyZXR1cm47IC8qIG90aGVyIGlycSBpcyBoYW5kbGluZywgbmVlZG4mIzM5O3QgdXBkYXRlIHBhcmVudCBpcnEgKi8KIAotCXZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICYjNDM7IGlwbnVtKSA6IC0oSU5UX0hXSTAgJiM0MzsgaXBudW0pOwotCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO3ZjcHVfaXJxKTsKJiM0MzsJaWYgKGxldmVsKQomIzQzOwkJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWVsc2UKJiM0MzsJCWt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMKaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmI3NzQ0ZGNiZGQ4ZTNkIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwpAQCAtMTAsMTYgJiM0MzsxMCwxNSBAQAogc3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpCiB7CiAJdWludDMyX3Qgc3RhdHVzOwotCXN0cnVjdCBrdm1faW50ZXJydXB0IGlycTsKIAogCXNwaW5fbG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgfD0gZGF0YTsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmICgoc3RhdHVzID09IDApICZhbXA7JmFtcDsgZGF0YSkgewotCQlpcnEuaXJxID0gTEFSQ0hfSU5UX0lQSTsKLQkJa3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsICZhbXA7aXJxKTsKJiM0MzsJCWt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKQpAQCAtNDAsMTYgJiM0MzszOSwxNSBAQCBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpCiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKQogewogCXVpbnQzMl90IHN0YXR1czsKLQlzdHJ1Y3Qga3ZtX2ludGVycnVwdCBpcnE7CiAKIAlzcGluX2xvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgJmFtcDs9IH5kYXRhOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmIChzdGF0dXMgPT0gMCkgewotCQlpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7Ci0JCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO2lycSk7CiYjNDM7CQlrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwppbmRleCAyMGMyMDdkODBlMzFhZS4uODJjOTY4NTRkZjkzZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwpAQCAtMTQ2NSw2ICYjNDM7MTQ2NSw5IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKQogCWlmICh2ZWN0b3IgJmd0Oz0gRVhDQ09ERV9JTlRfTlVNKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAoa3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSAmYW1wOyZhbXA7ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTQ3MiwxMCAmIzQzOzE0NzUsOCBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSkKIAkJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBpbnRyKTsKIAllbHNlIGlmIChpbnRyICZsdDsgMCkKIAkJa3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTsKLQllbHNlIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBpbnZhbGlkIGludGVycnVwdCBpb2N0bCAlZFxuJiMzNDssIF9fZnVuY19fLCBpcnEtJmd0O2lycSk7CiYjNDM7CWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvb25nQXJjaCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBMb29uZ0FyY2ggS1ZNLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY2hhbmdlcyB0byBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgLCBgZWlvaW50Y191cGRhdGVfaXJxYCwgYGlwaV9zZXRgLCBgaXBpX2NsZWFyYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBjYWxscyB0byBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCB3aXRoIGBrdm1fcXVldWVfaXJxYCBhbmQgYGt2bV92Y3B1X2tpY2tgLiBUaGVyZSYjMzk7cyBhbHNvIGEgbmV3IGNoZWNrIGFkZGVkIGluIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgOiBgaWYgKGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHZjcHUtJmd0O2t2bSkpIHJldHVybiAtRUlOVkFMO2AuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGZ1enogdGhpcz8gSXMgdGhpcyBldmVuIHJlYWNoYWJsZSBhbmQgd29ydGggdGhlIGVmZm9ydD8gIExvb25nQXJjaCwgdGhhdCYjMzk7cyB0aGUgYXJjaGl0ZWN0dXJlLiBOb3csIGRvZXMgc3l6a2FsbGVyIHBsYXkgbmljZSB3aXRoIExvb25nQXJjaCBLVk0/ICBJIGtub3cgc3RhbmRhcmQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBwcmUtYnVpbHQgc2V0dXAgZm9yIGl0LiAgQnV0LCB3YWl0LCB0aGVzZSBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBJIHJlbWVtYmVyIHJlYWRpbmcuLi4gaXQgbWVudGlvbnMgcGF0aHMgdGhhdCBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGVzcGVjaWFsbHkgd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uICBBaCwgYnV0IFFFTVUgKmRvZXMqIHN1cHBvcnQgTG9vbmdBcmNoLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQuIEJ1dCwgZG9lcyBzeXprYWxsZXIgKnJ1biogTG9vbmdBcmNoIEtWTT8gVGhlIHN0YW5kYXJkIGJ1aWxkcyB0YXJnZXQgeDg2XzY0LCBhcm02NCwgcmlzY3Y2NCwgZXRjLiBCdXQsIHRoZSBwYXRjaCBpcyBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL2AsIHNvIGNsZWFybHksIHdlICpuZWVkKiBhIExvb25nQXJjaCBob3N0IHRvIHJ1biBLVk0sIHJpZ2h0PwoKU28sIGNhbiB3ZSBmdXp6IExvb25nQXJjaCBLVk0/ICBJZiB3ZSYjMzk7cmUgKm9uKiBhIExvb25nQXJjaCBob3N0LCB5ZXMsIGRlZmluaXRlbHkuIEJhY2sgdG8gdGhlIGRvYywgdGhvdWdoOiAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uJiMzNDsuIEJ1dCwgTG9vbmdBcmNoIEtWTSAqaXMqIHJlYWNoYWJsZSBpZiB3ZSBydW4gUUVNVSB3aXRoIEtWTSBvbiBhIExvb25nQXJjaCBob3N0LiBPa2F5LCBsZXQmIzM5O3MgYXNzdW1lIGl0JiMzOTtzIGZ1enphYmxlIGlmIGl0JiMzOTtzIGZ1bmN0aW9uYWwuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgY2FsbGVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEtWTV9JTlRFUlJVUFRgIGlvY3RsLiBUaGUgcGF0Y2ggYWRkcyB0aGF0IGBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbGAgY2hlY2suICBCYXNpY2FsbHksIGlmIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLCB1c2Vyc3BhY2UgKmNhbm5vdCogaW5qZWN0IGludGVycnVwdHMgdmlhIGBLVk1fSU5URVJSVVBUYC4gIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZS4gRnVydGhlcm1vcmUsIHRoZSBpbnRlcm5hbCBLVk0gY29kZSAoZS5nLiwgdGhvc2UgYGRtc2ludGMuLi5gIGZ1bmN0aW9ucyksIHdoaWNoICp1c2VkKiB0byBjYWxsIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGludGVybmFsbHksIG5vdyBkaXJlY3RseSBjYWxsIGBrdm1fcXVldWVfaXJxYCBhbmQgYGt2bV92Y3B1X2tpY2tgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGUgb2xkIGNvZGUgd291bGQgcmV0dXJuIGAtRUlOVkFMYCB1bmRlciB0aGUgbmV3IGFkZGVkIGNvbmRpdGlvbi4KCkkgbmVlZCB0byBjb25maXJtIEtjb25maWcgc2V0dGluZ3MuIEkgbmVlZCBgQ09ORklHX0tWTWAgYXQgYSBtaW5pbXVtLiAgSSBzaG91bGQgcHJvYmFibHkgc2VhcmNoIGZvciBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM9MTQyNT12b2lkIGt2bV9sb3NlX2ZwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDU5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYzoxNDYwOmludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDYxLXtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jPTE0ODY9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDk5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYzoxNTAwOlx0XHRyZXR1cm4ga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFx1MDAyNmlycSk7XG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE1MDEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJbnRlcnJ1cHQgQ29udHJvbGxlciBJbnRlcmFjdGlvbnMgaW4gS1ZNKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBwbHVzIGl0IHNlZW1zIHRvIGJlIG1lc3Npbmcgd2l0aCB0aGUgaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXJzLiBSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYGRtc2ludGNgLCBgZWlvaW50Y2AsIGFuZCBgaXBpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSBjaGFuZ2VzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0IGZvciB0aGVzZS4gTGV0JiMzOTtzIGdldCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciB0aG9zZSBjb250cm9sbGVycyBzdHJhaWdodCBpbiBteSBoZWFkIOKAkyB0aGF0JiMzOTtsbCBnaXZlIG1lIGEgbXVjaCBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIHBvdGVudGlhbCBzY29wZSBhbmQgaW1wYWN0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGJpZyBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDc5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBLVk0gY29uZmlndXJhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gaW50ZXJydXB0IGRlbGl2ZXJ5LCBzcGVjaWZpY2FsbHkgaG93IGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHRzIChJUElzKSBhcmUgaGFuZGxlZC4gSSYjMzk7dmUgZ290IGEgZmV3IGtleSBzeW1ib2xzIEkmIzM5O20gdHJhY2tpbmc6IGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYW5kIGBpcGlfY2xlYXJgLiBUaGVzZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZmxvdy4KCldhaXQgYSBzZWNvbmTigKYgYGlwaV9zZXRgIGFuZCBgaXBpX2NsZWFyYOKApiB0aG9zZSBhcmUgZGVmaW5lZCBhcyBzdGF0aWMuIEhtbSwgdGhpcyBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIGhhcmRlciB0byB0cmFjZSwgYXMgdGhleSBhcmVuJiMzOTt0IG5lY2Vzc2FyaWx5IGV4cG9zZWQgb3V0c2lkZSB0aGUgZmlsZSB0aGV5IGFyZSBkZWZpbmVkIGluLiBBbHJpZ2h0LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqcmVhY2hhYmxlKiB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXkmIzM5O3JlIGV2ZW4gY2FsbGVkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHRyYWNlIHRoZWlyIHVzYWdlIGZyb20gd2hlcmUgdGhleSBhcmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwaV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy05LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MTA6c3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0xMS17XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MjQ9c3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTM1LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MzY6XHRpcGlfc2V0KHZjcHUsIEJJVChkYXRhIFx1MDAyNiAweDFmKSk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0zNy19XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MjIxPXN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zdCB2b2lkICp2YWwpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMjM5LVx0Y2FzZSBJT0NTUl9JUElfU0VUOlxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MjQwOlx0XHRpcGlfc2V0KHZjcHUsIGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMjQxLVx0XHRicmVhaztcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0zNjg9c3RhdGljIGludCBrdm1faXBpX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzc5LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MzgwOnN0YXRpYyBpbnQga3ZtX2lwaV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzgxLVx0XHRcdHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9NDU1PXN0YXRpYyBzdHJ1Y3Qga3ZtX2RldmljZV9vcHMga3ZtX2lwaV9kZXZfb3BzID0ge1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQ1OC1cdC5kZXN0cm95ID0ga3ZtX2lwaV9kZXN0cm95LFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDU5Olx0LnNldF9hdHRyID0ga3ZtX2lwaV9zZXRfYXR0cixcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQ2MC1cdC5nZXRfYXR0ciA9IGt2bV9pcGlfZ2V0X2F0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgSW50ZXJydXB0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBsb29uZ2FyY2hgIGFyY2hpdGVjdHVyZSBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgRXh0ZXJuYWwgSW50ZXJydXB0IENvbnRyb2xsZXIgKEVJQyksIGxpa2VseSBpbiBhbiBlbWJlZGRlZCBzeXN0ZW0uIFRoZSB0cmFpbCBzdGFydHMgd2l0aCBgaXBpX3NlbmRgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbG9vbmdhcmNoX2lwaV93cml0ZWxgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgYGxvb25nYXJjaF9pcGlfd3JpdGVsYCBtdXN0IGJlIHRoZSBNZW1vcnktTWFwcGVkIEkvTyAoTU1JTykgaGFuZGxlciBmb3IgSW50ZXItUHJvY2Vzc29yIEludGVycnVwdHMgKElQSXMpIG9uIHRoaXMgc3lzdGVtLiBTbywgd3JpdGluZyB0byBhIHNwZWNpZmljIE1NSU8gYWRkcmVzcyB0cmlnZ2VycyBhbiBJUEkgc2VuZC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBFSUMgY29tZXMgaW4uIEkgc2VlIGBlaW9pbnRjX3VwZGF0ZV9pcnFgIGJlaW5nIGNhbGxlZC4gVGhpbmtpbmcgYmFjayB0byBob3cgdGhlIGVpY2ludGMgZHJpdmVyIHdvcmtzLCBJIHN1c3BlY3QgYGVpb2ludGNfdXBkYXRlX2lycWAgaXMgY2FsbGVkIGZyb20gYGVpb2ludGNfc2V0X2lycWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBtZWFucyBgZWlvaW50Y191cGRhdGVfaXJxYCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBpbnRlcnJ1cHRzIHZpc2libGUgYW5kIHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgRUlDIGNvbmZpZ3VyYXRpb24uIFNvLCB0aGUgaW50ZXJydXB0IGdldHMgc2V0LCBhbmQgdGhlbiB0aGUgZWljIGRyaXZlciBwcm9iYWJseSBtYWtlcyBzdXJlIHRoZSBFSUMgaXMgYXdhcmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHM6IElQSSB3cml0ZSwgd2hpY2ggaXMgaGFuZGxlZCBieSB0aGUgTU1JTyBoYW5kbGVyLCByZXN1bHRpbmcgaW4gYSBjYWxsIHRvIHNldCB0aGUgaW50ZXJydXB0IG9uIHRoZSBlaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vpb2ludGNfdXBkYXRlX2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTA9c3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTM1LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjM2OnN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0zNy17XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTc4PXN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTAyLVx0XHRcdC8qIGxvd2VyIGlycSBhdCBvbGQgY3B1IGFuZCByYWlzZSBpcnEgYXQgbmV3IGNwdSAqL1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjEwMzpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGksIDApO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEwNC1cdFx0XHRzLVx1MDAzZXN3X2NvcmVtYXBbaXJxICYjNDM7IGldID0gY3B1O1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjEwNTpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGksIDEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEwNi1cdFx0fSBlbHNlIHtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTEyPXZvaWQgZWlvaW50Y19zZXRfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMTgtXHRsZXZlbCA/IF9fc2V0X2JpdChpcnEsIGlzcikgOiBfX2NsZWFyX2JpdChpcnEsIGlzcik7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MTE5Olx0ZWlvaW50Y191cGRhdGVfaXJxKHMsIGlycSwgbGV2ZWwpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEyMC1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTIwNz1zdGF0aWMgaW50IGxvb25nYXJjaF9laW9pbnRjX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjQ3LVx0XHRcdGlycSA9IF9fZmZzKGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI0ODpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGluZGV4ICogNjQsIDEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI0OS1cdFx0XHRkYXRhIFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjU3LVx0XHRcdGlycSA9IF9fZmZzKGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI1ODpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGluZGV4ICogNjQsIDApO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI1OS1cdFx0XHRkYXRhIFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjc3LVx0XHRcdGlycSA9IF9fZmZzKGRhdGEpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI3ODpcdFx0XHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICYjNDM7IGluZGV4ICogNjQsIDApO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI3OS1cdFx0XHRkYXRhIFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246CgoqKlRyYWNpbmcgdGhlIEludGVycnVwdCBIYW5kbGVyIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBlaW9pbnRjX3NldF9pcnFgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGNhbGxlZCBmcm9tPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBpdCBjYWxsZWQgZnJvbSBhIGRyaXZlcj8gSXMgaXQgcGFydCBvZiB0aGUgY29yZSBpbnRlcnJ1cHQgY29udHJvbGxlciBpbml0aWFsaXphdGlvbj8gV2hhdCYjMzk7cyB0aGUgY2FsbCBncmFwaCBsb29rIGxpa2U/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzLiBJIHdvdWxkIHJlYWNoIGZvciBncmVwIG9yIGEgc2ltaWxhciBzZWFyY2ggdG9vbCwgbWF5YmUgd2l0aGluIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBvciBkaXJlY3RvcnkgcmVsYXRlZCB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7ZCBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciB0aGUgZXhhY3Qgc3RyaW5nLCBsb29raW5nIGZvciBkaXJlY3QgY2FsbHMgdG8gYGVpb2ludGNfc2V0X2lycWAuIEkgY291bGQgYWxzbyBsZXZlcmFnZSB0aGUgY3Jvc3MtcmVmZXJlbmNpbmcgY2FwYWJpbGl0aWVzIG9mIG15IElERSBvciBhIGNvZGUgYW5hbHlzaXMgdG9vbCBpZiBhdmFpbGFibGUuCgpEZXBlbmRpbmcgb24gdGhlIHNlYXJjaCByZXN1bHRzLCBteSBmb2N1cyB3b3VsZCBzaGlmdC4gSWYgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBsaW1pdGVkIG51bWJlciBvZiBwbGFjZXMsIEkmIzM5O2xsIGV4YW1pbmUgdGhvc2UgY2FsbCBzaXRlcyBkaXJlY3RseSB0byBkZXRlcm1pbmUgdGhlIHB1cnBvc2UgYW5kIGhvdyB0aGUgaW50ZXJydXB0IGlzIGJlaW5nIGNvbmZpZ3VyZWQuIElmIHRoZSBzZWFyY2ggeWllbGRzIGEgbG90IG9mIGhpdHMsIEkmIzM5O2xsIG5lZWQgdG8gbmFycm93IHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIG9yIGVtcGxveSBtb3JlIHNvcGhpc3RpY2F0ZWQgYW5hbHlzaXMgbWV0aG9kcywgc3VjaCBhcyB0cmFjaW5nIHRvb2xzIG9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgbW9kdWxlcyBpbnZvbHZlZC4gVWx0aW1hdGVseSwgSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDAzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vpb2ludGNfc2V0X2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTc4PXN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjExMjp2b2lkIGVpb2ludGNfc2V0X2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMTMte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYz0xMz1zdGF0aWMgdm9pZCBwY2hfcGljX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9wY2hfcGljICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTI0LVx0XHRcdGlycSA9IHMtXHUwMDNlaHRtc2lfdmVjdG9yW2lycV07XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM6MjU6XHRcdFx0ZWlvaW50Y19zZXRfaXJxKHMtXHUwMDNla3ZtLVx1MDAzZWFyY2guZWlvaW50YywgaXJxLCBsZXZlbCk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtMjYtXHRcdH1cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtMzAtXHRcdFx0aXJxID0gcy1cdTAwM2VodG1zaV92ZWN0b3JbaXJxXTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYzozMTpcdFx0XHRlaW9pbnRjX3NldF9pcnEocy1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjLCBpcnEsIGxldmVsKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy0zMi1cdFx0fVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYz03MT1pbnQgcGNoX21zaV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsIGludCBsZXZlbClcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtODAtXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM6ODE6XHRlaW9pbnRjX3NldF9pcnEoa3ZtLVx1MDAzZWFyY2guZWlvaW50YywgZS1cdTAwM2Vtc2kuZGF0YSwgbGV2ZWwpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTgyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTVNJIERlbGl2ZXJ5IGFuZCBJbnRlcnJ1cHQgUm91dGluZyoqCgpSaWdodCwgc28gYHBjaF9tc2lfc2V0X2lycWAgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYW4gTVNJIChNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCkgaXMgaW5qZWN0ZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHdlJiMzOTtyZSBjb25maWd1cmluZyB0aGUgc3lzdGVtIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0LiBCdXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3csIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTVNJIGdldHMgdG8gdGhlIFZpcnR1YWwgQ1BVLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgIGJlaW5nIGNhbGxlZCAqZnJvbSo/IElzIGl0IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHdpdGhpbiB0aGUgTVNJIGluamVjdGlvbiBwYXRoLCBvciBpcyB0aGVyZSBhbiBpbnRlcm1lZGlhdGUgaGFuZGxlcj8gSXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgUENJIHN1YnN5c3RlbSwgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGNvZGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LiBUaGF0IHdpbGwgdGVsbCBtZSBob3cgdGhlIE1TSSBpcyByb3V0ZWQgdG8gdGhlIHRhcmdldGVkIHZDUFUuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBjYWxsZXIgb2YgdGhhdCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBvZmZlciBhbnkgY2x1ZXMgb3IgaWYgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY2FsbCBzdGFja3MgYW5kIGxvb2sgZm9yIHRoZSBpbnRlcnJ1cHQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9MTE9dm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYy00Ni1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYzo0NzppbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYy00OC1cdFx0XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYz02OT1pbnQgZG1zaW50Y19zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGFkZHIsIGludCBkYXRhLCBpbnQgbGV2ZWwpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgxLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jOjgyOlx0cmV0dXJuIGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShrdm0sIHZjcHUsIGlycSwgbGV2ZWwpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIEludGVycnVwdCBIYW5kbGVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZG1zaW50Y19zZXRfaXJxYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBmb3IgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIHRoaXMgc3BlY2lmaWMgaW50ZXJydXB0IGluaXRpYWxpemF0aW9uIGlzIHRyaWdnZXJlZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBjb25maWd1cmF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgd2lsbCBjYWxsIGl0LCBzbyBJIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGguIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gdXNlIHNvbWUgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIG9yIHNlYXJjaCB3aXRoaW4gdGhlIHByb2plY3QgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzLiBUaGVuIEkgY2FuIGRldGVybWluZSB3aGF0IHRoaXMgaW50ZXJydXB0IGlzIHJlbGF0ZWQgdG8gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgaW50ZXJydXB0IGhhbmRsaW5nIHN5c3RlbSwgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IGlzLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyB0ZWNobmlxdWUgdG8gdW5kZXJzdGFuZCBpbnRlcnJ1cHQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1zaW50Y19zZXRfaXJxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9NDc9aW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTY4LVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jOjY5OmludCBkbXNpbnRjX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgaW50IGRhdGEsIGludCBsZXZlbClcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYy03MC17XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jPTcxPWludCBwY2hfbXNpX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy03Ny1cdFx0bXNnX2FkZHIgXHUwMDNjIChrdm0tXHUwMDNlYXJjaC5kbXNpbnRjLVx1MDAzZW1zZ19hZGRyX2Jhc2UgJiM0Mzsga3ZtLVx1MDAzZWFyY2guZG1zaW50Yy1cdTAwM2Vtc2dfYWRkcl9zaXplKSkge1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jOjc4Olx0XHRyZXR1cm4gZG1zaW50Y19zZXRfaXJxKGt2bSwgbXNnX2FkZHIsIGUtXHUwMDNlbXNpLmRhdGEsIGxldmVsKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy03OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNU0kgYW5kIEludGVycnVwdCBJbmplY3Rpb24gb24gTG9vbmdBcmNoIHdpdGggS1ZNKioKCk9rYXksIHNvIGBwY2hfbXNpX3NldF9pcnFgIGlzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgTVNJIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkga25vdyB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSBoaXQgd2hlbiBLVk0gaXMgcnVubmluZyBvbiBMb29uZ0FyY2guIEl0IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIGZ1enppbmcgdGhpczsgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGludGVycnVwdCBpbmplY3Rpb24gaW4gS1ZNLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgpJIHNlZSBhIGd1YXJkIGNvbmRpdGlvbiBhZGRlZCBpbiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YDogYGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSkgcmV0dXJuIC1FSU5WQUw7YC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYSBjaGVjayBiZWZvcmUgbWVzc2FnZSBpbnRlcnJ1cHQgZGVsaXZlcnksIG1ha2VzIHNlbnNlLgoKVGhlbiB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiBpbiBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlIGFkZGVkIGNvZGUgYmxvY2sgbG9va3MgbGlrZSBhIGNydWNpYWwgZml4OgoKYGBgYwoJaWYgKCEocy0mZ3Q7c3RhdHVzICZhbXA7IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHsKCQlpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTsKCQlpcG51bSA9IGlwbnVtICZsdDsgNCA/IGlwbnVtIDogMDsKCX0gZWxzZSBpZiAoaXBudW0gJmd0Oz0gTE9PTkdTT05fSVBfTlVNKQoJCWlwbnVtID0gMDsKYGBgCgpUaGlzIGNsZWFybHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWUgaWYgYGlwbnVtYCBnb2VzIGJleW9uZCBgTE9PTkdTT05fSVBfTlVNYC4gSSBzdXNwZWN0IGBMT09OR1NPTl9JUF9OVU1gIGlzIGxpa2VseSBlcXVhbCB0byA4LiBJZiBgaXBudW1gIGlzIG91dCBvZiBib3VuZHMsIHRoaXMgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluY29ycmVjdCBpbnRlcnJ1cHQgaW5qZWN0aW9uLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgZml4LCBhYnNvbHV0ZWx5LgoKSSB3YW50IHRvIGNoZWNrIHRoYXQgYExPT05HU09OX0lQX05VTWAgdmFsdWUuIExldCYjMzk7cyBsb29rIHVwIGhvdyBpdCYjMzk7cyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMT09OR1NPTl9JUF9OVU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC01MS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmg6NTI6I2RlZmluZSBMT09OR1NPTl9JUF9OVU1cdFx0XHQ4XG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oLTUzLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaD01ND1zdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMge1xuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmgtNzYtXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oOjc3Olx0REVDTEFSRV9CSVRNQVAoc3dfY29yZWlzcltFSU9JTlRDX1JPVVRFX01BWF9WQ1BVU11bTE9PTkdTT05fSVBfTlVNXSwgRUlPSU5UQ19JUlFTKTtcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmgtNzgtXHR1aW50OF90ICBzd19jb3JlbWFwW0VJT0lOVENfSVJRU107XG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTEwPXN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xOS1cdFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjIwOlx0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTIxLVx0XHRcdGlwbnVtID0gMDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MzY9c3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy00NC1cdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo0NTpcdH0gZWxzZSBpZiAoaXBudW0gXHUwMDNlPSBMT09OR1NPTl9JUF9OVU0pXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNDYtXHRcdGlwbnVtID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gYExPT05HU09OX0lQX05VTWAgaXMgY29uZmlybWVkIHRvIGJlIDguIFRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgdnVsbmVyYWJpbGl0eSBiZWNhdXNlIGBpcG51bWAgd2FzIGFibGUgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDguIFRoaXMgY2F1c2VzIGlzc3VlcyB3aXRoIGBzd19jb3JlaXNyYCBvciBpbnZhbGlkIGludGVycnVwdCBpbmplY3Rpb24sIHJpZ2h0PyBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZywgSSYjMzk7ZCBzYXkuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAKKiAgIGBlaW9pbnRjX3VwZGF0ZV9pcnFgCiogICBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YAoqICAgYGlwaV9zZXRgCiogICBgaXBpX2NsZWFyYAoKSG9sZCBvbi4uLiBgaXBpX3NldGAgYW5kIGBpcGlfY2xlYXJgIGFyZSBzdGF0aWMuIFNob3VsZCB3ZSBiZSB0YXJnZXRpbmcgdGhlbT8gWWVhaCwgd2UgY2FuIGluY2x1ZGUgc3RhdGljIGZ1bmN0aW9ucy4gQnV0LCB3YWl0IGEgbWludXRlLCBgZWlvaW50Y191cGRhdGVfaXJxYCBpcyBhbHNvIHN0YXRpYyEKCk9rYXksIG5ldyBwbGFuLiBXZSYjMzk7bGwgdXNlOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC4KCldhaXQsIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGlzIGV4cG9ydGVkLCBpdCYjMzk7cyBnbG9iYWwhIEdvb2QuIExldCYjMzk7cyBtYWtlIHN1cmUgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAgaXMgZ2xvYmFsLCB0b28uIFllcCwgaXQgaXMuCgpUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBtYWtlIHN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3MgYXJlIGNvcnJlY3QuIEkmIzM5O20gc2VlaW5nIGBLVk1gIGFzIHRoZSBwcmltYXJ5IG9uZSwgYXJlIHRoZXJlIGFueSBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2Ugd2UgbmVlZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctNy1cbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxOAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA5ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBMb29uZ0FyY2ggS1ZNIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBzZXQgYW5kIGhlcmUmIzM5O3MgbXkgcGxhbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBzZXZlcmFsIGtleSBmdW5jdGlvbnMuIEZpcnN0LCBgS1ZNYCBpcyBkZWZpbml0ZWx5IHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiBvcHRpb24uICBUaGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgc2V2ZXJhbCBmdW5jdGlvbnMsIGJ1dCBgVklSVFVBTElaQVRJT05gIGlzIGxpc3RlZCBhcyBhIG1lbnVjb25maWcsIHNvLCBvYnZpb3VzbHksIHdlIHdpbGwgaW5jbHVkZSBgS1ZNYC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZyBvcHRpb25zLCBzbyB3ZSBjYW4gc3RpY2sgdG8gYEtWTWAuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBmdW5jdGlvbnMuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUg4oCTIHllcywgY29uZmlybWVkLiAgQW5kIHdoaWxlIGBrdm1fcXVldWVfaXJxYCBpcyBhIGhvdCBwYXRoIHdoZW4gaXQmIzM5O3MgY2FsbGVkLCB0aGVzZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBtb2RpZnkgaW50ZXJydXB0IGluamVjdGlvbiBsb2dpYyBvbiBMb29uZ0FyY2guIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgLCBgZWlvaW50Y191cGRhdGVfaXJxYCwgYGlwaV9zZXRgLCBgaXBpX2NsZWFyYCwgYW5kIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBhcmUgdGhlIG9uZXMgd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBFdmVuIHRob3VnaCBpbnRlcnJ1cHQgZGVsaXZlcnkgY2FuIGJlIHBvdGVudGlhbGx5IGhvdCwgdGhlc2UgYXJlIHNwZWNpZmljIHRvIEtWTSBpbnRlcnJ1cHQgY29udHJvbGxlcnMsIHdoaWNoIGFyZSBvbiBMb29uZ0FyY2guIEZ1enppbmcgdGhlc2Ugc2hvdWxkIGRpcmVjdGx5IHRhcmdldCB0aGUgS1ZNIGludGVycnVwdCBpbmplY3Rpb24gbG9naWMsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY2hhbmdlcyBhZ2Fpbi4gVGhlIGZpcnN0LCBpbiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgY2xlYXJseSByZXN0cmljdHMgdXNlci1zcGFjZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHdoZW4gdGhlIGluLWtlcm5lbCBpcnFjaGlwIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBzZWNvbmQgY2hhbmdlLCBpbiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYWx0ZXJzIGhvdyBNU0kgaXMgZGVsaXZlcmVkIGludGVybmFsbHkuICBXZSBieXBhc3MgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgYW5kIGFsc28gYWRkIGEgY2hlY2sgZm9yIGBrdm1fZ3Vlc3RfaGFzX21zZ2ludGAuCgpUaGUgdGhpcmQgY2hhbmdlIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgaXNzdWUgcmVnYXJkaW5nIGBpcG51bWAuCgpBbGwgb2YgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgY29yZSBLVk0gbG9naWMgb24gTG9vbmdBcmNoLiAgVGhleSBpbnRyb2R1Y2UgY2hlY2tzLCBpbXByb3ZlIGludGVycnVwdCBkZWxpdmVyeSBwYXRod2F5cywgYW5kIGFkZHJlc3MgcG90ZW50aWFsIGJ1Z3MuIFRoZXJlZm9yZSwgZnV6emluZyB0aGVtIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb246IGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYW5kIGBpcGlfY2xlYXJgLiBUaGUgYEtWTWAgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBlbmFibGVkLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gcHJpb3JpdGl6ZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGZ1enppbmcgY2FtcGFpZ24gdG8gZW5zdXJlIHdlIGNvdmVyIHRoZSBuZXcgbG9naWMgYW5kIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2Rtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdSYjMzQ7LAogICAgJiMzNDtlaW9pbnRjX3VwZGF0ZV9pcnEmIzM0OywKICAgICYjMzQ7aXBpX3NldCYjMzQ7LAogICAgJiMzNDtpcGlfY2xlYXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSXQgcmVzdHJpY3RzIHVzZXItc3BhY2UgaW50ZXJydXB0IGluamVjdGlvbiB3aGVuIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLCBjaGFuZ2VzIGludGVybmFsIGludGVycnVwdCBkZWxpdmVyeSB0byBieXBhc3MgdGhlIGlvY3RsIHBhdGgsIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlIHdpdGggYGlwbnVtYCBpbiBgZWlvaW50Y19zZXRfc3dfY29yZWlzcmAgYW5kIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7ZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1JiMzNDssCiAgICAmIzM0O2Vpb2ludGNfdXBkYXRlX2lycSYjMzQ7LAogICAgJiMzNDtpcGlfc2V0JiMzNDssCiAgICAmIzM0O2lwaV9jbGVhciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBJdCByZXN0cmljdHMgdXNlci1zcGFjZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHdoZW4gdGhlIGluLWtlcm5lbCBpcnFjaGlwIGlzIGVuYWJsZWQsIGNoYW5nZXMgaW50ZXJuYWwgaW50ZXJydXB0IGRlbGl2ZXJ5IHRvIGJ5cGFzcyB0aGUgaW9jdGwgcGF0aCwgYW5kIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWUgd2l0aCBgaXBudW1gIGluIGBlaW9pbnRjX3NldF9zd19jb3JlaXNyYCBhbmQgYGVpb2ludGNfdXBkYXRlX2lycWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODoyNi4xNzkzMDE1NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3Nzg5NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgICBcImRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdVwiLFxuICAgIFwiZWlvaW50Y191cGRhdGVfaXJxXCIsXG4gICAgXCJpcGlfc2V0XCIsXG4gICAgXCJpcGlfY2xlYXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGxvZ2ljLiBJdCByZXN0cmljdHMgdXNlci1zcGFjZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIHdoZW4gdGhlIGluLWtlcm5lbCBpcnFjaGlwIGlzIGVuYWJsZWQsIGNoYW5nZXMgaW50ZXJuYWwgaW50ZXJydXB0IGRlbGl2ZXJ5IHRvIGJ5cGFzcyB0aGUgaW9jdGwgcGF0aCwgYW5kIGZpeGVzIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgaXNzdWUgd2l0aCBgaXBudW1gIGluIGBlaW9pbnRjX3NldF9zd19jb3JlaXNyYCBhbmQgYGVpb2ludGNfdXBkYXRlX2lycWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE4OjI2LjE3OTMxMTE5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzkzMjgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVjM2U4NjkzZDlhZmQ3ZjU1YWE2ZjU0OTNmMjQzNGNlNTRmMzFjM2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDM6MTg6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXFxuaW5kZXggZGUyNTczNWNlMDM5NDYuLmE3MjZjNmNhZmVjMzNhIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xcbkBAIC00Nyw3ICs0Nyw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xcbiBcXHRzdHJ1Y3QgZG1zaW50Y19zdGF0ZSAqZHMgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5kbXNpbnRjX3N0YXRlO1xcbiBcXG4gXFx0aWYgKCFsZXZlbClcXG5AQCAtNTcsOSArNTYsMTEgQEAgaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGlmICghZHMpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0dmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7XFxuK1xcdGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHNldF9iaXQodmVjdG9yLCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZkcy1cXHUwMDNldmVjdG9yX21hcCk7XFxuLVxcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcXHUwMDI2dmNwdV9pcnEpO1xcbitcXHRrdm1fcXVldWVfaXJxKHZjcHUsIElOVF9BVkVDKTtcXG4gXFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uYzZhMzA5Njk1MDMwMzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXFxuQEAgLTE3LDcgKzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXFxuIFxcdFxcdGlmICghKHMtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcXG4gXFx0XFx0XFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XFxuIFxcdFxcdFxcdGlwbnVtID0gaXBudW0gXFx1MDAzYyA0ID8gaXBudW0gOiAwO1xcbi1cXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoaXBudW0gXFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxcbitcXHRcXHRcXHRpcG51bSA9IDA7XFxuIFxcbiBcXHRcXHRjcHVpZCA9ICgodTggKilzLVxcdTAwM2Vjb3JlbWFwKVtpcnFdO1xcbiBcXHRcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXFx1MDAzZWt2bSwgY3B1aWQpO1xcbkBAIC0zNiwxMyArMzcsMTMgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbiB7XFxuIFxcdGludCBpcG51bSwgY3B1LCBmb3VuZDtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbi1cXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcXG4gXFxuIFxcdGlwbnVtID0gKHMtXFx1MDAzZWlwbWFwIFxcdTAwM2VcXHUwMDNlIChpcnEgLyAzMiAqIDgpKSBcXHUwMDI2IDB4ZmY7XFxuIFxcdGlmICghKHMtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcXG4gXFx0XFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XFxuIFxcdFxcdGlwbnVtID0gaXBudW0gXFx1MDAzYyA0ID8gaXBudW0gOiAwO1xcbi1cXHR9XFxuK1xcdH0gZWxzZSBpZiAoaXBudW0gXFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxcbitcXHRcXHRpcG51bSA9IDA7XFxuIFxcbiBcXHRjcHUgPSBzLVxcdTAwM2Vzd19jb3JlbWFwW2lycV07XFxuIFxcdHZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfaWQocy1cXHUwMDNla3ZtLCBjcHUpO1xcbkBAIC02Nyw4ICs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXFxuIFxcdGlmIChmb3VuZCBcXHUwMDNjIEVJT0lOVENfSVJRUylcXG4gXFx0XFx0cmV0dXJuOyAvKiBvdGhlciBpcnEgaXMgaGFuZGxpbmcsIG5lZWRuJ3QgdXBkYXRlIHBhcmVudCBpcnEgKi9cXG4gXFxuLVxcdHZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICsgaXBudW0pIDogLShJTlRfSFdJMCArIGlwbnVtKTtcXG4tXFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ2Y3B1X2lycSk7XFxuK1xcdGlmIChsZXZlbClcXG4rXFx0XFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCArIGlwbnVtKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgKyBpcG51bSk7XFxuK1xcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xcbmluZGV4IDRmYTA4OTdkN2JkYjAwLi5iNzc0NGRjYmRkOGUzZCAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXFxuQEAgLTEwLDE2ICsxMCwxNSBAQFxcbiBzdGF0aWMgdm9pZCBpcGlfc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWludDMyX3QgZGF0YSlcXG4ge1xcbiBcXHR1aW50MzJfdCBzdGF0dXM7XFxuLVxcdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XFxuIFxcdHN0YXR1cyA9IHZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cztcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzIHw9IGRhdGE7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0aWYgKChzdGF0dXMgPT0gMCkgXFx1MDAyNlxcdTAwMjYgZGF0YSkge1xcbi1cXHRcXHRpcnEuaXJxID0gTEFSQ0hfSU5UX0lQSTtcXG4tXFx0XFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZpcnEpO1xcbitcXHRcXHRrdm1fcXVldWVfaXJxKHZjcHUsIExBUkNIX0lOVF9JUEkpO1xcbitcXHRcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbkBAIC00MCwxNiArMzksMTUgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxcbiB7XFxuIFxcdHVpbnQzMl90IHN0YXR1cztcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzIFxcdTAwMjY9IH5kYXRhO1xcbiBcXHRzdGF0dXMgPSB2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0aWYgKHN0YXR1cyA9PSAwKSB7XFxuLVxcdFxcdGlycS5pcnEgPSAtTEFSQ0hfSU5UX0lQSTtcXG4tXFx0XFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZpcnEpO1xcbitcXHRcXHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XFxuK1xcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcXG5pbmRleCAyMGMyMDdkODBlMzFhZS4uODJjOTY4NTRkZjkzZTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcXG5AQCAtMTQ2NSw2ICsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXFxuIFxcdGlmICh2ZWN0b3IgXFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gpIFxcdTAwMjZcXHUwMDI2ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTE0NzIsMTAgKzE0NzUsOCBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcXG4gXFx0XFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBpbnRyKTtcXG4gXFx0ZWxzZSBpZiAoaW50ciBcXHUwMDNjIDApXFxuIFxcdFxcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCAtaW50cik7XFxuLVxcdGVsc2Uge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpcnEtXFx1MDAzZWlycSk7XFxuK1xcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4gXFxuIFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODoyNy41MzgwMTUzODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NzE5MTcyNTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV92Y3B1X2lvY3RsX2ludGVycnVwdFwiLFxuICAgIFwiZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1XCIsXG4gICAgXCJlaW9pbnRjX3VwZGF0ZV9pcnFcIixcbiAgICBcImlwaV9zZXRcIixcbiAgICBcImlwaV9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYzNlODY5M2Q5YWZkN2Y1NWFhNmY1NDkzZjI0MzRjZTU0ZjMxYzNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDM6MTg6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li5hNzI2YzZjYWZlYzMzYSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5AQCAtNDcsNyArNDcsNiBAQCB2b2lkIGRtc2ludGNfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gaW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2ZWN0b3IsIGludCBsZXZlbClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcbiBcdHN0cnVjdCBkbXNpbnRjX3N0YXRlICpkcyA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5kbXNpbnRjX3N0YXRlO1xuIFxuIFx0aWYgKCFsZXZlbClcbkBAIC01Nyw5ICs1NiwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmICghZHMpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7XG4rXHRpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c2V0X2JpdCh2ZWN0b3IsICh1bnNpZ25lZCBsb25nICopXHUwMDI2ZHMtXHUwMDNldmVjdG9yX21hcCk7XG4tXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dmNwdV9pcnEpO1xuK1x0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfQVZFQyk7XG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uYzZhMzA5Njk1MDMwMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuQEAgLTE3LDcgKzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXG4gXHRcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG4gXHRcdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbi1cdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuK1x0XHRcdGlwbnVtID0gMDtcbiBcbiBcdFx0Y3B1aWQgPSAoKHU4ICopcy1cdTAwM2Vjb3JlbWFwKVtpcnFdO1xuIFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXHUwMDNla3ZtLCBjcHVpZCk7XG5AQCAtMzYsMTMgKzM3LDEzIEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbiB7XG4gXHRpbnQgaXBudW0sIGNwdSwgZm91bmQ7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcbiBcbiBcdGlwbnVtID0gKHMtXHUwMDNlaXBtYXAgXHUwMDNlXHUwMDNlIChpcnEgLyAzMiAqIDgpKSBcdTAwMjYgMHhmZjtcbiBcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xuIFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuLVx0fVxuK1x0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcbitcdFx0aXBudW0gPSAwO1xuIFxuIFx0Y3B1ID0gcy1cdTAwM2Vzd19jb3JlbWFwW2lycV07XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXHUwMDNla3ZtLCBjcHUpO1xuQEAgLTY3LDggKzY4LDExIEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbiBcdGlmIChmb3VuZCBcdTAwM2MgRUlPSU5UQ19JUlFTKVxuIFx0XHRyZXR1cm47IC8qIG90aGVyIGlycSBpcyBoYW5kbGluZywgbmVlZG4ndCB1cGRhdGUgcGFyZW50IGlycSAqL1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gbGV2ZWwgPyAoSU5UX0hXSTAgKyBpcG51bSkgOiAtKElOVF9IV0kwICsgaXBudW0pO1xuLVx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFx1MDAyNnZjcHVfaXJxKTtcbitcdGlmIChsZXZlbClcbitcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCArIGlwbnVtKTtcbitcdGVsc2VcbitcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIElOVF9IV0kwICsgaXBudW0pO1xuK1x0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGVpb2ludGNfdXBkYXRlX3N3X2NvcmVtYXAoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbmluZGV4IDRmYTA4OTdkN2JkYjAwLi5iNzc0NGRjYmRkOGUzZCAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuQEAgLTEwLDE2ICsxMCwxNSBAQFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyB8PSBkYXRhO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmICgoc3RhdHVzID09IDApIFx1MDAyNlx1MDAyNiBkYXRhKSB7XG4tXHRcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xuLVx0XHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2aXJxKTtcbitcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbitcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbkBAIC00MCwxNiArMzksMTUgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuIHN0YXRpYyB2b2lkIGlwaV9jbGVhcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IGRhdGEpXG4ge1xuIFx0dWludDMyX3Qgc3RhdHVzO1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyBcdTAwMjY9IH5kYXRhO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4tXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0aWYgKHN0YXR1cyA9PSAwKSB7XG4tXHRcdGlycS5pcnEgPSAtTEFSQ0hfSU5UX0lQSTtcbi1cdFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFx1MDAyNmlycSk7XG4rXHRcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbitcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB1aW50NjRfdCByZWFkX21haWxib3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5pbmRleCAyMGMyMDdkODBlMzFhZS4uODJjOTY4NTRkZjkzZTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTQ2NSw2ICsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRpZiAodmVjdG9yIFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpIFx1MDAyNlx1MDAyNiAodmVjdG9yID09IElOVF9BVkVDKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTQ3MiwxMCArMTQ3NSw4IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuIFx0XHRrdm1fcXVldWVfaXJxKHZjcHUsIGludHIpO1xuIFx0ZWxzZSBpZiAoaW50ciBcdTAwM2MgMClcbiBcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTtcbi1cdGVsc2Uge1xuLVx0XHRrdm1fZXJyKFwiJXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXFxuXCIsIF9fZnVuY19fLCBpcnEtXHUwMDNlaXJxKTtcbitcdGVsc2VcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6MjcuNTM4MDE2OTM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MTI0MTA1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTG9vbmdBcmNoIEtWTSBJbnRlcnJ1cHQgSGFuZGxpbmcgUGF0Y2ggQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBMb29uZ0FyY2ggS1ZNLCBhbmQgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIGl0J3MgdG91Y2hpbmcgdGhlc2UgZnVuY3Rpb25zOiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYGlwaV9jbGVhcmAsIGFuZCBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSByZXBsYWNpbmcgY2FsbHMgdG8gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgYW5kIGBrdm1fdmNwdV9raWNrYC4gVGhlcmUncyBhbHNvIGEgbmV3IGNoZWNrIGFkZGVkIGluIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgOiBgaWYgKGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHZjcHUtXHUwMDNla3ZtKSkgcmV0dXJuIC1FSU5WQUw7YC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBmdXp6IHRoaXM/IElzIHRoaXMgZXZlbiByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQ/ICBMb29uZ0FyY2gsIHRoYXQncyB0aGUgYXJjaGl0ZWN0dXJlLiBOb3csIGRvZXMgc3l6a2FsbGVyIHBsYXkgbmljZSB3aXRoIExvb25nQXJjaCBLVk0/ICBJIGtub3cgc3RhbmRhcmQgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIHByZS1idWlsdCBzZXR1cCBmb3IgaXQuICBCdXQsIHdhaXQsIHRoZXNlIGluc3RydWN0aW9ucyBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIEkgcmVtZW1iZXIgcmVhZGluZy4uLiBpdCBtZW50aW9ucyBwYXRocyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXNwZWNpYWxseSB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gIEFoLCBidXQgUUVNVSAqZG9lcyogc3VwcG9ydCBMb29uZ0FyY2gsIEkgc2VlbSB0byByZWNhbGwgdGhhdC4gQnV0LCBkb2VzIHN5emthbGxlciAqcnVuKiBMb29uZ0FyY2ggS1ZNPyBUaGUgc3RhbmRhcmQgYnVpbGRzIHRhcmdldCB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBldGMuIEJ1dCwgdGhlIHBhdGNoIGlzIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vYCwgc28gY2xlYXJseSwgd2UgKm5lZWQqIGEgTG9vbmdBcmNoIGhvc3QgdG8gcnVuIEtWTSwgcmlnaHQ/XG5cblNvLCBjYW4gd2UgZnV6eiBMb29uZ0FyY2ggS1ZNPyAgSWYgd2UncmUgKm9uKiBhIExvb25nQXJjaCBob3N0LCB5ZXMsIGRlZmluaXRlbHkuIEJhY2sgdG8gdGhlIGRvYywgdGhvdWdoOiBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uXCIuIEJ1dCwgTG9vbmdBcmNoIEtWTSAqaXMqIHJlYWNoYWJsZSBpZiB3ZSBydW4gUUVNVSB3aXRoIEtWTSBvbiBhIExvb25nQXJjaCBob3N0LiBPa2F5LCBsZXQncyBhc3N1bWUgaXQncyBmdXp6YWJsZSBpZiBpdCdzIGZ1bmN0aW9uYWwuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIHRoZW1zZWx2ZXMuIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGlzIGNhbGxlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fSU5URVJSVVBUYCBpb2N0bC4gVGhlIHBhdGNoIGFkZHMgdGhhdCBga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWxgIGNoZWNrLiAgQmFzaWNhbGx5LCBpZiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgdXNlcnNwYWNlICpjYW5ub3QqIGluamVjdCBpbnRlcnJ1cHRzIHZpYSBgS1ZNX0lOVEVSUlVQVGAuICBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZS4gRnVydGhlcm1vcmUsIHRoZSBpbnRlcm5hbCBLVk0gY29kZSAoZS5nLiwgdGhvc2UgYGRtc2ludGMuLi5gIGZ1bmN0aW9ucyksIHdoaWNoICp1c2VkKiB0byBjYWxsIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGludGVybmFsbHksIG5vdyBkaXJlY3RseSBjYWxsIGBrdm1fcXVldWVfaXJxYCBhbmQgYGt2bV92Y3B1X2tpY2tgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGUgb2xkIGNvZGUgd291bGQgcmV0dXJuIGAtRUlOVkFMYCB1bmRlciB0aGUgbmV3IGFkZGVkIGNvbmRpdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gS2NvbmZpZyBzZXR0aW5ncy4gSSBuZWVkIGBDT05GSUdfS1ZNYCBhdCBhIG1pbmltdW0uICBJIHNob3VsZCBwcm9iYWJseSBzZWFyY2ggZm9yIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6MzguMzUwNDMxNDcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MjIyODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jPTE0MjU9dm9pZCBrdm1fbG9zZV9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDU5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTQ2MDppbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcXG5hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jLTE0NjEte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xNDg2PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xNDk5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTUwMDpcXHRcXHRyZXR1cm4ga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZpcnEpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTUwMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE4OjM4Ljc0MjY2OTUyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjEyOTc4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEludGVycnVwdCBDb250cm9sbGVyIEludGVyYWN0aW9ucyBpbiBLVk0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGhpdHRpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIHBsdXMgaXQgc2VlbXMgdG8gYmUgbWVzc2luZyB3aXRoIHRoZSBpbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlcnMuIFJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBkbXNpbnRjYCwgYGVpb2ludGNgLCBhbmQgYGlwaWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgY2hhbmdlcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgdGhlc2UuIExldCdzIGdldCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciB0aG9zZSBjb250cm9sbGVycyBzdHJhaWdodCBpbiBteSBoZWFkIOKAkyB0aGF0J2xsIGdpdmUgbWUgYSBtdWNoIGJldHRlciBncmFzcCBvZiB0aGUgcG90ZW50aWFsIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo0Mi4wNjM5Njk5MTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2MjIyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NDIuMTI2NjA4MzE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NzA5NTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEludGVyLVByb2Nlc3NvciBJbnRlcnJ1cHRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBLVk0gY29uZmlndXJhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gaW50ZXJydXB0IGRlbGl2ZXJ5LCBzcGVjaWZpY2FsbHkgaG93IGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHRzIChJUElzKSBhcmUgaGFuZGxlZC4gSSd2ZSBnb3QgYSBmZXcga2V5IHN5bWJvbHMgSSdtIHRyYWNraW5nOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC4gVGhlc2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGZsb3cuXG5cbldhaXQgYSBzZWNvbmTigKYgYGlwaV9zZXRgIGFuZCBgaXBpX2NsZWFyYOKApiB0aG9zZSBhcmUgZGVmaW5lZCBhcyBzdGF0aWMuIEhtbSwgdGhpcyBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBhIGJpdC4gU3RhdGljIGZ1bmN0aW9ucyBjYW4gc29tZXRpbWVzIGJlIGhhcmRlciB0byB0cmFjZSwgYXMgdGhleSBhcmVuJ3QgbmVjZXNzYXJpbHkgZXhwb3NlZCBvdXRzaWRlIHRoZSBmaWxlIHRoZXkgYXJlIGRlZmluZWQgaW4uIEFscmlnaHQsIG15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpyZWFjaGFibGUqIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhleSdyZSBldmVuIGNhbGxlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gTGV0J3Mgc2VlIGlmIEkgY2FuIHRyYWNlIHRoZWlyIHVzYWdlIGZyb20gd2hlcmUgdGhleSBhcmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NDUuNjgzNzA2MDYzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzMwMDk0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTktXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MTA6c3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMTEte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MjQ9c3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzUtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MzY6XFx0aXBpX3NldCh2Y3B1LCBCSVQoZGF0YSBcXHUwMDI2IDB4MWYpKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0zNy19XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYz0yMjE9c3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKnZhbClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTIzOS1cXHRjYXNlIElPQ1NSX0lQSV9TRVQ6XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6MjQwOlxcdFxcdGlwaV9zZXQodmNwdSwgZGF0YSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMjQxLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9MzY4PXN0YXRpYyBpbnQga3ZtX2lwaV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtMzc5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjM4MDpzdGF0aWMgaW50IGt2bV9pcGlfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy0zODEtXFx0XFx0XFx0c3RydWN0IGt2bV9kZXZpY2VfYXR0ciAqYXR0cilcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTQ1NT1zdGF0aWMgc3RydWN0IGt2bV9kZXZpY2Vfb3BzIGt2bV9pcGlfZGV2X29wcyA9IHtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQ1OC1cXHQuZGVzdHJveSA9IGt2bV9pcGlfZGVzdHJveSxcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYzo0NTk6XFx0LnNldF9hdHRyID0ga3ZtX2lwaV9zZXRfYXR0cixcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00NjAtXFx0LmdldF9hdHRyID0ga3ZtX2lwaV9nZXRfYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NDUuODIxMDEzMDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ0MjAyNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIEludGVycnVwdCBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGxvb25nYXJjaGAgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBFeHRlcm5hbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoRUlDKSwgbGlrZWx5IGluIGFuIGVtYmVkZGVkIHN5c3RlbS4gVGhlIHRyYWlsIHN0YXJ0cyB3aXRoIGBpcGlfc2VuZGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBsb29uZ2FyY2hfaXBpX3dyaXRlbGAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBgbG9vbmdhcmNoX2lwaV93cml0ZWxgIG11c3QgYmUgdGhlIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKSBoYW5kbGVyIGZvciBJbnRlci1Qcm9jZXNzb3IgSW50ZXJydXB0cyAoSVBJcykgb24gdGhpcyBzeXN0ZW0uIFNvLCB3cml0aW5nIHRvIGEgc3BlY2lmaWMgTU1JTyBhZGRyZXNzIHRyaWdnZXJzIGFuIElQSSBzZW5kLiBHb3QgaXQuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoZSBFSUMgY29tZXMgaW4uIEkgc2VlIGBlaW9pbnRjX3VwZGF0ZV9pcnFgIGJlaW5nIGNhbGxlZC4gVGhpbmtpbmcgYmFjayB0byBob3cgdGhlIGVpY2ludGMgZHJpdmVyIHdvcmtzLCBJIHN1c3BlY3QgYGVpb2ludGNfdXBkYXRlX2lycWAgaXMgY2FsbGVkIGZyb20gYGVpb2ludGNfc2V0X2lycWAsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBtZWFucyBgZWlvaW50Y191cGRhdGVfaXJxYCBpcyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBpbnRlcnJ1cHRzIHZpc2libGUgYW5kIHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgRUlDIGNvbmZpZ3VyYXRpb24uIFNvLCB0aGUgaW50ZXJydXB0IGdldHMgc2V0LCBhbmQgdGhlbiB0aGUgZWljIGRyaXZlciBwcm9iYWJseSBtYWtlcyBzdXJlIHRoZSBFSUMgaXMgYXdhcmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHM6IElQSSB3cml0ZSwgd2hpY2ggaXMgaGFuZGxlZCBieSB0aGUgTU1JTyBoYW5kbGVyLCByZXN1bHRpbmcgaW4gYSBjYWxsIHRvIHNldCB0aGUgaW50ZXJydXB0IG9uIHRoZSBlaWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo0OS41NjUyMTc3NTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Njc2MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVpb2ludGNfdXBkYXRlX2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTEwPXN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTM1LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzozNjpzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTM3LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz03OD1zdGF0aWMgaW5saW5lIHZvaWQgZWlvaW50Y191cGRhdGVfc3dfY29yZW1hcChzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTAyLVxcdFxcdFxcdC8qIGxvd2VyIGlycSBhdCBvbGQgY3B1IGFuZCByYWlzZSBpcnEgYXQgbmV3IGNwdSAqL1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzoxMDM6XFx0XFx0XFx0ZWlvaW50Y191cGRhdGVfaXJxKHMsIGlycSArIGksIDApO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMDQtXFx0XFx0XFx0cy1cXHUwMDNlc3dfY29yZW1hcFtpcnEgKyBpXSA9IGNwdTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MTA1OlxcdFxcdFxcdGVpb2ludGNfdXBkYXRlX2lycShzLCBpcnEgKyBpLCAxKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTA2LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTEyPXZvaWQgZWlvaW50Y19zZXRfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTExOC1cXHRsZXZlbCA/IF9fc2V0X2JpdChpcnEsIGlzcikgOiBfX2NsZWFyX2JpdChpcnEsIGlzcik7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjExOTpcXHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxLCBsZXZlbCk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTEyMC1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MjA3PXN0YXRpYyBpbnQgbG9vbmdhcmNoX2Vpb2ludGNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI0Ny1cXHRcXHRcXHRpcnEgPSBfX2ZmcyhkYXRhKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MjQ4OlxcdFxcdFxcdGVpb2ludGNfdXBkYXRlX2lycShzLCBpcnEgKyBpbmRleCAqIDY0LCAxKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjQ5LVxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfkJJVF9VTEwoaXJxKTtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0yNTctXFx0XFx0XFx0aXJxID0gX19mZnMoZGF0YSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjI1ODpcXHRcXHRcXHRlaW9pbnRjX3VwZGF0ZV9pcnEocywgaXJxICsgaW5kZXggKiA2NCwgMCk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTI1OS1cXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5CSVRfVUxMKGlycSk7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMjc3LVxcdFxcdFxcdGlycSA9IF9fZmZzKGRhdGEpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzoyNzg6XFx0XFx0XFx0ZWlvaW50Y191cGRhdGVfaXJxKHMsIGlycSArIGluZGV4ICogNjQsIDApO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0yNzktXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+QklUX1VMTChpcnEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo0OS42NDI5MDY1MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NzEzMjk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246XG5cbioqVHJhY2luZyB0aGUgSW50ZXJydXB0IEhhbmRsZXIgQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBlaW9pbnRjX3NldF9pcnFgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJXaGVyZSdzIHRoaXMgY2FsbGVkIGZyb20/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIGl0IGNhbGxlZCBmcm9tIGEgZHJpdmVyPyBJcyBpdCBwYXJ0IG9mIHRoZSBjb3JlIGludGVycnVwdCBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uPyBXaGF0J3MgdGhlIGNhbGwgZ3JhcGggbG9vayBsaWtlP1xuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzLiBJIHdvdWxkIHJlYWNoIGZvciBncmVwIG9yIGEgc2ltaWxhciBzZWFyY2ggdG9vbCwgbWF5YmUgd2l0aGluIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBvciBkaXJlY3RvcnkgcmVsYXRlZCB0byB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIuIEknbSB0aGlua2luZyBJJ2Qgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgdGhlIGV4YWN0IHN0cmluZywgbG9va2luZyBmb3IgZGlyZWN0IGNhbGxzIHRvIGBlaW9pbnRjX3NldF9pcnFgLiBJIGNvdWxkIGFsc28gbGV2ZXJhZ2UgdGhlIGNyb3NzLXJlZmVyZW5jaW5nIGNhcGFiaWxpdGllcyBvZiBteSBJREUgb3IgYSBjb2RlIGFuYWx5c2lzIHRvb2wgaWYgYXZhaWxhYmxlLlxuXG5EZXBlbmRpbmcgb24gdGhlIHNlYXJjaCByZXN1bHRzLCBteSBmb2N1cyB3b3VsZCBzaGlmdC4gSWYgaXQncyBjYWxsZWQgZnJvbSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHBsYWNlcywgSSdsbCBleGFtaW5lIHRob3NlIGNhbGwgc2l0ZXMgZGlyZWN0bHkgdG8gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIGFuZCBob3cgdGhlIGludGVycnVwdCBpcyBiZWluZyBjb25maWd1cmVkLiBJZiB0aGUgc2VhcmNoIHlpZWxkcyBhIGxvdCBvZiBoaXRzLCBJJ2xsIG5lZWQgdG8gbmFycm93IHRoZSBzY29wZSBvZiB0aGUgc2VhcmNoIG9yIGVtcGxveSBtb3JlIHNvcGhpc3RpY2F0ZWQgYW5hbHlzaXMgbWV0aG9kcywgc3VjaCBhcyB0cmFjaW5nIHRvb2xzIG9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgbW9kdWxlcyBpbnZvbHZlZC4gVWx0aW1hdGVseSwgSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gY2FsbCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo1Mi45NDAwNDMzNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODY2NzExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlaW9pbnRjX3NldF9pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9Nzg9c3RhdGljIGlubGluZSB2b2lkIGVpb2ludGNfdXBkYXRlX3N3X2NvcmVtYXAoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTExMS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6MTEyOnZvaWQgZWlvaW50Y19zZXRfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0xMTMte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jPTEzPXN0YXRpYyB2b2lkIHBjaF9waWNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX3BjaF9waWMgKnMsIGludCBpcnEsIGludCBsZXZlbClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy0yNC1cXHRcXHRcXHRpcnEgPSBzLVxcdTAwM2VodG1zaV92ZWN0b3JbaXJxXTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM6MjU6XFx0XFx0XFx0ZWlvaW50Y19zZXRfaXJxKHMtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5laW9pbnRjLCBpcnEsIGxldmVsKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtMjYtXFx0XFx0fVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTMwLVxcdFxcdFxcdGlycSA9IHMtXFx1MDAzZWh0bXNpX3ZlY3RvcltpcnFdO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYzozMTpcXHRcXHRcXHRlaW9pbnRjX3NldF9pcnEocy1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmVpb2ludGMsIGlycSwgbGV2ZWwpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYy0zMi1cXHRcXHR9XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmM9NzE9aW50IHBjaF9tc2lfc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLCBpbnQgbGV2ZWwpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtODAtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jOjgxOlxcdGVpb2ludGNfc2V0X2lycShrdm0tXFx1MDAzZWFyY2guZWlvaW50YywgZS1cXHUwMDNlbXNpLmRhdGEsIGxldmVsKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE4OjUzLjIwODcxNzU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDI4NzUwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTVNJIERlbGl2ZXJ5IGFuZCBJbnRlcnJ1cHQgUm91dGluZyoqXG5cblJpZ2h0LCBzbyBgcGNoX21zaV9zZXRfaXJxYCBnZXRzIGNhbGxlZCB3aGVuZXZlciBhbiBNU0kgKE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0KSBpcyBpbmplY3RlZC4gVGhhdCBtYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBjb25maWd1cmluZyB0aGUgc3lzdGVtIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0LiBCdXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3csIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTVNJIGdldHMgdG8gdGhlIFZpcnR1YWwgQ1BVLiBUaGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgIGJlaW5nIGNhbGxlZCAqZnJvbSo/IElzIGl0IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHdpdGhpbiB0aGUgTVNJIGluamVjdGlvbiBwYXRoLCBvciBpcyB0aGVyZSBhbiBpbnRlcm1lZGlhdGUgaGFuZGxlcj8gSXMgaXQgYSBmdW5jdGlvbiBvZiB0aGUgUENJIHN1YnN5c3RlbSwgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGNvZGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5LiBUaGF0IHdpbGwgdGVsbCBtZSBob3cgdGhlIE1TSSBpcyByb3V0ZWQgdG8gdGhlIHRhcmdldGVkIHZDUFUuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBjYWxsZXIgb2YgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNvbW1lbnRzIG9mZmVyIGFueSBjbHVlcyBvciBpZiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIHN0YWNrcyBhbmQgbG9vayBmb3IgdGhlIGludGVycnVwdCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NTYuOTExNTk4MzI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUwMzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9MTE9dm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTQ2LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYzo0NzppbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMtNDgtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9Njk9aW50IGRtc2ludGNfc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBhZGRyLCBpbnQgZGF0YSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgxLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYzo4MjpcXHRyZXR1cm4gZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KGt2bSwgdmNwdSwgaXJxLCBsZXZlbCk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jLTgzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDM6MTg6NTYuOTcxMTA4NzU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTM0NTkzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgSW50ZXJydXB0IEhhbmRsZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZG1zaW50Y19zZXRfaXJxYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dCBmb3IgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB3aGVyZSBpdCdzIGNhbGxlZCBmcm9tIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgdGhpcyBzcGVjaWZpYyBpbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24gaXMgdHJpZ2dlcmVkLiBJdCdzIGxpa2VseSB0aGF0IGEgY29uZmlndXJhdGlvbiBvciBpbml0aWFsaXphdGlvbiByb3V0aW5lIHdpbGwgY2FsbCBpdCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoLiBMZXQncyBzZWUgaWYgSSBjYW4gdXNlIHNvbWUgY29kZSBuYXZpZ2F0aW9uIHRvb2xzIG9yIHNlYXJjaCB3aXRoaW4gdGhlIHByb2plY3QgdG8gaWRlbnRpZnkgdGhlIGRpcmVjdCBjYWxsZXJzLiBUaGVuIEkgY2FuIGRldGVybWluZSB3aGF0IHRoaXMgaW50ZXJydXB0IGlzIHJlbGF0ZWQgdG8gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgaW50ZXJydXB0IGhhbmRsaW5nIHN5c3RlbSwgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IGlzLiBUaGlzIGlzIGEgY29tbW9uIGRlYnVnZ2luZyB0ZWNobmlxdWUgdG8gdW5kZXJzdGFuZCBpbnRlcnJ1cHQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo1OS43MjQ1NzAyODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzY5Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbXNpbnRjX3NldF9pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmM9NDc9aW50IGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMtNjgtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jOjY5OmludCBkbXNpbnRjX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgYWRkciwgaW50IGRhdGEsIGludCBsZXZlbClcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMtNzAte1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jPTcxPWludCBwY2hfbXNpX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jLTc3LVxcdFxcdG1zZ19hZGRyIFxcdTAwM2MgKGt2bS1cXHUwMDNlYXJjaC5kbXNpbnRjLVxcdTAwM2Vtc2dfYWRkcl9iYXNlICsga3ZtLVxcdTAwM2VhcmNoLmRtc2ludGMtXFx1MDAzZW1zZ19hZGRyX3NpemUpKSB7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jOjc4OlxcdFxcdHJldHVybiBkbXNpbnRjX3NldF9pcnEoa3ZtLCBtc2dfYWRkciwgZS1cXHUwMDNlbXNpLmRhdGEsIGxldmVsKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMtNzktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxODo1OS44NTIyNzM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODY5NTY1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNU0kgYW5kIEludGVycnVwdCBJbmplY3Rpb24gb24gTG9vbmdBcmNoIHdpdGggS1ZNKipcblxuT2theSwgc28gYHBjaF9tc2lfc2V0X2lycWAgaXMgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBNU0kgd2l0aGluIHRoaXMgY29udGV4dC4gSSBrbm93IHRoaXMgcGF0aCBpcyBkZWZpbml0ZWx5IGhpdCB3aGVuIEtWTSBpcyBydW5uaW5nIG9uIExvb25nQXJjaC4gSXQgbWFrZXMgc2Vuc2UgdG8gY29uc2lkZXIgZnV6emluZyB0aGlzOyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaW5qZWN0aW9uIGluIEtWTS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cbkkgc2VlIGEgZ3VhcmQgY29uZGl0aW9uIGFkZGVkIGluIGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgOiBgaWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKSByZXR1cm4gLUVJTlZBTDtgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIGNoZWNrIGJlZm9yZSBtZXNzYWdlIGludGVycnVwdCBkZWxpdmVyeSwgbWFrZXMgc2Vuc2UuXG5cblRoZW4gdGhlcmUncyBhIG1vZGlmaWNhdGlvbiBpbiBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlIGFkZGVkIGNvZGUgYmxvY2sgbG9va3MgbGlrZSBhIGNydWNpYWwgZml4OlxuXG5gYGBjXG5cdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG5cdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG5cdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcblx0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcblx0XHRpcG51bSA9IDA7XG5gYGBcblxuVGhpcyBjbGVhcmx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlIGlmIGBpcG51bWAgZ29lcyBiZXlvbmQgYExPT05HU09OX0lQX05VTWAuIEkgc3VzcGVjdCBgTE9PTkdTT05fSVBfTlVNYCBpcyBsaWtlbHkgZXF1YWwgdG8gOC4gSWYgYGlwbnVtYCBpcyBvdXQgb2YgYm91bmRzLCB0aGlzIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmNvcnJlY3QgaW50ZXJydXB0IGluamVjdGlvbi4gSXQncyBhIGZ1bmN0aW9uYWwgZml4LCBhYnNvbHV0ZWx5LlxuXG5JIHdhbnQgdG8gY2hlY2sgdGhhdCBgTE9PTkdTT05fSVBfTlVNYCB2YWx1ZS4gTGV0J3MgbG9vayB1cCBob3cgaXQncyBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOTowNi41MzkyMzM3OTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjQyMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxPT05HU09OX0lQX05VTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC01MS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oOjUyOiNkZWZpbmUgTE9PTkdTT05fSVBfTlVNXFx0XFx0XFx0OFxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2t2bV9laW9pbnRjLmgtNTMtXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaD01ND1zdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMge1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC03Ni1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9rdm1fZWlvaW50Yy5oOjc3OlxcdERFQ0xBUkVfQklUTUFQKHN3X2NvcmVpc3JbRUlPSU5UQ19ST1VURV9NQVhfVkNQVVNdW0xPT05HU09OX0lQX05VTV0sIEVJT0lOVENfSVJRUyk7XFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20va3ZtX2Vpb2ludGMuaC03OC1cXHR1aW50OF90ICBzd19jb3JlbWFwW0VJT0lOVENfSVJRU107XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MTA9c3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtMTktXFx0XFx0XFx0aXBudW0gPSBpcG51bSBcXHUwMDNjIDQgPyBpcG51bSA6IDA7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjIwOlxcdFxcdH0gZWxzZSBpZiAoaXBudW0gXFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy0yMS1cXHRcXHRcXHRpcG51bSA9IDA7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9MzY9c3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTQ0LVxcdFxcdGlwbnVtID0gaXBudW0gXFx1MDAzYyA0ID8gaXBudW0gOiAwO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo0NTpcXHR9IGVsc2UgaWYgKGlwbnVtIFxcdTAwM2U9IExPT05HU09OX0lQX05VTSlcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNDYtXFx0XFx0aXBudW0gPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOTowNi42MzA4ODU2ODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMjgzNDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGBMT09OR1NPTl9JUF9OVU1gIGlzIGNvbmZpcm1lZCB0byBiZSA4LiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHZ1bG5lcmFiaWxpdHkgYmVjYXVzZSBgaXBudW1gIHdhcyBhYmxlIHRvIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA4LiBUaGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBgc3dfY29yZWlzcmAgb3IgaW52YWxpZCBpbnRlcnJ1cHQgaW5qZWN0aW9uLCByaWdodD8gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcsIEknZCBzYXkuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gdGhpbmtpbmc6XG5cbiogICBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YFxuKiAgIGBlaW9pbnRjX3VwZGF0ZV9pcnFgXG4qICAgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWBcbiogICBgaXBpX3NldGBcbiogICBgaXBpX2NsZWFyYFxuXG5Ib2xkIG9uLi4uIGBpcGlfc2V0YCBhbmQgYGlwaV9jbGVhcmAgYXJlIHN0YXRpYy4gU2hvdWxkIHdlIGJlIHRhcmdldGluZyB0aGVtPyBZZWFoLCB3ZSBjYW4gaW5jbHVkZSBzdGF0aWMgZnVuY3Rpb25zLiBCdXQsIHdhaXQgYSBtaW51dGUsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgIGlzIGFsc28gc3RhdGljIVxuXG5Pa2F5LCBuZXcgcGxhbi4gV2UnbGwgdXNlOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC5cblxuV2FpdCwgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgZXhwb3J0ZWQsIGl0J3MgZ2xvYmFsISBHb29kLiBMZXQncyBtYWtlIHN1cmUgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAgaXMgZ2xvYmFsLCB0b28uIFllcCwgaXQgaXMuXG5cblRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcsIG1ha2Ugc3VyZSB0aGUgYnVpbGQgY29uZmlncyBhcmUgY29ycmVjdC4gSSdtIHNlZWluZyBgS1ZNYCBhcyB0aGUgcHJpbWFyeSBvbmUsIGFyZSB0aGVyZSBhbnkgb3RoZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IExldCdzIGNoZWNrIGBhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSB3ZSBuZWVkIHRvIGtub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTgzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDAzOjE5OjEyLjI2MzcyMzkzMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE0MDMwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz02PXNvdXJjZSBcXFwidmlydC9rdm0vS2NvbmZpZ1xcXCJcXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy03LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTktXFx0Ym9vbCBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOToxMi4zMzUxMzQyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgzOTgyNzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIExvb25nQXJjaCBLVk0gSW50ZXJydXB0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBzZXQgYW5kIGhlcmUncyBteSBwbGFuLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gdGhlIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgb24gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgYEtWTWAgaXMgZGVmaW5pdGVseSB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiAgVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIHNldmVyYWwgZnVuY3Rpb25zLCBidXQgYFZJUlRVQUxJWkFUSU9OYCBpcyBsaXN0ZWQgYXMgYSBtZW51Y29uZmlnLCBzbywgb2J2aW91c2x5LCB3ZSB3aWxsIGluY2x1ZGUgYEtWTWAuIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZyBvcHRpb25zLCBzbyB3ZSBjYW4gc3RpY2sgdG8gYEtWTWAuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zLiBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUg4oCTIHllcywgY29uZmlybWVkLiAgQW5kIHdoaWxlIGBrdm1fcXVldWVfaXJxYCBpcyBhIGhvdCBwYXRoIHdoZW4gaXQncyBjYWxsZWQsIHRoZXNlIGNoYW5nZXMgc3BlY2lmaWNhbGx5IG1vZGlmeSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljIG9uIExvb25nQXJjaC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGBpcGlfY2xlYXJgLCBhbmQgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIGFyZSB0aGUgb25lcyB3ZSdyZSBmb2N1c2luZyBvbi4gRXZlbiB0aG91Z2ggaW50ZXJydXB0IGRlbGl2ZXJ5IGNhbiBiZSBwb3RlbnRpYWxseSBob3QsIHRoZXNlIGFyZSBzcGVjaWZpYyB0byBLVk0gaW50ZXJydXB0IGNvbnRyb2xsZXJzLCB3aGljaCBhcmUgb24gTG9vbmdBcmNoLiBGdXp6aW5nIHRoZXNlIHNob3VsZCBkaXJlY3RseSB0YXJnZXQgdGhlIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGxvZ2ljLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIGNoYW5nZXMgYWdhaW4uIFRoZSBmaXJzdCwgaW4gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIGNsZWFybHkgcmVzdHJpY3RzIHVzZXItc3BhY2UgaW50ZXJydXB0IGluamVjdGlvbiB3aGVuIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBzZWNvbmQgY2hhbmdlLCBpbiBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYWx0ZXJzIGhvdyBNU0kgaXMgZGVsaXZlcmVkIGludGVybmFsbHkuICBXZSBieXBhc3MgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgYW5kIGFsc28gYWRkIGEgY2hlY2sgZm9yIGBrdm1fZ3Vlc3RfaGFzX21zZ2ludGAuXG5cblRoZSB0aGlyZCBjaGFuZ2UgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBpc3N1ZSByZWdhcmRpbmcgYGlwbnVtYC5cblxuQWxsIG9mIHRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0aW5nIGNvcmUgS1ZNIGxvZ2ljIG9uIExvb25nQXJjaC4gIFRoZXkgaW50cm9kdWNlIGNoZWNrcywgaW1wcm92ZSBpbnRlcnJ1cHQgZGVsaXZlcnkgcGF0aHdheXMsIGFuZCBhZGRyZXNzIHBvdGVudGlhbCBidWdzLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhlbSBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5lZWQgdG8gZm9jdXMgb246IGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1YCwgYGVpb2ludGNfdXBkYXRlX2lycWAsIGBpcGlfc2V0YCwgYW5kIGBpcGlfY2xlYXJgLiBUaGUgYEtWTWAgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBlbmFibGVkLiBJJ2xsIG1ha2Ugc3VyZSB0byBwcmlvcml0aXplIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgZnV6emluZyBjYW1wYWlnbiB0byBlbnN1cmUgd2UgY292ZXIgdGhlIG5ldyBsb2dpYyBhbmQgY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTE4LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwMzoxOToyNC4xNzQ5NjQ1ODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjIxNzg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0XCIsXG4gICAgXCJkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVcIixcbiAgICBcImVpb2ludGNfdXBkYXRlX2lycVwiLFxuICAgIFwiaXBpX3NldFwiLFxuICAgIFwiaXBpX2NsZWFyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSXQgcmVzdHJpY3RzIHVzZXItc3BhY2UgaW50ZXJydXB0IGluamVjdGlvbiB3aGVuIHRoZSBpbi1rZXJuZWwgaXJxY2hpcCBpcyBlbmFibGVkLCBjaGFuZ2VzIGludGVybmFsIGludGVycnVwdCBkZWxpdmVyeSB0byBieXBhc3MgdGhlIGlvY3RsIHBhdGgsIGFuZCBmaXhlcyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGlzc3VlIHdpdGggYGlwbnVtYCBpbiBgZWlvaW50Y19zZXRfc3dfY29yZWlzcmAgYW5kIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV92Y3B1X2lvY3RsX2ludGVycnVwdFwiLFxuICAgIFwiZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1XCIsXG4gICAgXCJlaW9pbnRjX3VwZGF0ZV9pcnFcIixcbiAgICBcImlwaV9zZXRcIixcbiAgICBcImlwaV9jbGVhclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaGFuZGxpbmcgbG9naWMuIEl0IHJlc3RyaWN0cyB1c2VyLXNwYWNlIGludGVycnVwdCBpbmplY3Rpb24gd2hlbiB0aGUgaW4ta2VybmVsIGlycWNoaXAgaXMgZW5hYmxlZCwgY2hhbmdlcyBpbnRlcm5hbCBpbnRlcnJ1cHQgZGVsaXZlcnkgdG8gYnlwYXNzIHRoZSBpb2N0bCBwYXRoLCBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBpc3N1ZSB3aXRoIGBpcG51bWAgaW4gYGVpb2ludGNfc2V0X3N3X2NvcmVpc3JgIGFuZCBgZWlvaW50Y191cGRhdGVfaXJxYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[1] Phase: Succeeded StartedAt: 2026-06-22 03:20:29 +0000 UTC FinishedAt: 2026-06-22 03:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 03:20:29 +0000 UTC FinishedAt: 2026-06-22 03:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2] Phase: Succeeded StartedAt: 2026-06-22 03:20:29 +0000 UTC FinishedAt: 2026-06-22 04:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 03:20:29 +0000 UTC FinishedAt: 2026-06-22 04:17:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 03:20:29 +0000 UTC FinishedAt: 2026-06-22 03:20:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 03:20:29 +0000 UTC FinishedAt: 2026-06-22 03:20:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjkqzz/series-workflowjkqzz-convert-artifact-3379159113/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 03:20:50 +0000 UTC FinishedAt: 2026-06-22 03:46:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 03:20:50 +0000 UTC FinishedAt: 2026-06-22 03:46:09 +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:*508124c6-942e-4d46-ae1f-ce0747daac61,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-workflowjkqzz/series-workflowjkqzz-convert-artifact-3379159113/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": "40fdc002-6a78-4e0a-a239-bed0503d162d", "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-workflowjkqzz/series-workflowjkqzz-build-action-678125351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 03:20:50 +0000 UTC FinishedAt: 2026-06-22 03:46:03 +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:*508124c6-942e-4d46-ae1f-ce0747daac61,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-workflowjkqzz/series-workflowjkqzz-convert-artifact-3379159113/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": "40fdc002-6a78-4e0a-a239-bed0503d162d", "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-workflowjkqzz/series-workflowjkqzz-build-action-678125351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 03:46:09 +0000 UTC FinishedAt: 2026-06-22 03:46:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 03:46:09 +0000 UTC FinishedAt: 2026-06-22 03:46:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 03:46:09 +0000 UTC FinishedAt: 2026-06-22 03:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 03:46:09 +0000 UTC FinishedAt: 2026-06-22 03:46:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjkqzz/series-workflowjkqzz-convert-artifact-2444016732/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 03:47:53 +0000 UTC FinishedAt: 2026-06-22 03:49:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 03:47:53 +0000 UTC FinishedAt: 2026-06-22 03:49:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*40fdc002-6a78-4e0a-a239-bed0503d162d,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-workflowjkqzz/series-workflowjkqzz-build-action-678125351/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-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 03:49:44 +0000 UTC FinishedAt: 2026-06-22 03:49:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 03:49:44 +0000 UTC FinishedAt: 2026-06-22 03:49:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 03:49:44 +0000 UTC FinishedAt: 2026-06-22 04:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 03:49:44 +0000 UTC FinishedAt: 2026-06-22 04:12:52 +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:*508124c6-942e-4d46-ae1f-ce0747daac61,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-workflowjkqzz/series-workflowjkqzz-convert-artifact-2444016732/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": "bcf12b55-d799-46ca-9b90-ba00fe9bbc8e", "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-workflowjkqzz/series-workflowjkqzz-build-action-2756935864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 03:49:44 +0000 UTC FinishedAt: 2026-06-22 04:12:43 +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:*508124c6-942e-4d46-ae1f-ce0747daac61,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-workflowjkqzz/series-workflowjkqzz-convert-artifact-2444016732/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": "bcf12b55-d799-46ca-9b90-ba00fe9bbc8e", "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-workflowjkqzz/series-workflowjkqzz-build-action-2756935864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 04:12:52 +0000 UTC FinishedAt: 2026-06-22 04:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 04:12:52 +0000 UTC FinishedAt: 2026-06-22 04:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 04:12:52 +0000 UTC FinishedAt: 2026-06-22 04:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 04:12:52 +0000 UTC FinishedAt: 2026-06-22 04:14:32 +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:*bcf12b55-d799-46ca-9b90-ba00fe9bbc8e,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-workflowjkqzz/series-workflowjkqzz-build-action-2756935864/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-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 04:14:42 +0000 UTC FinishedAt: 2026-06-22 04:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 04:14:42 +0000 UTC FinishedAt: 2026-06-22 04:17:29 +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":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"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:*40fdc002-6a78-4e0a-a239-bed0503d162d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bcf12b55-d799-46ca-9b90-ba00fe9bbc8e,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-workflowjkqzz/series-workflowjkqzz-build-action-678125351/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-workflowjkqzz/series-workflowjkqzz-build-action-2756935864/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 04:14:42 +0000 UTC FinishedAt: 2026-06-22 04:14:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 04:14:42 +0000 UTC FinishedAt: 2026-06-22 04:14:47 +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":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"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-workflowjkqzz/series-workflowjkqzz-convert-artifact-2067515173/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 04:14:42 +0000 UTC FinishedAt: 2026-06-22 04:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 04:14:42 +0000 UTC FinishedAt: 2026-06-22 04:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 04:14:42 +0000 UTC FinishedAt: 2026-06-22 04:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 04:14:52 +0000 UTC FinishedAt: 2026-06-22 04:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkqzz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","ipi_set","ipi_clear"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef0c9f75a19532d7675384708fc8621e10850104","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"d83bae63-48e5-4a70-a0f0-c1b92052815d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 04:14:52 +0000 UTC FinishedAt: 2026-06-22 04:17:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*40fdc002-6a78-4e0a-a239-bed0503d162d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bcf12b55-d799-46ca-9b90-ba00fe9bbc8e,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-workflowjkqzz/series-workflowjkqzz-build-action-678125351/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-workflowjkqzz/series-workflowjkqzz-build-action-2756935864/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-workflowjkqzz/series-workflowjkqzz-convert-artifact-2067515173/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,}