Name: series-workflowflmqp Phase: Succeeded StartedAt: 2026-07-10 00:56:58 +0000 UTC FinishedAt: 2026-07-10 05:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[0] Phase: Succeeded StartedAt: 2026-07-10 00:56:58 +0000 UTC FinishedAt: 2026-07-10 01:11:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 00:56:58 +0000 UTC FinishedAt: 2026-07-10 01:11:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_SMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_SMM" ], "series_id": "31d145ec-e5c2-41c2-bcb3-fe91249c53c8" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "svm_update_lbrv", "nested_vmcb02_prepare_save", "svm_set_nested_state", "svm_enter_smm", "svm_leave_smm", "kvm_dr6_fixed" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUmIzM0OywKICAgICYjMzQ7c3ZtX3NldF9uZXN0ZWRfc3RhdGUmIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O2t2bV9kcjZfZml4ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNJiMzOTtzIGhhbmRsaW5nIG9mIERFQlVHQ1RMTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBzYXZpbmcvcmVzdG9yaW5nLCBhbmQgU01NIHN0YXRlIHRyYW5zaXRpb25zIHRvIHByb3Blcmx5IHZpcnR1YWxpemUgdGhlIGZlYXR1cmUgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIExCUiBWaXJ0dWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2MjA0NDA4Y2QyMGU4MjY1ZWQ4ZGI0YmZhNmMyYWIxNTUwOGI2NDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMToxMDo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuaW5kZXggZDJjYWY1YTY3ZGJhNDAuLjFiNWRmYTc2NTE0MDdiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTc2NCw3ICYjNDM7NzY0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX2RyNyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdXBkYXRlX2RyNyk7XG4gXG4tc3RhdGljIHU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7dTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHU2NCBmaXhlZCA9IERSNl9GSVhFRF8xO1xuIFxuQEAgLTc3NSw2ICYjNDM7Nzc1LDcgQEAgc3RhdGljIHU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0Zml4ZWQgfD0gRFI2X0JVU19MT0NLO1xuIFx0cmV0dXJuIGZpeGVkO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9kcjZfZml4ZWQpO1xuIFxuIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbClcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmhcbmluZGV4IDk0ZmQ4NjcyOGZlZDI5Li5lODVjM2ZmM2UxMjAxYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9yZWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBpbnQga3ZtX3NldF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7XG4gaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpO1xuIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTtcbiBpbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpO1xuJiM0Mzt1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7XG4gdW5zaWduZWQgbG9uZyBrdm1fZ2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX2xtc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG1zdyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbmluZGV4IGMxNDg1YzNlNjkxYzQzLi40ZGZjY2MyZGVkYTg3ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbkBAIC01MzQsNiAmIzQzOzUzNCwxMSBAQCB2b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmICghZ21ldF9lbmFibGVkIHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9HTUVUKSlcbiBcdFx0dG8tXHUwMDNlbWlzY19jdGwgXHUwMDI2PSB+U1ZNX01JU0NfRU5BQkxFX0dNRVQ7XG4gXG4mIzQzO1x0LyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi9cbiYjNDM7XHR0by1cdTAwM2VtaXNjX2N0bDIgPSBmcm9tLVx1MDAzZW1pc2NfY3RsMjtcbiYjNDM7XHRpZiAoIWxicnYgfHwgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpKVxuJiM0MztcdFx0dG8tXHUwMDNlbWlzY19jdGwyIFx1MDAyNj0gflNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4mIzQzO1xuIFx0dG8tXHUwMDNlaW9wbV9iYXNlX3BhICAgICAgICA9IGZyb20tXHUwMDNlaW9wbV9iYXNlX3BhIFx1MDAyNiBQQUdFX01BU0s7XG4gXHR0by1cdTAwM2Vtc3JwbV9iYXNlX3BhICAgICAgID0gZnJvbS1cdTAwM2Vtc3JwbV9iYXNlX3BhIFx1MDAyNiBQQUdFX01BU0s7XG4gXHR0by1cdTAwM2V0c2Nfb2Zmc2V0ICAgICAgICAgID0gZnJvbS1cdTAwM2V0c2Nfb2Zmc2V0O1xuQEAgLTU1MSw3ICYjNDM7NTU2LDYgQEAgdm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR0by1cdTAwM2VldmVudF9pbmpfZXJyICAgICAgID0gZnJvbS1cdTAwM2VldmVudF9pbmpfZXJyO1xuIFx0dG8tXHUwMDNlbmV4dF9yaXAgICAgICAgICAgICA9IGZyb20tXHUwMDNlbmV4dF9yaXA7XG4gXHR0by1cdTAwM2VuZXN0ZWRfY3IzICAgICAgICAgID0gZnJvbS1cdTAwM2VuZXN0ZWRfY3IzO1xuLVx0dG8tXHUwMDNlbWlzY19jdGwyXHRcdD0gZnJvbS1cdTAwM2VtaXNjX2N0bDI7XG4gXHR0by1cdTAwM2VwYXVzZV9maWx0ZXJfY291bnQgID0gZnJvbS1cdTAwM2VwYXVzZV9maWx0ZXJfY291bnQ7XG4gXHR0by1cdTAwM2VwYXVzZV9maWx0ZXJfdGhyZXNoID0gZnJvbS1cdTAwM2VwYXVzZV9maWx0ZXJfdGhyZXNoO1xuIFxuQEAgLTczNiwxMCAmIzQzOzc0MCw5IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9sb2FkX2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mztib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcdTAwMjZcdTAwMjZcbi1cdFx0KHRvX3N2bSh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUik7XG4mIzQzO1x0cmV0dXJuIHRvX3N2bSh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtODA4LDcgJiM0Mzs4MTEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcbiBcdGlmICh1bmxpa2VseShuZXdfdm1jYjEyIHx8IHZtY2IxMl9pc19kaXJ0eShjb250cm9sLCBWTUNCX0RSKSkpIHtcbiBcdFx0dm1jYjAyLVx1MDAzZXNhdmUuZHI3ID0gc3ZtLVx1MDAzZW5lc3RlZC5zYXZlLmRyNyB8IERSN19GSVhFRF8xO1xuLVx0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwgRFI2X0FDVElWRV9MT1c7XG4mIzQzO1x0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcbiBcdFx0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9EUik7XG4gXHR9XG4gXG5AQCAtODE4LDcgJiM0Mzs4MjEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdFx0ICogc3ZtX3NldF9tc3ImIzM5O3MgZGVmaW5pdGlvbiBvZiByZXNlcnZlZCBiaXRzLlxuIFx0XHQgKi9cbiBcdFx0c3ZtX2NvcHlfbGJycyhcdTAwMjZ2bWNiMDItXHUwMDNlc2F2ZSwgc2F2ZSk7XG4tXHRcdHZtY2IwMi1cdTAwM2VzYXZlLmRiZ2N0bCBcdTAwMjY9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTO1xuJiM0MztcdFx0dm1jYjAyLVx1MDAzZXNhdmUuZGJnY3RsIFx1MDAyNj0gfnN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0cyh2Y3B1KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN2bV9jb3B5X2xicnMoXHUwMDI2dm1jYjAyLVx1MDAzZXNhdmUsIFx1MDAyNnZtY2IwMS1cdTAwM2VzYXZlKTtcbiBcdH1cbkBAIC0xMjAxLDcgJiM0MzsxMjA0LDcgQEAgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBcbiAvKiBDb3B5IHN0YXRlIHNhdmUgYXJlYSBmaWVsZHMgd2hpY2ggYXJlIGhhbmRsZWQgYnkgVk1SVU4gKi9cbi12b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcbiYjNDM7dm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcbiBcdFx0XHQgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqZnJvbV9zYXZlKVxuIHtcbiBcdHRvX3NhdmUtXHUwMDNlZXMgPSBmcm9tX3NhdmUtXHUwMDNlZXM7XG5AQCAtMTIyOCw3ICYjNDM7MTIzMSw3IEBAIHZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuIFxuIFx0aWYgKGt2bV9jcHVfY2FwX2hhcyhYODZfRkVBVFVSRV9MQlJWKSkge1xuIFx0XHRzdm1fY29weV9sYnJzKHRvX3NhdmUsIGZyb21fc2F2ZSk7XG4tXHRcdHRvX3NhdmUtXHUwMDNlZGJnY3RsIFx1MDAyNj0gfkRFQlVHQ1RMX1JFU0VSVkVEX0JJVFM7XG4mIzQzO1x0XHR0b19zYXZlLVx1MDAzZWRiZ2N0bCBcdTAwMjY9IH5zdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHModmNwdSk7XG4gXHR9XG4gfVxuIFxuQEAgLTIwNjksNyAmIzQzOzIwNzIsNyBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN2bS1cdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS1cdTAwM2VoZHIuc3ZtLnZtY2JfcGE7XG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBzYXZlKTtcbiYjNDM7XHRzdm1fY29weV92bXJ1bl9zdGF0ZSh2Y3B1LCBcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBzYXZlKTtcbiBcdG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdm0sIGN0bCk7XG4gXG4gXHRzdm1fc3dpdGNoX3ZtY2Ioc3ZtLCBcdTAwMjZzdm0tXHUwMDNlbmVzdGVkLnZtY2IwMik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5iZDIwNGFhMzNlNDdmZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC04ODAsOSAmIzQzOzg4MCwxNCBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcbi1cdGJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IERFQlVHQ1RMTVNSX0xCUikgfHxcbi1cdFx0XHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XG4mIzQzO1x0Ym9vbCBlbmFibGVfbGJydiA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBCdXMgTG9jayBEZXRlY3QgaW4gZ3Vlc3QgZGVwZW5kcyBvbiBMQlIgVmlydHVhbGl6YXRpb24gKi9cbiYjNDM7XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IChERUJVR0NUTE1TUl9MQlIgfCBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1QpKVxuJiM0MztcdFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydih2Y3B1KSlcbiYjNDM7XHRcdGVuYWJsZV9sYnJ2ID0gdHJ1ZTtcbiBcbiBcdGlmIChlbmFibGVfbGJydiBcdTAwMjZcdTAwMjYgIWN1cnJlbnRfZW5hYmxlX2xicnYpXG4gXHRcdF9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xuQEAgLTMxNjAsNyAmIzQzOzMxNjUsNyBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5ERUJVR0NUTE1TUl9CVEY7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGRhdGEgXHUwMDI2IERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMpXG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwMjYgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpKVxuIFx0XHRcdHJldHVybiAxO1xuIFxuIFx0XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgPT0gZGF0YSlcbkBAIC01MDMzLDcgJiM0Mzs1MDM4LDcgQEAgc3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbiBcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApO1xuIFxuLVx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwLFxuJiM0MztcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCxcbiBcdFx0XHQgICAgIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUpO1xuIFxuIFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwX3NhdmUpO1xuQEAgLTUwNzcsNyAmIzQzOzUwODIsNyBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFx0ICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKVxuIFx0ICovXG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBtYXBfc2F2ZS5odmEgJiM0MzsgMHg0MDApO1xuJiM0MztcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7XG4gXG4gXHQvKlxuIFx0ICogRW50ZXIgdGhlIG5lc3RlZCBndWVzdCBub3dcbkBAIC01NTkxLDkgJiM0Mzs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG4gXHQgKiBDbGVhciBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkIGJ5IGNvbW1vbiBjb2RlLFxuIFx0ICogYnV0IHRoYXQgcmVxdWlyZSBleHBsaWNpdCBTVk0gc3VwcG9ydCAodGhhdCBpc24mIzM5O3QgeWV0IGltcGxlbWVudGVkKS5cbiBcdCAqL1xuLVx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKTtcbiBcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX01TUl9JTU0pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGVcbiYjNDM7XHQgKiBndWVzdCwgc2luY2UgQnVzTG9ja1RyYXAgaXMgZW5hYmxlZCB0aHJvdWdoIE1TUl9JQTMyX0RFQlVHQ1RMTVNSIGFuZFxuJiM0MztcdCAqIE1TUl9JQTMyX0RFQlVHQ1RMTVNSIGlzIHZpcnR1YWxpemVkIG9ubHkgaWYgTEJSIFZpcnR1YWxpemF0aW9uIGlzXG4mIzQzO1x0ICogZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWxicnYpXG4mIzQzO1x0XHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuJiM0MztcbiBcdGt2bV9zZXR1cF94c3NfY2FwcygpO1xuIFx0a3ZtX2ZpbmFsaXplX2NwdV9jYXBzKCk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uNDAyYTgyN2Y2MjJkMmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtNzgzLDcgJiM0Mzs3ODMsMTUgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KVxuIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgY2xlYXIsIF9fY2xlYXIpXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KVxuIFxuLSNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUyAofkRFQlVHQ1RMTVNSX0xCUilcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHU2NCBkZWJ1Z2N0bCA9IERFQlVHQ1RMTVNSX0xCUjtcbiYjNDM7XG4mIzQzO1x0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG4mIzQzO1x0XHRkZWJ1Z2N0bCB8PSBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1Q7XG4mIzQzO1xuJiM0MztcdHJldHVybiB+ZGVidWdjdGw7XG4mIzQzO31cbiBcbiAvKiBzdm0uYyAqL1xuIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiO1xuQEAgLTg3Myw3ICYjNDM7ODgxLDcgQEAgdm9pZCBzdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzdm1fZnJlZV9uZXN0ZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBpbnQgbmVzdGVkX3N2bV92bXJ1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLXZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuJiM0Mzt2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuIFx0XHRcdCAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpmcm9tX3NhdmUpO1xuIHZvaWQgc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZShzdHJ1Y3Qgdm1jYiAqdG9fdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYik7XG4gdm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG5AQCAtODk5LDYgJiM0Mzs5MDcsNyBAQCB2b2lkIG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbiB2b2lkIG5lc3RlZF9jb3B5X3ZtY2Jfc2F2ZV90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNhdmUpO1xuIHZvaWQgbmVzdGVkX3N5bmNfY29udHJvbF9mcm9tX3ZtY2IwMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4mIzQzO2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc3ZtX3N3aXRjaF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3ZtY2JfaW5mbyAqdGFyZ2V0X3ZtY2IpO1xuIFxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUmIzM0OywKICAgICYjMzQ7c3ZtX3NldF9uZXN0ZWRfc3RhdGUmIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O2t2bV9kcjZfZml4ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNJiMzOTtzIGhhbmRsaW5nIG9mIERFQlVHQ1RMTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBzYXZpbmcvcmVzdG9yaW5nLCBhbmQgU01NIHN0YXRlIHRyYW5zaXRpb25zIHRvIHByb3Blcmx5IHZpcnR1YWxpemUgdGhlIGZlYXR1cmUgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIExCUiBWaXJ0dWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjYyMDQ0MDhjZDIwZTgyNjVlZDhkYjRiZmE2YzJhYjE1NTA4YjY0NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDAxOjEwOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuYyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKaW5kZXggZDJjYWY1YTY3ZGJhNDAuLjFiNWRmYTc2NTE0MDdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKQEAgLTc2NCw3ICYjNDM7NzY0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX2RyNyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpOwogCi1zdGF0aWMgdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3U2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1NjQgZml4ZWQgPSBEUjZfRklYRURfMTsKIApAQCAtNzc1LDYgJiM0Mzs3NzUsNyBAQCBzdGF0aWMgdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7CiAJcmV0dXJuIGZpeGVkOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTsKIAogaW50IGt2bV9zZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmgKaW5kZXggOTRmZDg2NzI4ZmVkMjkuLmU4NWMzZmYzZTEyMDFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmgKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIGludCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTsKIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTsKIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7CiYjNDM7dTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7CiB1bnNpZ25lZCBsb25nIGt2bV9nZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9sbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3cpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKaW5kZXggYzE0ODVjM2U2OTFjNDMuLjRkZmNjYzJkZWRhODdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKQEAgLTUzNCw2ICYjNDM7NTM0LDExIEBAIHZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmICghZ21ldF9lbmFibGVkIHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9HTUVUKSkKIAkJdG8tJmd0O21pc2NfY3RsICZhbXA7PSB+U1ZNX01JU0NfRU5BQkxFX0dNRVQ7CiAKJiM0MzsJLyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi8KJiM0MzsJdG8tJmd0O21pc2NfY3RsMiA9IGZyb20tJmd0O21pc2NfY3RsMjsKJiM0MzsJaWYgKCFsYnJ2IHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSkKJiM0MzsJCXRvLSZndDttaXNjX2N0bDIgJmFtcDs9IH5TVk1fTUlTQzJfRU5BQkxFX1ZfTEJSOwomIzQzOwogCXRvLSZndDtpb3BtX2Jhc2VfcGEgICAgICAgID0gZnJvbS0mZ3Q7aW9wbV9iYXNlX3BhICZhbXA7IFBBR0VfTUFTSzsKIAl0by0mZ3Q7bXNycG1fYmFzZV9wYSAgICAgICA9IGZyb20tJmd0O21zcnBtX2Jhc2VfcGEgJmFtcDsgUEFHRV9NQVNLOwogCXRvLSZndDt0c2Nfb2Zmc2V0ICAgICAgICAgID0gZnJvbS0mZ3Q7dHNjX29mZnNldDsKQEAgLTU1MSw3ICYjNDM7NTU2LDYgQEAgdm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJdG8tJmd0O2V2ZW50X2lual9lcnIgICAgICAgPSBmcm9tLSZndDtldmVudF9pbmpfZXJyOwogCXRvLSZndDtuZXh0X3JpcCAgICAgICAgICAgID0gZnJvbS0mZ3Q7bmV4dF9yaXA7CiAJdG8tJmd0O25lc3RlZF9jcjMgICAgICAgICAgPSBmcm9tLSZndDtuZXN0ZWRfY3IzOwotCXRvLSZndDttaXNjX2N0bDIJCT0gZnJvbS0mZ3Q7bWlzY19jdGwyOwogCXRvLSZndDtwYXVzZV9maWx0ZXJfY291bnQgID0gZnJvbS0mZ3Q7cGF1c2VfZmlsdGVyX2NvdW50OwogCXRvLSZndDtwYXVzZV9maWx0ZXJfdGhyZXNoID0gZnJvbS0mZ3Q7cGF1c2VfZmlsdGVyX3RocmVzaDsKIApAQCAtNzM2LDEwICYjNDM7NzQwLDkgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpICZhbXA7JmFtcDsKLQkJKHRvX3N2bSh2Y3B1KS0mZ3Q7bmVzdGVkLmN0bC5taXNjX2N0bDIgJmFtcDsgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUik7CiYjNDM7CXJldHVybiB0b19zdm0odmNwdSktJmd0O25lc3RlZC5jdGwubWlzY19jdGwyICZhbXA7IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7CiB9CiAKIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQpAQCAtODA4LDcgJiM0Mzs4MTEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAogCWlmICh1bmxpa2VseShuZXdfdm1jYjEyIHx8IHZtY2IxMl9pc19kaXJ0eShjb250cm9sLCBWTUNCX0RSKSkpIHsKIAkJdm1jYjAyLSZndDtzYXZlLmRyNyA9IHN2bS0mZ3Q7bmVzdGVkLnNhdmUuZHI3IHwgRFI3X0ZJWEVEXzE7Ci0JCXN2bS0mZ3Q7dmNwdS5hcmNoLmRyNiAgPSBzdm0tJmd0O25lc3RlZC5zYXZlLmRyNiB8IERSNl9BQ1RJVkVfTE9XOwomIzQzOwkJc3ZtLSZndDt2Y3B1LmFyY2guZHI2ICA9IHN2bS0mZ3Q7bmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTsKIAkJdm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9EUik7CiAJfQogCkBAIC04MTgsNyAmIzQzOzgyMSw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCQkgKiBzdm1fc2V0X21zciYjMzk7cyBkZWZpbml0aW9uIG9mIHJlc2VydmVkIGJpdHMuCiAJCSAqLwogCQlzdm1fY29weV9sYnJzKCZhbXA7dm1jYjAyLSZndDtzYXZlLCBzYXZlKTsKLQkJdm1jYjAyLSZndDtzYXZlLmRiZ2N0bCAmYW1wOz0gfkRFQlVHQ1RMX1JFU0VSVkVEX0JJVFM7CiYjNDM7CQl2bWNiMDItJmd0O3NhdmUuZGJnY3RsICZhbXA7PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpOwogCX0gZWxzZSB7CiAJCXN2bV9jb3B5X2xicnMoJmFtcDt2bWNiMDItJmd0O3NhdmUsICZhbXA7dm1jYjAxLSZndDtzYXZlKTsKIAl9CkBAIC0xMjAxLDcgJiM0MzsxMjA0LDcgQEAgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogCiAvKiBDb3B5IHN0YXRlIHNhdmUgYXJlYSBmaWVsZHMgd2hpY2ggYXJlIGhhbmRsZWQgYnkgVk1SVU4gKi8KLXZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLAomIzQzO3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsCiAJCQkgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqZnJvbV9zYXZlKQogewogCXRvX3NhdmUtJmd0O2VzID0gZnJvbV9zYXZlLSZndDtlczsKQEAgLTEyMjgsNyAmIzQzOzEyMzEsNyBAQCB2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSwKIAogCWlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfTEJSVikpIHsKIAkJc3ZtX2NvcHlfbGJycyh0b19zYXZlLCBmcm9tX3NhdmUpOwotCQl0b19zYXZlLSZndDtkYmdjdGwgJmFtcDs9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTOwomIzQzOwkJdG9fc2F2ZS0mZ3Q7ZGJnY3RsICZhbXA7PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpOwogCX0KIH0KIApAQCAtMjA2OSw3ICYjNDM7MjA3Miw3IEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiAJc3ZtLSZndDtuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS0mZ3Q7aGRyLnN2bS52bWNiX3BhOwogCi0Jc3ZtX2NvcHlfdm1ydW5fc3RhdGUoJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUsIHNhdmUpOwomIzQzOwlzdm1fY29weV92bXJ1bl9zdGF0ZSh2Y3B1LCAmYW1wO3N2bS0mZ3Q7dm1jYjAxLnB0ci0mZ3Q7c2F2ZSwgc2F2ZSk7CiAJbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgY3RsKTsKIAogCXN2bV9zd2l0Y2hfdm1jYihzdm0sICZhbXA7c3ZtLSZndDtuZXN0ZWQudm1jYjAyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5iZDIwNGFhMzNlNDdmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC04ODAsOSAmIzQzOzg4MCwxNCBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJYm9vbCBjdXJyZW50X2VuYWJsZV9sYnJ2ID0gc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLm1pc2NfY3RsMiAmYW1wOyBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSOwotCWJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ2N0bCAmYW1wOyBERUJVR0NUTE1TUl9MQlIpIHx8Ci0JCQkgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSAmYW1wOyZhbXA7Ci0JCQkgICAgKHN2bS0mZ3Q7bmVzdGVkLmN0bC5taXNjX2N0bDIgJmFtcDsgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUikpOwomIzQzOwlib29sIGVuYWJsZV9sYnJ2ID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIEJ1cyBMb2NrIERldGVjdCBpbiBndWVzdCBkZXBlbmRzIG9uIExCUiBWaXJ0dWFsaXphdGlvbiAqLwomIzQzOwlpZiAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ2N0bCAmYW1wOyAoREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUKSkKJiM0MzsJCWVuYWJsZV9sYnJ2ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBuZXN0ZWRfdm1jYjEyX2hhc19sYnJ2KHZjcHUpKQomIzQzOwkJZW5hYmxlX2xicnYgPSB0cnVlOwogCiAJaWYgKGVuYWJsZV9sYnJ2ICZhbXA7JmFtcDsgIWN1cnJlbnRfZW5hYmxlX2xicnYpCiAJCV9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpOwpAQCAtMzE2MCw3ICYjNDM7MzE2NSw3IEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcikKIAkJCWRhdGEgJmFtcDs9IH5ERUJVR0NUTE1TUl9CVEY7CiAJCX0KIAotCQlpZiAoZGF0YSAmYW1wOyBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKQomIzQzOwkJaWYgKGRhdGEgJmFtcDsgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpKQogCQkJcmV0dXJuIDE7CiAKIAkJaWYgKHN2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5kYmdjdGwgPT0gZGF0YSkKQEAgLTUwMzMsNyAmIzQzOzUwMzgsNyBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKQogCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2bWNiLCBzYXZlKSAhPSAweDQwMCk7CiAKLQlzdm1fY29weV92bXJ1bl9zdGF0ZShtYXBfc2F2ZS5odmEgJiM0MzsgMHg0MDAsCiYjNDM7CXN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCwKIAkJCSAgICAgJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUpOwogCiAJa3ZtX3ZjcHVfdW5tYXAodmNwdSwgJmFtcDttYXBfc2F2ZSk7CkBAIC01MDc3LDcgJiM0Mzs1MDgyLDcgQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSkKIAkgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpCiAJICovCiAKLQlzdm1fY29weV92bXJ1bl9zdGF0ZSgmYW1wO3N2bS0mZ3Q7dm1jYjAxLnB0ci0mZ3Q7c2F2ZSwgbWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwKTsKJiM0MzsJc3ZtX2NvcHlfdm1ydW5fc3RhdGUodmNwdSwgJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7CiAKIAkvKgogCSAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93CkBAIC01NTkxLDkgJiM0Mzs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpCiAJICogQ2xlYXIgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCBieSBjb21tb24gY29kZSwKIAkgKiBidXQgdGhhdCByZXF1aXJlIGV4cGxpY2l0IFNWTSBzdXBwb3J0ICh0aGF0IGlzbiYjMzk7dCB5ZXQgaW1wbGVtZW50ZWQpLgogCSAqLwotCWt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7CiAJa3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfTVNSX0lNTSk7CiAKJiM0MzsJLyoKJiM0MzsJICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGUKJiM0MzsJICogZ3Vlc3QsIHNpbmNlIEJ1c0xvY2tUcmFwIGlzIGVuYWJsZWQgdGhyb3VnaCBNU1JfSUEzMl9ERUJVR0NUTE1TUiBhbmQKJiM0MzsJICogTVNSX0lBMzJfREVCVUdDVExNU1IgaXMgdmlydHVhbGl6ZWQgb25seSBpZiBMQlIgVmlydHVhbGl6YXRpb24gaXMKJiM0MzsJICogZW5hYmxlZC4KJiM0MzsJICovCiYjNDM7CWlmICghbGJydikKJiM0MzsJCWt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7CiYjNDM7CiAJa3ZtX3NldHVwX3hzc19jYXBzKCk7CiAJa3ZtX2ZpbmFsaXplX2NwdV9jYXBzKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCA3MTZiZTIxZmJhMzM1NC4uNDAyYTgyN2Y2MjJkMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtNzgzLDcgJiM0Mzs3ODMsMTUgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KQogQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBjbGVhciwgX19jbGVhcikKIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgc2V0LCBfX3NldCkKIAotI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+REVCVUdDVExNU1JfTEJSKQomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl1NjQgZGVidWdjdGwgPSBERUJVR0NUTE1TUl9MQlI7CiYjNDM7CiYjNDM7CWlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKQomIzQzOwkJZGVidWdjdGwgfD0gREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUOwomIzQzOwomIzQzOwlyZXR1cm4gfmRlYnVnY3RsOwomIzQzO30KIAogLyogc3ZtLmMgKi8KIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiOwpAQCAtODczLDcgJiM0Mzs4ODEsNyBAQCB2b2lkIHN2bV9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgc3ZtX2ZyZWVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSwKJiM0Mzt2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLAogCQkJICBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKmZyb21fc2F2ZSk7CiB2b2lkIHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUoc3RydWN0IHZtY2IgKnRvX3ZtY2IsIHN0cnVjdCB2bWNiICpmcm9tX3ZtY2IpOwogdm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CkBAIC04OTksNiAmIzQzOzkwNyw3IEBAIHZvaWQgbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAogdm9pZCBuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3RydWN0IHZjcHVfc3ZtICpzdm0sCiAJCQkJICAgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSk7CiB2b2lkIG5lc3RlZF9zeW5jX2NvbnRyb2xfZnJvbV92bWNiMDIoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBzdm1fc3dpdGNoX3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fdm1jYl9pbmZvICp0YXJnZXRfdm1jYik7CiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBTVk0gQnVzIExvY2sgRGV0ZWN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBkZXNpZ25lZCB0byBlbmFibGUgQnVzIExvY2sgRGV0ZWN0IHdpdGhpbiBLVk0gZ3Vlc3RzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcnVubmluZyBvbiBBTUQmIzM5O3MgU1ZNIGFyY2hpdGVjdHVyZS4gSSBjYW4gc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgS1ZNIGZpbGVzOiBgcmVncy5jYCwgYHJlZ3MuaGAsIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29tcG9uZW50cyBpbiBgbmVzdGVkLmNgLCBhbmQgdGhlIFNWTS1zcGVjaWZpYyBjb2RlIGluIGBzdm0uY2AgYW5kIGBzdm0uaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYmUuCgpMb29raW5nIGNsb3NlciwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBhIGZldyBrZXkgYXJlYXMuIEZpcnN0LCBpdCYjMzk7cyBleHBvcnRpbmcgYGt2bV9kcjZfZml4ZWRgLCBsaWtlbHkgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIGludGVybmFsbHkgd2l0aGluIEtWTS4gVGhhdCYjMzk7cyBnb29kLCBrZWVwcyB0aGluZ3MgZW5jYXBzdWxhdGVkIHdoZXJlIHRoZXkgc2hvdWxkIGJlLiBUaGVuLCBpbiBgbmVzdGVkLmNgLCBpdOKAmXMgY2FyZWZ1bGx5IGNsZWFyaW5nIGJpdHMgaW4gYG1pc2NfY3RsMmAgdGhhdCB0aGUgZ3Vlc3Qgc2hvdWxkbiYjMzk7dCBiZSBtZXNzaW5nIHdpdGgsIHBhcnRpY3VsYXJseSBgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUmAgaWYgTEJSViAoTGFzdCBCcmFuY2ggUmVjb3JkIFZhbGlkYXRpb24pIGlzbiYjMzk7dCBzdXBwb3J0ZWQuIFNtYXJ0LCBwcmV2ZW50cyBhbnkgZ3Vlc3QtbGV2ZWwgc2hlbmFuaWdhbnMgdGhhdCBjb3VsZCBjYXVzZSBpbnN0YWJpbGl0eS4KCkZ1cnRoZXIgb24sIGl0JiMzOTtzIHVzaW5nIGBrdm1fZHI2X2ZpeGVkKHZjcHUpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYERSNl9BQ1RJVkVfTE9XYCBpbiB0aGUgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBmdW5jdGlvbi4gVGhhdCBzdWdnZXN0cyBhIG1vcmUgcm9idXN0IG9yIGNvcnJlY3Qgd2F5IHRvIGhhbmRsZSBEUjYgYW5kIHBvdGVudGlhbGx5IGFkZHJlc3Mgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBpZGlvc3luY3Jhc2llcy4gIFNpbWlsYXIgbG9naWMgaXMgYmVpbmcgYXBwbGllZCB0byBkZWJ1ZyBjb250cm9sIE1TUnMuCgpUaGUgY29kZSBhbHNvIGFwcGVhcnMgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgTEJSViBhbmQgQnVzIExvY2sgRGV0ZWN0IGludGVyYWN0aW9ucy4gSXQgY29uZGl0aW9uYWxseSBlbmFibGVzIExCUlYgYmFzZWQgb24gdGhlIGBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1RgIGZsYWcgaW4gdGhlIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGNvbmRpdGlvbmFsbHkgY2xlYXJzIHRoZSBgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUYCBDUFUgZmVhdHVyZSBpZiBMQlJWIGlzIHVuYXZhaWxhYmxlLiAgVGhhdCYjMzk7cyBhIHNvdW5kIGFwcHJvYWNoIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBhdm9pZCBleHBvc2luZyBmZWF0dXJlcyB0aGF0IGFyZW4mIzM5O3QgZnVsbHkgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHNvbGlkLiBJdCYjMzk7cyBlbmFibGluZyBCdXMgTG9jayBEZXRlY3QgZm9yIFNWTSBndWVzdHMgaW4gS1ZNLCB3aGljaCBpcyBhIHZhbHVhYmxlIGZlYXR1cmUgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgS1ZNIGFuZCBLVk1fQU1EIGFyZSBlbmFibGVkIGFuZCB0aGVuIHNlYXJjaCB0aGUga2VybmVsIGNvbmZpZyBmb3IgaG93IGBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1RgIGFuZCByZWxhdGVkIG9wdGlvbnMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgdGhlIGtpbmQgb2YgcGF0Y2ggdGhhdCBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdG8gaW50ZWdyYXRlLCBhc3N1bWluZyBhbGwgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIG1ldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKktWTS9BTUQgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyBwcmltYXJpbHkgd2l0aCBhIGBLVk1fQU1EYCBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIHRoZSBiYXNlLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBkcmlsbGluZyBkb3duIHRvIHRoZSBzcGVjaWZpY3MgdGhhdCB3aWxsIHByb3ZpZGUgb3B0aW1pemF0aW9uLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIGtlcm5lbCBoYXMgY29uZmlndXJlZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgQ1BVIGFuZCB0aGUgaHlwZXJ2aXNvciBpbiB0aGlzIHNwZWNpZmljIHVzZS1jYXNlLiBNeSBmaXJzdCB0d28gYXJlYXMgb2YgaW5xdWlyeSB3b3VsZCBiZSBgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUYCBhbmQgYFg4Nl9GRUFUVVJFX0xCUlZgLiBUaGVzZSBmZWF0dXJlcyBjYW4gYmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIHR1bmluZywgc28gSSYjMzk7bGwgc2VlIHdoYXQmIzM5O3Mgc2V0IGFuZCB3aGF0IHRoYXQgdGVsbHMgbWUgYWJvdXQgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC00MDYtI2RlZmluZSBYODZfRkVBVFVSRV9SRFBJRFx0XHQoMTYqMzImIzQzOzIyKSAvKiBcJiMzNDtyZHBpZFwmIzM0OyBSRFBJRCBpbnN0cnVjdGlvbiAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDo0MDc6I2RlZmluZSBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1RcdCgxNiozMiYjNDM7MjQpIC8qIFwmIzM0O2J1c19sb2NrX2RldGVjdFwmIzM0OyBCdXMgTG9jayBkZXRlY3QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtNDA4LSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xERU1PVEVcdFx0KDE2KjMyJiM0MzsyNSkgLyogXCYjMzQ7Y2xkZW1vdGVcJiMzNDsgQ0xERU1PVEUgaW5zdHJ1Y3Rpb24gKi9cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM9MTEyPXN0YXRpYyB2b2lkIF9faW5pdCBzbGRfc3RhdGVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMTE4LVx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjExOTpcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMTIwLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTMwMT12b2lkIGJ1c19sb2NrX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMzA0LVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjMwNTpcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMzA2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTM5OD1zdGF0aWMgdm9pZCBzbGRfc3RhdGVfc2hvdyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy00MDEtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDAyOlx0aWYgKCghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDAzLVx0ICAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NQTElUX0xPQ0tfREVURUNUKSkgfHxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDA3LVx0aWYgKHNsZF9zdGF0ZSA9PSBzbGRfcmF0ZWxpbWl0KSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDA4Olx0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDA5LVx0XHRcdHByX2luZm8oXCYjMzQ7I0RCOiBzZXR0aW5nIHN5c3RlbSB3aWRlIGJ1cyBsb2NrIHJhdGUgbGltaXQgdG8gJXUvc2VjXFxuXCYjMzQ7LCBibGRfcmF0ZWxpbWl0LmJ1cnN0KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDI2LVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjQyNzpcdH0gZWxzZSBpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy00MjgtXHRcdHByX2luZm8oXCYjMzQ7I0RCOiAlcyBvbiB1c2VyLXNwYWNlIGJ1c19sb2Nrc1xcblwmIzM0OywgYWN0aW9uKTtcbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTc2Nz11NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzMtXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjc3NDpcdGlmICghZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcbmFyY2gveDg2L2t2bS9yZWdzLmMtNzc1LVx0XHRmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NTE0PXN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjA3LVx0aWYgKCFsYnJ2KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NjA4Olx0XHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjA5LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Nzg2PXN0YXRpYyBpbmxpbmUgdTY0IHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03ODktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjc5MDpcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03OTEtXHRcdGRlYnVnY3RsIHw9IERFQlVHQ1RMTVNSX0JVU19MT0NLX0RFVEVDVDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTIyOTY9dTY0IHZteF9nZXRfc3VwcG9ydGVkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBob3N0X2luaXRpYXRlZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTIyOTktXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjIzMDA6XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjIzMDE6XHQgICAgKGhvc3RfaW5pdGlhdGVkIHx8IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0yMzAyLVx0XHRkZWJ1Z2N0bCB8PSBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbiBUYXJnZXRzIGluIHRoZSBTVk0gSHlwZXJ2aXNvcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBTVk0gaHlwZXJ2aXNvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHdlIGNhbiBwb3RlbnRpYWxseSBzcXVlZXplIG91dCBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLiBUaGUgZnVuY3Rpb25zIEkmIzM5O3ZlIGJlZW4gZXhhbWluaW5nIGFyZTogYGt2bV9kcjZfZml4ZWRgLCBgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGVgLCBgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydmAsIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGBzdm1fY29weV92bXJ1bl9zdGF0ZWAsIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX3NldF9tc3JgLCBgc3ZtX2VudGVyX3NtbWAsIGBzdm1fbGVhdmVfc21tYCwgYHN2bV9zZXRfY3B1X2NhcHNgLCBhbmQgYHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0c2AuIFRoYXQmIzM5O3MgYSBsb3QgdG8gY29uc2lkZXIhCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmFycm93IHRoZSBzY29wZS4gSSBrbm93IHRoYXQgYG5lc3RlZF9zdm1fdm1ydW5gIGlzIGNyaXRpY2FsIGFuZCBjYWxscyBgc3ZtX2NvcHlfdm1ydW5fc3RhdGVgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OiBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYHN2bV9zZXRfbXNyYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAsIGFuZCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLgoKTGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBhIGNvdXBsZSBvZiB0aGVtLiBJJiMzOTttIHdvbmRlcmluZyBpZiBgc3ZtX3NldF9tc3JgIGlzIGEgaG90c3BvdC4gSXQmIzM5O3MgaW52b2tlZCB3aGVuZXZlciB0aGUgZ3Vlc3Qgd3JpdGVzIHRvIGFuIE1TUiwgc28gaXQmIzM5O3MgcmVsYXRpdmVseSBmcmVxdWVudCwgYnV0IG5vdCBhcyBmcmVxdWVudCBhcyBWTSBleGl0cy4gYHN2bV91cGRhdGVfbGJydmAgaXMgaW52b2tlZCB3aGVuIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBMQlIgdmlydHVhbGl6YXRpb24gc3RhdGUuIEFuZCB0aGVuIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAgaXMgaW52b2tlZCBkdXJpbmcgdGhlIHJlc3RvcmF0aW9uIG9mIG5lc3RlZCBzdGF0ZSwgZm9yIGV4YW1wbGUsIGR1cmluZyBhIG1pZ3JhdGlvbi4gRmluYWxseSwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBpbnZva2VkIHdoZW4gcHJlcGFyaW5nIHRvIHJ1biB0aGUgTDIgZ3Vlc3QuCgpPa2F5LCBsZXQmIzM5O3MgcHJpb3JpdGl6ZS4gSSB0aGluayBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCwgYHN2bV9lbnRlcl9zbW1gLCBhbmQgYHN2bV9sZWF2ZV9zbW1gIGFyZSBwcm9iYWJseSB0aGUgbW9zdCBpbnRlcmVzdGluZy4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc3ZtX3VwZGF0ZV9sYnJ2YCBhbmQgYHN2bV9zZXRfbXNyYC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX3VwZGF0ZV9sYnJ2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDg9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MjgtXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0xCUik7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgyOTpcdHN2bV91cGRhdGVfbGJydihcdTAwMjZzdm0tXHUwMDNldmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzMC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NTY9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05OTAtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjk5MTpcdC8qIFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIgaXMgY29udHJvbGxlZCBieSBzdm1fdXBkYXRlX2xicnYoKSAqL1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05OTItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMzI1PXZvaWQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzg5LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMzkwOlx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzkxLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9ODczPXN0YXRpYyB2b2lkIF9fc3ZtX2Rpc2FibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy04NzgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjg3OTp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTg4MC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yOTgwPXN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMxNzUtXHRcdHZtY2JfbWFya19kaXJ0eShzdm0tXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMTc2Olx0XHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMxNzctXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9ODE2PXZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxNzp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC04MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU1ZNIEJ1cyBMb2NrIERldGVjdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHNvbWUga2V5IGFyZWFzIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEFNRCBTVk0gZ3Vlc3QgZW52aXJvbm1lbnQuIEkgc2VlIGBzdm1fdXBkYXRlX2xicnZgIGJlaW5nIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAsIGFuZCBgc3ZtX3NldF9tc3JgLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gYHN2bV9zZXRfbXNyYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIGd1ZXN0IE1TUiB3cml0ZXMsIHdoaWNoIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgdG8gYnVzIGxvY2sgZGV0ZWN0aW9uIGdpdmVuIGl0cyBkZXBlbmRlbmNlIG9uIHRoZSBgREVCVUdDVExNU1JgIE1TUi4gYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBpbnRlcmVzdGluZyBhcyB3ZWxsOyB0aGF0JiMzOTtzIHRyaWdnZXJlZCBieSBuZXN0ZWQgVk1SVU4sIGltcGx5aW5nIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYXNwZWN0LiBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBiZWluZyB0cmlnZ2VyZWQgYnkgU01JcyBpbiB0aGUgZ3Vlc3QgaXMgYWxzbyBpbXBvcnRhbnQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBoYW5kbGluZyBTTU0gdHJhbnNpdGlvbnMsIHdoaWNoIGlzIGFsc28gYSBzaWduaWZpY2FudCBhcmVhIHRvIGFkZHJlc3MuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJIGNhbiBsaXN0IGBLVk1gIGFuZCBgS1ZNX0FNRGAuCgpOb3csIHRoZSBmb2N1cyBzeW1ib2xzIGFyZToKYHN2bV91cGRhdGVfbGJydmAKYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYApgc3ZtX3NldF9tc3JgCmBzdm1fZW50ZXJfc21tYApgc3ZtX2xlYXZlX3NtbWAKYHN2bV9zZXRfbmVzdGVkX3N0YXRlYAoKV2FpdC4uLnRoaW5raW5nIHRocm91Z2ggaXQuLi4gYHN2bV9zZXRfbXNyYCBtaWdodCBiZSBhIGhvdCBwYXRoIGZvciBzb21lIE1TUnMsIGJ1dCBpbmNsdWRpbmcgaXQgaXMgZmluZS4gYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBkZWZpbml0ZWx5IHNwZWNpZmljIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gYHN2bV91cGRhdGVfbGJydmAgaXMgdGllZCBkaXJlY3RseSB0byBMQlIgdmlydHVhbGl6YXRpb24uIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gLi4uIFNNTSwgb2J2aW91c2x5LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIGEgYml0IG1vcmUuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgY29uZmlnLXdpc2U/IE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gS1ZNX0FNRCwgb3IgdmlhIGEgbW9kdWxlIHBhcmFtZXRlciwgc28gaXQgc291bmRzIGxpa2UgYEtWTV9BTURgIGlzIHRoZSBrZXkuIElzIHRoZXJlIGFueSBzZXBhcmF0ZSBjb25maWcgZm9yIFNNTT8gTm8sIFNNTSBpcyBwYXJ0IG9mIEtWTS4KCkxldCYjMzk7cyBhbHNvIGNoZWNrIGlmIGBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1RgIGhhcyBjb25maWcgZGVwZW5kZW5jeS4gSXQgaXMgYSBDUFUgZmVhdHVyZSwgc28gaXQgZG9lcyBub3QuIEFsc28sIHRoZSBpbmxpbmUgZnVuY3Rpb24gYHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0c2AgZG9lc24mIzM5O3QgbmVlZCB0byBiZSB0cmFja2VkLgoKT2theSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGtleSBjb25maWd1cmF0aW9ucywgYEtWTWAgYW5kIGBLVk1fQU1EYC4KCkFuZCB0aGUgZm9jdXMgc3ltYm9sczoKYHN2bV91cGRhdGVfbGJydmAKYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYApgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgCmBzdm1fZW50ZXJfc21tYApgc3ZtX2xlYXZlX3NtbWAKCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBpbXBsZW1lbnQgQnVzIExvY2sgRGV0ZWN0IGZvciBBTUQgU1ZNIGd1ZXN0cy4gVGhpcyBpbmV2aXRhYmx5IG1lYW5zIG1vZGlmeWluZyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgdGhlIGBERUJVR0NUTE1TUmAgTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBtYW5hZ2VtZW50IChzYXZpbmcvcmVzdG9yaW5nKSwgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBjb3JyZWN0bHkgdmlydHVhbGl6ZSB0aGUgQnVzIExvY2sgRGV0ZWN0IGZlYXR1cmUuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBwYXRjaCBhZmZlY3RpbmcgZ3Vlc3QgZXhlY3V0aW9uIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24g4oCTIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIExCUiB2aXJ0dWFsaXphdGlvbi4gV2UgbmVlZCB0byBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcy4gTm93IGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYEtWTV9BTURgIGlzIHRoZSBvbmx5IGNvbmZpZyBpbnZvbHZlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk1fU01NIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBLVk1fU01NYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgdGFrZWF3YXkgaGVyZS4gVGhlIGZhY3QgdGhhdCB0aGUgZnVuY3Rpb25zIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gIGhhdmUgYmVlbiBtb2RpZmllZCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBLVk1fU01NYCBpcyBkaXJlY3RseSByZWxldmFudC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIG1ha2Ugc3VyZSBpcyBpbmNsdWRlZCwgYWxvbmcgd2l0aCB0aGUgYmFzZSBgS1ZNYCBhbmQgYEtWTV9BTURgIGNvbmZpZ3VyYXRpb25zLCBnaXZlbiB0aGUgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBsaW5rZWQgdG8gYEtWTV9TTU1gLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHN2bV91cGRhdGVfbGJydmAsIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGFuZCBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgLiBJIGFsc28gbmVlZCB0byBrZWVwIGluIG1pbmQgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYXMgdGhleSBhcmUgYXQgdGhlIGNlbnRlciBvZiB0aGlzLgoKU2luY2UgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBrdm1fZHI2X2ZpeGVkYC4gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGVyZSBtaWdodCBiZSBvdGhlciBjYWxsIHNpdGVzIEkgbmVlZCB0byBjaGVjay4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZHI2X2ZpeGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vcmVncy5jPTc2NT1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpO1xuYXJjaC94ODYva3ZtL3JlZ3MuYy03NjYtXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjc2Nzp1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc2OC17XG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzctfVxuYXJjaC94ODYva3ZtL3JlZ3MuYzo3Nzg6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9kcjZfZml4ZWQpO1xuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzktXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTc4MD1pbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpXG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy03OTMtXHRcdFx0cmV0dXJuIDE7IC8qICNHUCAqL1xuYXJjaC94ODYva3ZtL3JlZ3MuYzo3OTQ6XHRcdHZjcHUtXHUwMDNlYXJjaC5kcjYgPSAodmFsIFx1MDAyNiBEUjZfVk9MQVRJTEUpIHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9yZWdzLmMtNzk1LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTI1PWludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XG5hcmNoL3g4Ni9rdm0vcmVncy5oOjI2OnU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vcmVncy5oLTI3LXVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDg9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MTMtXHRcdHZtY2IwMi1cdTAwM2VzYXZlLmRyNyA9IHN2bS1cdTAwM2VuZXN0ZWQuc2F2ZS5kcjcgfCBEUjdfRklYRURfMTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODE0Olx0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODE1LVx0XHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0RSKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjMKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgcGF0Y2gsIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqUGF0Y2ggRGVlcCBEaXZlOiBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gR3Vlc3RzKioKCk9rYXksIHNvIGBrdm1fZHI2X2ZpeGVkYCBpcyBhIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gYGt2bV9zZXRfZHJgLCB3aGljaCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBXZSBuZWVkIHRvIGZpbmFsaXplIHRoZSBhc3Nlc3NtZW50LiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIEJ1cyBMb2NrIERldGVjdCBzcGVjaWZpY2FsbHkgZm9yIEFNRCBTVk0gZ3Vlc3RzLiBUaGUgbWFpbiBjaGFuZ2VzIGFyZSBpbiBob3cgS1ZNIGhhbmRsZXMgREVCVUdDVExNU1IsIHdoaWNoIGlzIGltcG9ydGFudCwgYW5kIGhvdyBpdCBtYW5hZ2VzIG5lc3RlZCBWTUNCIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IHZpcnR1YWxpemluZyB0aGUgQnVzIExvY2sgRGV0ZWN0IGZlYXR1cmUuIEl0IGFsc28gaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBTTU0gc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSBjcml0aWNhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4KClRoZSBvdmVyYWxsIGBXb3J0aEZ1enppbmdgIGFzc2Vzc21lbnQgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ7IHRoaXMgZmVhdHVyZSB2aXJ0dWFsaXphdGlvbiBpcyBjb21wbGV4LgoKV2UmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyB0ZXN0aW5nOiBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCwgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1pbXBvcnRhbnQgYGt2bV9kcjZfZml4ZWRgLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byB3b3JrIGFyZSBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9TTU1gLiBNYWtlcyBzZW5zZSBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIG91ciBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2bV91cGRhdGVfbGJydiYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZSYjMzQ7LAogICAgJiMzNDtzdm1fc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtzdm1fZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O3N2bV9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7a3ZtX2RyNl9maXhlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMsIG1vZGlmeWluZyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgREVCVUdDVExNU1IsIG5lc3RlZCBWTUNCIHN0YXRlIHNhdmluZy9yZXN0b3JpbmcsIGFuZCBTTU0gc3RhdGUgdHJhbnNpdGlvbnMgdG8gcHJvcGVybHkgdmlydHVhbGl6ZSB0aGUgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY3kgb24gTEJSIFZpcnR1YWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX3VwZGF0ZV9sYnJ2JiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlJiMzNDssCiAgICAmIzM0O3N2bV9zZXRfbmVzdGVkX3N0YXRlJiMzNDssCiAgICAmIzM0O3N2bV9lbnRlcl9zbW0mIzM0OywKICAgICYjMzQ7c3ZtX2xlYXZlX3NtbSYjMzQ7LAogICAgJiMzNDtrdm1fZHI2X2ZpeGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgQnVzIExvY2sgRGV0ZWN0IGZvciBBTUQgU1ZNIGd1ZXN0cywgbW9kaWZ5aW5nIEtWTSYjMzk7cyBoYW5kbGluZyBvZiBERUJVR0NUTE1TUiwgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nL3Jlc3RvcmluZywgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBwcm9wZXJseSB2aXJ0dWFsaXplIHRoZSBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBMQlIgVmlydHVhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMDo1MC44MDg5MDUxMDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTMxMjkxNDA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdm1fdXBkYXRlX2xicnZcIixcbiAgICBcIm5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlXCIsXG4gICAgXCJzdm1fc2V0X25lc3RlZF9zdGF0ZVwiLFxuICAgIFwic3ZtX2VudGVyX3NtbVwiLFxuICAgIFwic3ZtX2xlYXZlX3NtbVwiLFxuICAgIFwia3ZtX2RyNl9maXhlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgQnVzIExvY2sgRGV0ZWN0IGZvciBBTUQgU1ZNIGd1ZXN0cywgbW9kaWZ5aW5nIEtWTSdzIGhhbmRsaW5nIG9mIERFQlVHQ1RMTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBzYXZpbmcvcmVzdG9yaW5nLCBhbmQgU01NIHN0YXRlIHRyYW5zaXRpb25zIHRvIHByb3Blcmx5IHZpcnR1YWxpemUgdGhlIGZlYXR1cmUgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIExCUiBWaXJ0dWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTA6NTAuODA4OTM1NTg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc1NzA1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NjIwNDQwOGNkMjBlODI2NWVkOGRiNGJmYTZjMmFiMTU1MDhiNjQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDAxOjEwOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXFxuaW5kZXggZDJjYWY1YTY3ZGJhNDAuLjFiNWRmYTc2NTE0MDdiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9yZWdzLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXFxuQEAgLTc2NCw3ICs3NjQsNyBAQCB2b2lkIGt2bV91cGRhdGVfZHI3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpO1xcbiBcXG4tc3RhdGljIHU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHU2NCBmaXhlZCA9IERSNl9GSVhFRF8xO1xcbiBcXG5AQCAtNzc1LDYgKzc3NSw3IEBAIHN0YXRpYyB1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdGZpeGVkIHw9IERSNl9CVVNfTE9DSztcXG4gXFx0cmV0dXJuIGZpeGVkO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTtcXG4gXFxuIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbClcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5oIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbmluZGV4IDk0ZmQ4NjcyOGZlZDI5Li5lODVjM2ZmM2UxMjAxYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbkBAIC0yMyw2ICsyMyw3IEBAIGludCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTtcXG4gaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpO1xcbiBpbnQga3ZtX3NldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyOCk7XFxuIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XFxuK3U2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7XFxuIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBrdm1fbG1zdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbXN3KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG5pbmRleCBjMTQ4NWMzZTY5MWM0My4uNGRmY2NjMmRlZGE4N2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG5AQCAtNTM0LDYgKzUzNCwxMSBAQCB2b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0aWYgKCFnbWV0X2VuYWJsZWQgfHwgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0dNRVQpKVxcbiBcXHRcXHR0by1cXHUwMDNlbWlzY19jdGwgXFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9HTUVUO1xcbiBcXG4rXFx0LyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi9cXG4rXFx0dG8tXFx1MDAzZW1pc2NfY3RsMiA9IGZyb20tXFx1MDAzZW1pc2NfY3RsMjtcXG4rXFx0aWYgKCFsYnJ2IHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSlcXG4rXFx0XFx0dG8tXFx1MDAzZW1pc2NfY3RsMiBcXHUwMDI2PSB+U1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcXG4rXFxuIFxcdHRvLVxcdTAwM2Vpb3BtX2Jhc2VfcGEgICAgICAgID0gZnJvbS1cXHUwMDNlaW9wbV9iYXNlX3BhIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiBcXHR0by1cXHUwMDNlbXNycG1fYmFzZV9wYSAgICAgICA9IGZyb20tXFx1MDAzZW1zcnBtX2Jhc2VfcGEgXFx1MDAyNiBQQUdFX01BU0s7XFxuIFxcdHRvLVxcdTAwM2V0c2Nfb2Zmc2V0ICAgICAgICAgID0gZnJvbS1cXHUwMDNldHNjX29mZnNldDtcXG5AQCAtNTUxLDcgKzU1Niw2IEBAIHZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR0by1cXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXFx1MDAzZWV2ZW50X2lual9lcnI7XFxuIFxcdHRvLVxcdTAwM2VuZXh0X3JpcCAgICAgICAgICAgID0gZnJvbS1cXHUwMDNlbmV4dF9yaXA7XFxuIFxcdHRvLVxcdTAwM2VuZXN0ZWRfY3IzICAgICAgICAgID0gZnJvbS1cXHUwMDNlbmVzdGVkX2NyMztcXG4tXFx0dG8tXFx1MDAzZW1pc2NfY3RsMlxcdFxcdD0gZnJvbS1cXHUwMDNlbWlzY19jdGwyO1xcbiBcXHR0by1cXHUwMDNlcGF1c2VfZmlsdGVyX2NvdW50ICA9IGZyb20tXFx1MDAzZXBhdXNlX2ZpbHRlcl9jb3VudDtcXG4gXFx0dG8tXFx1MDAzZXBhdXNlX2ZpbHRlcl90aHJlc2ggPSBmcm9tLVxcdTAwM2VwYXVzZV9maWx0ZXJfdGhyZXNoO1xcbiBcXG5AQCAtNzM2LDEwICs3NDAsOSBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fbG9hZF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQodG9fc3ZtKHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpO1xcbitcXHRyZXR1cm4gdG9fc3ZtKHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbkBAIC04MDgsNyArODExLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcbiBcXHRpZiAodW5saWtlbHkobmV3X3ZtY2IxMiB8fCB2bWNiMTJfaXNfZGlydHkoY29udHJvbCwgVk1DQl9EUikpKSB7XFxuIFxcdFxcdHZtY2IwMi1cXHUwMDNlc2F2ZS5kcjcgPSBzdm0tXFx1MDAzZW5lc3RlZC5zYXZlLmRyNyB8IERSN19GSVhFRF8xO1xcbi1cXHRcXHRzdm0tXFx1MDAzZXZjcHUuYXJjaC5kcjYgID0gc3ZtLVxcdTAwM2VuZXN0ZWQuc2F2ZS5kcjYgfCBEUjZfQUNUSVZFX0xPVztcXG4rXFx0XFx0c3ZtLVxcdTAwM2V2Y3B1LmFyY2guZHI2ICA9IHN2bS1cXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcXG4gXFx0XFx0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9EUik7XFxuIFxcdH1cXG4gXFxuQEAgLTgxOCw3ICs4MjEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4gXFx0XFx0ICogc3ZtX3NldF9tc3IncyBkZWZpbml0aW9uIG9mIHJlc2VydmVkIGJpdHMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzdm1fY29weV9sYnJzKFxcdTAwMjZ2bWNiMDItXFx1MDAzZXNhdmUsIHNhdmUpO1xcbi1cXHRcXHR2bWNiMDItXFx1MDAzZXNhdmUuZGJnY3RsIFxcdTAwMjY9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTO1xcbitcXHRcXHR2bWNiMDItXFx1MDAzZXNhdmUuZGJnY3RsIFxcdTAwMjY9IH5zdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHModmNwdSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN2bV9jb3B5X2xicnMoXFx1MDAyNnZtY2IwMi1cXHUwMDNlc2F2ZSwgXFx1MDAyNnZtY2IwMS1cXHUwMDNlc2F2ZSk7XFxuIFxcdH1cXG5AQCAtMTIwMSw3ICsxMjA0LDcgQEAgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuIFxcbiAvKiBDb3B5IHN0YXRlIHNhdmUgYXJlYSBmaWVsZHMgd2hpY2ggYXJlIGhhbmRsZWQgYnkgVk1SVU4gKi9cXG4tdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuK3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpmcm9tX3NhdmUpXFxuIHtcXG4gXFx0dG9fc2F2ZS1cXHUwMDNlZXMgPSBmcm9tX3NhdmUtXFx1MDAzZWVzO1xcbkBAIC0xMjI4LDcgKzEyMzEsNyBAQCB2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcXG4gXFxuIFxcdGlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfTEJSVikpIHtcXG4gXFx0XFx0c3ZtX2NvcHlfbGJycyh0b19zYXZlLCBmcm9tX3NhdmUpO1xcbi1cXHRcXHR0b19zYXZlLVxcdTAwM2VkYmdjdGwgXFx1MDAyNj0gfkRFQlVHQ1RMX1JFU0VSVkVEX0JJVFM7XFxuK1xcdFxcdHRvX3NhdmUtXFx1MDAzZWRiZ2N0bCBcXHUwMDI2PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTIwNjksNyArMjA3Miw3IEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gXFx0c3ZtLVxcdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS1cXHUwMDNlaGRyLnN2bS52bWNiX3BhO1xcbiBcXG4tXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSwgc2F2ZSk7XFxuK1xcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUsIHNhdmUpO1xcbiBcXHRuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCBjdGwpO1xcbiBcXG4gXFx0c3ZtX3N3aXRjaF92bWNiKHN2bSwgXFx1MDAyNnN2bS1cXHUwMDNlbmVzdGVkLnZtY2IwMik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZWY2OWE1MWFiMjdmOTguLmJkMjA0YWEzM2U0N2ZlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTg4MCw5ICs4ODAsMTQgQEAgdm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbiBcXHRib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wubWlzY19jdGwyIFxcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcXG4tXFx0Ym9vbCBlbmFibGVfbGJydiA9IChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnY3RsIFxcdTAwMjYgREVCVUdDVExNU1JfTEJSKSB8fFxcbi1cXHRcXHRcXHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjYgZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfTEJSVikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIChzdm0tXFx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFxcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUikpO1xcbitcXHRib29sIGVuYWJsZV9sYnJ2ID0gZmFsc2U7XFxuK1xcbitcXHQvKiBCdXMgTG9jayBEZXRlY3QgaW4gZ3Vlc3QgZGVwZW5kcyBvbiBMQlIgVmlydHVhbGl6YXRpb24gKi9cXG4rXFx0aWYgKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5kYmdjdGwgXFx1MDAyNiAoREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUKSlcXG4rXFx0XFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xcbitcXG4rXFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjYgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydih2Y3B1KSlcXG4rXFx0XFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xcbiBcXG4gXFx0aWYgKGVuYWJsZV9sYnJ2IFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2VuYWJsZV9sYnJ2KVxcbiBcXHRcXHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcXG5AQCAtMzE2MCw3ICszMTY1LDcgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxcbiBcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5ERUJVR0NUTE1TUl9CVEY7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChkYXRhIFxcdTAwMjYgREVCVUdDVExfUkVTRVJWRURfQklUUylcXG4rXFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBzdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHModmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0XFx0aWYgKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5kYmdjdGwgPT0gZGF0YSlcXG5AQCAtNTAzMyw3ICs1MDM4LDcgQEAgc3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApO1xcbiBcXG4tXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICsgMHg0MDAsXFxuK1xcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSArIDB4NDAwLFxcbiBcXHRcXHRcXHQgICAgIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUpO1xcbiBcXG4gXFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXFx1MDAyNm1hcF9zYXZlKTtcXG5AQCAtNTA3Nyw3ICs1MDgyLDcgQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG4gXFx0ICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKVxcbiBcXHQgKi9cXG4gXFxuLVxcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSArIDB4NDAwKTtcXG4rXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUodmNwdSwgXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSwgbWFwX3NhdmUuaHZhICsgMHg0MDApO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRW50ZXIgdGhlIG5lc3RlZCBndWVzdCBub3dcXG5AQCAtNTU5MSw5ICs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXFxuIFxcdCAqIENsZWFyIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgYnkgY29tbW9uIGNvZGUsXFxuIFxcdCAqIGJ1dCB0aGF0IHJlcXVpcmUgZXhwbGljaXQgU1ZNIHN1cHBvcnQgKHRoYXQgaXNuJ3QgeWV0IGltcGxlbWVudGVkKS5cXG4gXFx0ICovXFxuLVxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7XFxuIFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX01TUl9JTU0pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGVcXG4rXFx0ICogZ3Vlc3QsIHNpbmNlIEJ1c0xvY2tUcmFwIGlzIGVuYWJsZWQgdGhyb3VnaCBNU1JfSUEzMl9ERUJVR0NUTE1TUiBhbmRcXG4rXFx0ICogTVNSX0lBMzJfREVCVUdDVExNU1IgaXMgdmlydHVhbGl6ZWQgb25seSBpZiBMQlIgVmlydHVhbGl6YXRpb24gaXNcXG4rXFx0ICogZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghbGJydilcXG4rXFx0XFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKTtcXG4rXFxuIFxcdGt2bV9zZXR1cF94c3NfY2FwcygpO1xcbiBcXHRrdm1fZmluYWxpemVfY3B1X2NhcHMoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li40MDJhODI3ZjYyMmQyZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC03ODMsNyArNzgzLDE1IEBAIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlMoYm9vbCwgdGVzdCwgdGVzdClcXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBjbGVhciwgX19jbGVhcilcXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KVxcbiBcXG4tI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+REVCVUdDVExNU1JfTEJSKVxcbitzdGF0aWMgaW5saW5lIHU2NCBzdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHU2NCBkZWJ1Z2N0bCA9IERFQlVHQ1RMTVNSX0xCUjtcXG4rXFxuK1xcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbitcXHRcXHRkZWJ1Z2N0bCB8PSBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1Q7XFxuK1xcbitcXHRyZXR1cm4gfmRlYnVnY3RsO1xcbit9XFxuIFxcbiAvKiBzdm0uYyAqL1xcbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcXG5AQCAtODczLDcgKzg4MSw3IEBAIHZvaWQgc3ZtX2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHN2bV9mcmVlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4gaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuK3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpmcm9tX3NhdmUpO1xcbiB2b2lkIHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUoc3RydWN0IHZtY2IgKnRvX3ZtY2IsIHN0cnVjdCB2bWNiICpmcm9tX3ZtY2IpO1xcbiB2b2lkIG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG5AQCAtODk5LDYgKzkwNyw3IEBAIHZvaWQgbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbiB2b2lkIG5lc3RlZF9jb3B5X3ZtY2Jfc2F2ZV90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSk7XFxuIHZvaWQgbmVzdGVkX3N5bmNfY29udHJvbF9mcm9tX3ZtY2IwMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuK2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHN2bV9zd2l0Y2hfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV92bWNiX2luZm8gKnRhcmdldF92bWNiKTtcXG4gXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMDo1MS43NTc1Nzk3OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzY0MjI1MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwibmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVcIixcbiAgICBcInN2bV9zZXRfbmVzdGVkX3N0YXRlXCIsXG4gICAgXCJzdm1fZW50ZXJfc21tXCIsXG4gICAgXCJzdm1fbGVhdmVfc21tXCIsXG4gICAgXCJrdm1fZHI2X2ZpeGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNJ3MgaGFuZGxpbmcgb2YgREVCVUdDVExNU1IsIG5lc3RlZCBWTUNCIHN0YXRlIHNhdmluZy9yZXN0b3JpbmcsIGFuZCBTTU0gc3RhdGUgdHJhbnNpdGlvbnMgdG8gcHJvcGVybHkgdmlydHVhbGl6ZSB0aGUgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY3kgb24gTEJSIFZpcnR1YWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2MjA0NDA4Y2QyMGU4MjY1ZWQ4ZGI0YmZhNmMyYWIxNTUwOGI2NDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMToxMDo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCBkMmNhZjVhNjdkYmE0MC4uMWI1ZGZhNzY1MTQwN2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5AQCAtNzY0LDcgKzc2NCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9kcjcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpO1xuIFxuLXN0YXRpYyB1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHU2NCBmaXhlZCA9IERSNl9GSVhFRF8xO1xuIFxuQEAgLTc3NSw2ICs3NzUsNyBAQCBzdGF0aWMgdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7XG4gXHRyZXR1cm4gZml4ZWQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTtcbiBcbiBpbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmggYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5pbmRleCA5NGZkODY3MjhmZWQyOS4uZTg1YzNmZjNlMTIwMWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5AQCAtMjMsNiArMjMsNyBAQCBpbnQga3ZtX3NldF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7XG4gaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpO1xuIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTtcbiBpbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpO1xuK3U2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdW5zaWduZWQgbG9uZyBrdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKTtcbiB1bnNpZ25lZCBsb25nIGt2bV9nZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fbG1zdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbXN3KTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuaW5kZXggYzE0ODVjM2U2OTFjNDMuLjRkZmNjYzJkZWRhODdlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTUzNCw2ICs1MzQsMTEgQEAgdm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAoIWdtZXRfZW5hYmxlZCB8fCAhZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfR01FVCkpXG4gXHRcdHRvLVx1MDAzZW1pc2NfY3RsIFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9HTUVUO1xuIFxuK1x0LyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi9cbitcdHRvLVx1MDAzZW1pc2NfY3RsMiA9IGZyb20tXHUwMDNlbWlzY19jdGwyO1xuK1x0aWYgKCFsYnJ2IHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSlcbitcdFx0dG8tXHUwMDNlbWlzY19jdGwyIFx1MDAyNj0gflNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4rXG4gXHR0by1cdTAwM2Vpb3BtX2Jhc2VfcGEgICAgICAgID0gZnJvbS1cdTAwM2Vpb3BtX2Jhc2VfcGEgXHUwMDI2IFBBR0VfTUFTSztcbiBcdHRvLVx1MDAzZW1zcnBtX2Jhc2VfcGEgICAgICAgPSBmcm9tLVx1MDAzZW1zcnBtX2Jhc2VfcGEgXHUwMDI2IFBBR0VfTUFTSztcbiBcdHRvLVx1MDAzZXRzY19vZmZzZXQgICAgICAgICAgPSBmcm9tLVx1MDAzZXRzY19vZmZzZXQ7XG5AQCAtNTUxLDcgKzU1Niw2IEBAIHZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0dG8tXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXHUwMDNlZXZlbnRfaW5qX2VycjtcbiBcdHRvLVx1MDAzZW5leHRfcmlwICAgICAgICAgICAgPSBmcm9tLVx1MDAzZW5leHRfcmlwO1xuIFx0dG8tXHUwMDNlbmVzdGVkX2NyMyAgICAgICAgICA9IGZyb20tXHUwMDNlbmVzdGVkX2NyMztcbi1cdHRvLVx1MDAzZW1pc2NfY3RsMlx0XHQ9IGZyb20tXHUwMDNlbWlzY19jdGwyO1xuIFx0dG8tXHUwMDNlcGF1c2VfZmlsdGVyX2NvdW50ICA9IGZyb20tXHUwMDNlcGF1c2VfZmlsdGVyX2NvdW50O1xuIFx0dG8tXHUwMDNlcGF1c2VfZmlsdGVyX3RocmVzaCA9IGZyb20tXHUwMDNlcGF1c2VfZmlsdGVyX3RocmVzaDtcbiBcbkBAIC03MzYsMTAgKzc0MCw5IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9sb2FkX2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHQodG9fc3ZtKHZjcHUpLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKTtcbitcdHJldHVybiB0b19zdm0odmNwdSktXHUwMDNlbmVzdGVkLmN0bC5taXNjX2N0bDIgXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuQEAgLTgwOCw3ICs4MTEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcbiBcdGlmICh1bmxpa2VseShuZXdfdm1jYjEyIHx8IHZtY2IxMl9pc19kaXJ0eShjb250cm9sLCBWTUNCX0RSKSkpIHtcbiBcdFx0dm1jYjAyLVx1MDAzZXNhdmUuZHI3ID0gc3ZtLVx1MDAzZW5lc3RlZC5zYXZlLmRyNyB8IERSN19GSVhFRF8xO1xuLVx0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwgRFI2X0FDVElWRV9MT1c7XG4rXHRcdHN2bS1cdTAwM2V2Y3B1LmFyY2guZHI2ICA9IHN2bS1cdTAwM2VuZXN0ZWQuc2F2ZS5kcjYgfCBrdm1fZHI2X2ZpeGVkKHZjcHUpO1xuIFx0XHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0RSKTtcbiBcdH1cbiBcbkBAIC04MTgsNyArODIxLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdCAqIHN2bV9zZXRfbXNyJ3MgZGVmaW5pdGlvbiBvZiByZXNlcnZlZCBiaXRzLlxuIFx0XHQgKi9cbiBcdFx0c3ZtX2NvcHlfbGJycyhcdTAwMjZ2bWNiMDItXHUwMDNlc2F2ZSwgc2F2ZSk7XG4tXHRcdHZtY2IwMi1cdTAwM2VzYXZlLmRiZ2N0bCBcdTAwMjY9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTO1xuK1x0XHR2bWNiMDItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3ZtX2NvcHlfbGJycyhcdTAwMjZ2bWNiMDItXHUwMDNlc2F2ZSwgXHUwMDI2dm1jYjAxLVx1MDAzZXNhdmUpO1xuIFx0fVxuQEAgLTEyMDEsNyArMTIwNCw3IEBAIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB9XG4gXG4gLyogQ29weSBzdGF0ZSBzYXZlIGFyZWEgZmllbGRzIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IFZNUlVOICovXG4tdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXG4rdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcbiBcdFx0XHQgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqZnJvbV9zYXZlKVxuIHtcbiBcdHRvX3NhdmUtXHUwMDNlZXMgPSBmcm9tX3NhdmUtXHUwMDNlZXM7XG5AQCAtMTIyOCw3ICsxMjMxLDcgQEAgdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXG4gXG4gXHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKSB7XG4gXHRcdHN2bV9jb3B5X2xicnModG9fc2F2ZSwgZnJvbV9zYXZlKTtcbi1cdFx0dG9fc2F2ZS1cdTAwM2VkYmdjdGwgXHUwMDI2PSB+REVCVUdDVExfUkVTRVJWRURfQklUUztcbitcdFx0dG9fc2F2ZS1cdTAwM2VkYmdjdGwgXHUwMDI2PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDY5LDcgKzIwNzIsNyBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN2bS1cdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS1cdTAwM2VoZHIuc3ZtLnZtY2JfcGE7XG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBzYXZlKTtcbitcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIHNhdmUpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgY3RsKTtcbiBcbiBcdHN2bV9zd2l0Y2hfdm1jYihzdm0sIFx1MDAyNnN2bS1cdTAwM2VuZXN0ZWQudm1jYjAyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZWY2OWE1MWFiMjdmOTguLmJkMjA0YWEzM2U0N2ZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTg4MCw5ICs4ODAsMTQgQEAgdm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0Ym9vbCBjdXJyZW50X2VuYWJsZV9sYnJ2ID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5taXNjX2N0bDIgXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4tXHRib29sIGVuYWJsZV9sYnJ2ID0gKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUuZGJnY3RsIFx1MDAyNiBERUJVR0NUTE1TUl9MQlIpIHx8XG4tXHRcdFx0ICAgIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKHN2bS1cdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUikpO1xuK1x0Ym9vbCBlbmFibGVfbGJydiA9IGZhbHNlO1xuK1xuK1x0LyogQnVzIExvY2sgRGV0ZWN0IGluIGd1ZXN0IGRlcGVuZHMgb24gTEJSIFZpcnR1YWxpemF0aW9uICovXG4rXHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IChERUJVR0NUTE1TUl9MQlIgfCBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1QpKVxuK1x0XHRlbmFibGVfbGJydiA9IHRydWU7XG4rXG4rXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydih2Y3B1KSlcbitcdFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xuIFxuIFx0aWYgKGVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcbiBcdFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG5AQCAtMzE2MCw3ICszMTY1LDcgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxuIFx0XHRcdGRhdGEgXHUwMDI2PSB+REVCVUdDVExNU1JfQlRGO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChkYXRhIFx1MDAyNiBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKVxuK1x0XHRpZiAoZGF0YSBcdTAwMjYgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpKVxuIFx0XHRcdHJldHVybiAxO1xuIFxuIFx0XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgPT0gZGF0YSlcbkBAIC01MDMzLDcgKzUwMzgsNyBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFxuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2bWNiLCBzYXZlKSAhPSAweDQwMCk7XG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShtYXBfc2F2ZS5odmEgKyAweDQwMCxcbitcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSArIDB4NDAwLFxuIFx0XHRcdCAgICAgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSk7XG4gXG4gXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG5AQCAtNTA3Nyw3ICs1MDgyLDcgQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbiBcdCAqIHVzZWQgZHVyaW5nIFNNTSAoc2VlIHN2bV9lbnRlcl9zbW0oKSlcbiBcdCAqL1xuIFxuLVx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSwgbWFwX3NhdmUuaHZhICsgMHg0MDApO1xuK1x0c3ZtX2NvcHlfdm1ydW5fc3RhdGUodmNwdSwgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSwgbWFwX3NhdmUuaHZhICsgMHg0MDApO1xuIFxuIFx0LypcbiBcdCAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93XG5AQCAtNTU5MSw5ICs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG4gXHQgKiBDbGVhciBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkIGJ5IGNvbW1vbiBjb2RlLFxuIFx0ICogYnV0IHRoYXQgcmVxdWlyZSBleHBsaWNpdCBTVk0gc3VwcG9ydCAodGhhdCBpc24ndCB5ZXQgaW1wbGVtZW50ZWQpLlxuIFx0ICovXG4tXHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuIFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfTVNSX0lNTSk7XG4gXG4rXHQvKlxuK1x0ICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGVcbitcdCAqIGd1ZXN0LCBzaW5jZSBCdXNMb2NrVHJhcCBpcyBlbmFibGVkIHRocm91Z2ggTVNSX0lBMzJfREVCVUdDVExNU1IgYW5kXG4rXHQgKiBNU1JfSUEzMl9ERUJVR0NUTE1TUiBpcyB2aXJ0dWFsaXplZCBvbmx5IGlmIExCUiBWaXJ0dWFsaXphdGlvbiBpc1xuK1x0ICogZW5hYmxlZC5cbitcdCAqL1xuK1x0aWYgKCFsYnJ2KVxuK1x0XHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuK1xuIFx0a3ZtX3NldHVwX3hzc19jYXBzKCk7XG4gXHRrdm1fZmluYWxpemVfY3B1X2NhcHMoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li40MDJhODI3ZjYyMmQyZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC03ODMsNyArNzgzLDE1IEBAIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlMoYm9vbCwgdGVzdCwgdGVzdClcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIGNsZWFyLCBfX2NsZWFyKVxuIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgc2V0LCBfX3NldClcbiBcbi0jZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH5ERUJVR0NUTE1TUl9MQlIpXG4rc3RhdGljIGlubGluZSB1NjQgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR1NjQgZGVidWdjdGwgPSBERUJVR0NUTE1TUl9MQlI7XG4rXG4rXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcbitcdFx0ZGVidWdjdGwgfD0gREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUO1xuK1xuK1x0cmV0dXJuIH5kZWJ1Z2N0bDtcbit9XG4gXG4gLyogc3ZtLmMgKi9cbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcbkBAIC04NzMsNyArODgxLDcgQEAgdm9pZCBzdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzdm1fZnJlZV9uZXN0ZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBpbnQgbmVzdGVkX3N2bV92bXJ1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLXZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuK3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXG4gXHRcdFx0ICBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKmZyb21fc2F2ZSk7XG4gdm9pZCBzdm1fY29weV92bWxvYWRzYXZlX3N0YXRlKHN0cnVjdCB2bWNiICp0b192bWNiLCBzdHJ1Y3Qgdm1jYiAqZnJvbV92bWNiKTtcbiB2b2lkIG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbkBAIC04OTksNiArOTA3LDcgQEAgdm9pZCBuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IHZjcHVfc3ZtICpzdm0sXG4gdm9pZCBuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3RydWN0IHZjcHVfc3ZtICpzdm0sXG4gXHRcdFx0XHQgICAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzYXZlKTtcbiB2b2lkIG5lc3RlZF9zeW5jX2NvbnRyb2xfZnJvbV92bWNiMDIoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuK2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc3ZtX3N3aXRjaF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3ZtY2JfaW5mbyAqdGFyZ2V0X3ZtY2IpO1xuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTA6NTEuNzU3NTgyMDI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExOTc1OTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gU1ZNIEJ1cyBMb2NrIERldGVjdCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgZGVzaWduZWQgdG8gZW5hYmxlIEJ1cyBMb2NrIERldGVjdCB3aXRoaW4gS1ZNIGd1ZXN0cywgc3BlY2lmaWNhbGx5IHRob3NlIHJ1bm5pbmcgb24gQU1EJ3MgU1ZNIGFyY2hpdGVjdHVyZS4gSSBjYW4gc2VlIGl0J3MgdG91Y2hpbmcgY29yZSBLVk0gZmlsZXM6IGByZWdzLmNgLCBgcmVncy5oYCwgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnRzIGluIGBuZXN0ZWQuY2AsIGFuZCB0aGUgU1ZNLXNwZWNpZmljIGNvZGUgaW4gYHN2bS5jYCBhbmQgYHN2bS5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYmUuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGEgZmV3IGtleSBhcmVhcy4gRmlyc3QsIGl0J3MgZXhwb3J0aW5nIGBrdm1fZHI2X2ZpeGVkYCwgbGlrZWx5IHRvIG1ha2UgaXQgYWNjZXNzaWJsZSBpbnRlcm5hbGx5IHdpdGhpbiBLVk0uIFRoYXQncyBnb29kLCBrZWVwcyB0aGluZ3MgZW5jYXBzdWxhdGVkIHdoZXJlIHRoZXkgc2hvdWxkIGJlLiBUaGVuLCBpbiBgbmVzdGVkLmNgLCBpdOKAmXMgY2FyZWZ1bGx5IGNsZWFyaW5nIGJpdHMgaW4gYG1pc2NfY3RsMmAgdGhhdCB0aGUgZ3Vlc3Qgc2hvdWxkbid0IGJlIG1lc3Npbmcgd2l0aCwgcGFydGljdWxhcmx5IGBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSYCBpZiBMQlJWIChMYXN0IEJyYW5jaCBSZWNvcmQgVmFsaWRhdGlvbikgaXNuJ3Qgc3VwcG9ydGVkLiBTbWFydCwgcHJldmVudHMgYW55IGd1ZXN0LWxldmVsIHNoZW5hbmlnYW5zIHRoYXQgY291bGQgY2F1c2UgaW5zdGFiaWxpdHkuXG5cbkZ1cnRoZXIgb24sIGl0J3MgdXNpbmcgYGt2bV9kcjZfZml4ZWQodmNwdSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgRFI2X0FDVElWRV9MT1dgIGluIHRoZSBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgIGZ1bmN0aW9uLiBUaGF0IHN1Z2dlc3RzIGEgbW9yZSByb2J1c3Qgb3IgY29ycmVjdCB3YXkgdG8gaGFuZGxlIERSNiBhbmQgcG90ZW50aWFsbHkgYWRkcmVzcyBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGlkaW9zeW5jcmFzaWVzLiAgU2ltaWxhciBsb2dpYyBpcyBiZWluZyBhcHBsaWVkIHRvIGRlYnVnIGNvbnRyb2wgTVNScy5cblxuVGhlIGNvZGUgYWxzbyBhcHBlYXJzIHRvIGNhcmVmdWxseSBtYW5hZ2UgdGhlIExCUlYgYW5kIEJ1cyBMb2NrIERldGVjdCBpbnRlcmFjdGlvbnMuIEl0IGNvbmRpdGlvbmFsbHkgZW5hYmxlcyBMQlJWIGJhc2VkIG9uIHRoZSBgREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUYCBmbGFnIGluIHRoZSBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIGFuZCBjb25kaXRpb25hbGx5IGNsZWFycyB0aGUgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgQ1BVIGZlYXR1cmUgaWYgTEJSViBpcyB1bmF2YWlsYWJsZS4gIFRoYXQncyBhIHNvdW5kIGFwcHJvYWNoIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBhdm9pZCBleHBvc2luZyBmZWF0dXJlcyB0aGF0IGFyZW4ndCBmdWxseSBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBzZWVtcyBzb2xpZC4gSXQncyBlbmFibGluZyBCdXMgTG9jayBEZXRlY3QgZm9yIFNWTSBndWVzdHMgaW4gS1ZNLCB3aGljaCBpcyBhIHZhbHVhYmxlIGZlYXR1cmUgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBLVk0gYW5kIEtWTV9BTUQgYXJlIGVuYWJsZWQgYW5kIHRoZW4gc2VhcmNoIHRoZSBrZXJuZWwgY29uZmlnIGZvciBob3cgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgYW5kIHJlbGF0ZWQgb3B0aW9ucyBhcmUgaGFuZGxlZC4gVGhpcyBpcyB0aGUga2luZCBvZiBwYXRjaCB0aGF0IHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBpbnRlZ3JhdGUsIGFzc3VtaW5nIGFsbCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTA6NTguODc3MzQzNzQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTI2OTA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAxOjEwOjU5LjA3MjYyMzQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzEzMDQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqS1ZNL0FNRCBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyBwcmltYXJpbHkgd2l0aCBhIGBLVk1fQU1EYCBjb25maWd1cmF0aW9uLCB0aGF0J3MgdGhlIGJhc2UuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIGRyaWxsaW5nIGRvd24gdG8gdGhlIHNwZWNpZmljcyB0aGF0IHdpbGwgcHJvdmlkZSBvcHRpbWl6YXRpb24sIHNvIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBrZXJuZWwgaGFzIGNvbmZpZ3VyZWQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIENQVSBhbmQgdGhlIGh5cGVydmlzb3IgaW4gdGhpcyBzcGVjaWZpYyB1c2UtY2FzZS4gTXkgZmlyc3QgdHdvIGFyZWFzIG9mIGlucXVpcnkgd291bGQgYmUgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgYW5kIGBYODZfRkVBVFVSRV9MQlJWYC4gVGhlc2UgZmVhdHVyZXMgY2FuIGJlIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSB0dW5pbmcsIHNvIEknbGwgc2VlIHdoYXQncyBzZXQgYW5kIHdoYXQgdGhhdCB0ZWxscyBtZSBhYm91dCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMTowMi4zNDU3NTYwOTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0ODg3OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC00MDYtI2RlZmluZSBYODZfRkVBVFVSRV9SRFBJRFxcdFxcdCgxNiozMisyMikgLyogXFxcInJkcGlkXFxcIiBSRFBJRCBpbnN0cnVjdGlvbiAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6NDA3OiNkZWZpbmUgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUXFx0KDE2KjMyKzI0KSAvKiBcXFwiYnVzX2xvY2tfZGV0ZWN0XFxcIiBCdXMgTG9jayBkZXRlY3QgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTQwOC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NMREVNT1RFXFx0XFx0KDE2KjMyKzI1KSAvKiBcXFwiY2xkZW1vdGVcXFwiIENMREVNT1RFIGluc3RydWN0aW9uICovXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM9MTEyPXN0YXRpYyB2b2lkIF9faW5pdCBzbGRfc3RhdGVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0xMTgtXFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjExOTpcXHQgICAgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0xMjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTMwMT12b2lkIGJ1c19sb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0zMDQtXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjMwNTpcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0zMDYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTM5OD1zdGF0aWMgdm9pZCBzbGRfc3RhdGVfc2hvdyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jLTQwMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDAyOlxcdGlmICgoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jLTQwMy1cXHQgICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKSB8fFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jLTQwNy1cXHRpZiAoc2xkX3N0YXRlID09IHNsZF9yYXRlbGltaXQpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDA4OlxcdFxcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDA5LVxcdFxcdFxcdHByX2luZm8oXFxcIiNEQjogc2V0dGluZyBzeXN0ZW0gd2lkZSBidXMgbG9jayByYXRlIGxpbWl0IHRvICV1L3NlY1xcXFxuXFxcIiwgYmxkX3JhdGVsaW1pdC5idXJzdCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDI2LVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYzo0Mjc6XFx0fSBlbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy00MjgtXFx0XFx0cHJfaW5mbyhcXFwiI0RCOiAlcyBvbiB1c2VyLXNwYWNlIGJ1c19sb2Nrc1xcXFxuXFxcIiwgYWN0aW9uKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9yZWdzLmM9NzY3PXU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9yZWdzLmMtNzczLVxcbmFyY2gveDg2L2t2bS9yZWdzLmM6Nzc0OlxcdGlmICghZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc3NS1cXHRcXHRmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU1MTQ9c3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTYwNy1cXHRpZiAoIWxicnYpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NjA4OlxcdFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjA5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03ODY9c3RhdGljIGlubGluZSB1NjQgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzg5LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzkwOlxcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzkxLVxcdFxcdGRlYnVnY3RsIHw9IERFQlVHQ1RMTVNSX0JVU19MT0NLX0RFVEVDVDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9MjI5Nj11NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0yMjk5LVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6MjMwMDpcXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjIzMDE6XFx0ICAgIChob3N0X2luaXRpYXRlZCB8fCBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTIzMDItXFx0XFx0ZGVidWdjdGwgfD0gREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMTowMi42OTA2NDk3NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI5OTYxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9uIFRhcmdldHMgaW4gdGhlIFNWTSBIeXBlcnZpc29yKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBTVk0gaHlwZXJ2aXNvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHdlIGNhbiBwb3RlbnRpYWxseSBzcXVlZXplIG91dCBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLiBUaGUgZnVuY3Rpb25zIEkndmUgYmVlbiBleGFtaW5pbmcgYXJlOiBga3ZtX2RyNl9maXhlZGAsIGBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZWAsIGBuZXN0ZWRfdm1jYjEyX2hhc19sYnJ2YCwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCwgYHN2bV9jb3B5X3ZtcnVuX3N0YXRlYCwgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCwgYHN2bV91cGRhdGVfbGJydmAsIGBzdm1fc2V0X21zcmAsIGBzdm1fZW50ZXJfc21tYCwgYHN2bV9sZWF2ZV9zbW1gLCBgc3ZtX3NldF9jcHVfY2Fwc2AsIGFuZCBgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzYC4gVGhhdCdzIGEgbG90IHRvIGNvbnNpZGVyIVxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmFycm93IHRoZSBzY29wZS4gSSBrbm93IHRoYXQgYG5lc3RlZF9zdm1fdm1ydW5gIGlzIGNyaXRpY2FsIGFuZCBjYWxscyBgc3ZtX2NvcHlfdm1ydW5fc3RhdGVgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OiBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYHN2bV9zZXRfbXNyYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAsIGFuZCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLlxuXG5MZXQncyBkcmlsbCBkb3duIGludG8gYSBjb3VwbGUgb2YgdGhlbS4gSSdtIHdvbmRlcmluZyBpZiBgc3ZtX3NldF9tc3JgIGlzIGEgaG90c3BvdC4gSXQncyBpbnZva2VkIHdoZW5ldmVyIHRoZSBndWVzdCB3cml0ZXMgdG8gYW4gTVNSLCBzbyBpdCdzIHJlbGF0aXZlbHkgZnJlcXVlbnQsIGJ1dCBub3QgYXMgZnJlcXVlbnQgYXMgVk0gZXhpdHMuIGBzdm1fdXBkYXRlX2xicnZgIGlzIGludm9rZWQgd2hlbiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgTEJSIHZpcnR1YWxpemF0aW9uIHN0YXRlLiBBbmQgdGhlbiBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgIGlzIGludm9rZWQgZHVyaW5nIHRoZSByZXN0b3JhdGlvbiBvZiBuZXN0ZWQgc3RhdGUsIGZvciBleGFtcGxlLCBkdXJpbmcgYSBtaWdyYXRpb24uIEZpbmFsbHksIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAgaXMgaW52b2tlZCB3aGVuIHByZXBhcmluZyB0byBydW4gdGhlIEwyIGd1ZXN0LlxuXG5Pa2F5LCBsZXQncyBwcmlvcml0aXplLiBJIHRoaW5rIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgLCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLCBgc3ZtX2VudGVyX3NtbWAsIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYXJlIHByb2JhYmx5IHRoZSBtb3N0IGludGVyZXN0aW5nLlxuXG5JJ20gbm93IGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc3ZtX3VwZGF0ZV9sYnJ2YCBhbmQgYHN2bV9zZXRfbXNyYC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIGFueSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMTowOS4zMjA2MTQwMTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3Mzk2NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV91cGRhdGVfbGJydlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTc0OD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI4LVxcdHZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfTEJSKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgyOTpcXHRzdm1fdXBkYXRlX2xicnYoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NTY9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk5MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjk5MTpcXHQvKiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSIGlzIGNvbnRyb2xsZWQgYnkgc3ZtX3VwZGF0ZV9sYnJ2KCkgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk5Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTMyNT12b2lkIG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzg5LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTM5MDpcXHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz04NzM9c3RhdGljIHZvaWQgX19zdm1fZGlzYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtODc4LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6ODc5OnZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTg4MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI5ODA9c3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMTc1LVxcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMxNzY6XFx0XFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzE3Ny1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9ODE2PXZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo4MTc6dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTgxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTE6MDkuNDY4MDI3MDA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU2MTE2OTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTVk0gQnVzIExvY2sgRGV0ZWN0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHNvbWUga2V5IGFyZWFzIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEFNRCBTVk0gZ3Vlc3QgZW52aXJvbm1lbnQuIEkgc2VlIGBzdm1fdXBkYXRlX2xicnZgIGJlaW5nIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAsIGFuZCBgc3ZtX3NldF9tc3JgLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gYHN2bV9zZXRfbXNyYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHRpZWQgdG8gZ3Vlc3QgTVNSIHdyaXRlcywgd2hpY2ggaXMgZGVmaW5pdGVseSByZWxldmFudCB0byBidXMgbG9jayBkZXRlY3Rpb24gZ2l2ZW4gaXRzIGRlcGVuZGVuY2Ugb24gdGhlIGBERUJVR0NUTE1TUmAgTVNSLiBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgIGlzIGludGVyZXN0aW5nIGFzIHdlbGw7IHRoYXQncyB0cmlnZ2VyZWQgYnkgbmVzdGVkIFZNUlVOLCBpbXBseWluZyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFzcGVjdC4gYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYmVpbmcgdHJpZ2dlcmVkIGJ5IFNNSXMgaW4gdGhlIGd1ZXN0IGlzIGFsc28gaW1wb3J0YW50LiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgaGFuZGxpbmcgU01NIHRyYW5zaXRpb25zLCB3aGljaCBpcyBhbHNvIGEgc2lnbmlmaWNhbnQgYXJlYSB0byBhZGRyZXNzLlxuXG5BbHJpZ2h0LCBsZXQncyBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEkgY2FuIGxpc3QgYEtWTWAgYW5kIGBLVk1fQU1EYC5cblxuTm93LCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG5gc3ZtX3VwZGF0ZV9sYnJ2YFxuYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYFxuYHN2bV9zZXRfbXNyYFxuYHN2bV9lbnRlcl9zbW1gXG5gc3ZtX2xlYXZlX3NtbWBcbmBzdm1fc2V0X25lc3RlZF9zdGF0ZWBcblxuV2FpdC4uLnRoaW5raW5nIHRocm91Z2ggaXQuLi4gYHN2bV9zZXRfbXNyYCBtaWdodCBiZSBhIGhvdCBwYXRoIGZvciBzb21lIE1TUnMsIGJ1dCBpbmNsdWRpbmcgaXQgaXMgZmluZS4gYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBkZWZpbml0ZWx5IHNwZWNpZmljIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gYHN2bV91cGRhdGVfbGJydmAgaXMgdGllZCBkaXJlY3RseSB0byBMQlIgdmlydHVhbGl6YXRpb24uIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gLi4uIFNNTSwgb2J2aW91c2x5LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBhIGJpdCBtb3JlLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHJlbGV2YW50IGNvbmZpZy13aXNlPyBOZXN0ZWQgdmlydHVhbGl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIEtWTV9BTUQsIG9yIHZpYSBhIG1vZHVsZSBwYXJhbWV0ZXIsIHNvIGl0IHNvdW5kcyBsaWtlIGBLVk1fQU1EYCBpcyB0aGUga2V5LiBJcyB0aGVyZSBhbnkgc2VwYXJhdGUgY29uZmlnIGZvciBTTU0/IE5vLCBTTU0gaXMgcGFydCBvZiBLVk0uXG5cbkxldCdzIGFsc28gY2hlY2sgaWYgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgaGFzIGNvbmZpZyBkZXBlbmRlbmN5LiBJdCBpcyBhIENQVSBmZWF0dXJlLCBzbyBpdCBkb2VzIG5vdC4gQWxzbywgdGhlIGlubGluZSBmdW5jdGlvbiBgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzYCBkb2Vzbid0IG5lZWQgdG8gYmUgdHJhY2tlZC5cblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLCBgS1ZNYCBhbmQgYEtWTV9BTURgLlxuXG5BbmQgdGhlIGZvY3VzIHN5bWJvbHM6XG5gc3ZtX3VwZGF0ZV9sYnJ2YFxuYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYFxuYHN2bV9zZXRfbmVzdGVkX3N0YXRlYFxuYHN2bV9lbnRlcl9zbW1gXG5gc3ZtX2xlYXZlX3NtbWBcblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gaW1wbGVtZW50IEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMuIFRoaXMgaW5ldml0YWJseSBtZWFucyBtb2RpZnlpbmcgS1ZNJ3MgaGFuZGxpbmcgb2YgdGhlIGBERUJVR0NUTE1TUmAgTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBtYW5hZ2VtZW50IChzYXZpbmcvcmVzdG9yaW5nKSwgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBjb3JyZWN0bHkgdmlydHVhbGl6ZSB0aGUgQnVzIExvY2sgRGV0ZWN0IGZlYXR1cmUuIEl0J3MgYSBmdW5jdGlvbmFsIHBhdGNoIGFmZmVjdGluZyBndWVzdCBleGVjdXRpb24gYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiDigJMgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggTEJSIHZpcnR1YWxpemF0aW9uLiBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgZGVwZW5kZW5jaWVzLiBOb3cgbGV0IG1lIGRvdWJsZS1jaGVjayBpZiBgS1ZNX0FNRGAgaXMgdGhlIG9ubHkgY29uZmlnIGludm9sdmVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAxOjExOjE5LjAyOTE5ODc1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjc4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTE6MTkuMjgyNDg1NDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mzg4MTYxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTV9TTU0gQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBLVk1fU01NYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgdGhlIGtleSB0YWtlYXdheSBoZXJlLiBUaGUgZmFjdCB0aGF0IHRoZSBmdW5jdGlvbnMgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgaGF2ZSBiZWVuIG1vZGlmaWVkIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYEtWTV9TTU1gIGlzIGRpcmVjdGx5IHJlbGV2YW50LiBUaGVyZWZvcmUsIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBtYWtlIHN1cmUgaXMgaW5jbHVkZWQsIGFsb25nIHdpdGggdGhlIGJhc2UgYEtWTWAgYW5kIGBLVk1fQU1EYCBjb25maWd1cmF0aW9ucywgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGltcG9ydGFudCBzeW1ib2xzIGxpbmtlZCB0byBgS1ZNX1NNTWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBzdm1fdXBkYXRlX2xicnZgLCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLCBhbmQgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYC4gSSBhbHNvIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gIGFzIHRoZXkgYXJlIGF0IHRoZSBjZW50ZXIgb2YgdGhpcy5cblxuU2luY2UgSSdtIGFscmVhZHkgaW4gdGhpcyB0aG91Z2h0IHByb2Nlc3MsIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9kcjZfZml4ZWRgLiBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vcmVncy5jYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGVyZSBtaWdodCBiZSBvdGhlciBjYWxsIHNpdGVzIEkgbmVlZCB0byBjaGVjay4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMToyMy45MjEzMDQzNTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIzMjk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZHI2X2ZpeGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3JlZ3MuYz03NjU9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV91cGRhdGVfZHI3KTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc2Ni1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjc2Nzp1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy03Njgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzctfVxcbmFyY2gveDg2L2t2bS9yZWdzLmM6Nzc4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc3OS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTc4MD1pbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc5My1cXHRcXHRcXHRyZXR1cm4gMTsgLyogI0dQICovXFxuYXJjaC94ODYva3ZtL3JlZ3MuYzo3OTQ6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5kcjYgPSAodmFsIFxcdTAwMjYgRFI2X1ZPTEFUSUxFKSB8IGt2bV9kcjZfZml4ZWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy03OTUtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTI1PWludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuaDoyNjp1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9yZWdzLmgtMjctdW5zaWduZWQgbG9uZyBrdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NzQ4PXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MTMtXFx0XFx0dm1jYjAyLVxcdTAwM2VzYXZlLmRyNyA9IHN2bS1cXHUwMDNlbmVzdGVkLnNhdmUuZHI3IHwgRFI3X0ZJWEVEXzE7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4MTQ6XFx0XFx0c3ZtLVxcdTAwM2V2Y3B1LmFyY2guZHI2ICA9IHN2bS1cXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgxNS1cXHRcXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0RSKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTE6MjQuMDgwNTQyNjIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTU2MzI2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqUGF0Y2ggRGVlcCBEaXZlOiBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gR3Vlc3RzKipcblxuT2theSwgc28gYGt2bV9kcjZfZml4ZWRgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiBga3ZtX3NldF9kcmAsIHdoaWNoIG1ha2VzIGl0IGEgc29saWQgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFdlIG5lZWQgdG8gZmluYWxpemUgdGhlIGFzc2Vzc21lbnQuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRpbmcgQnVzIExvY2sgRGV0ZWN0IHNwZWNpZmljYWxseSBmb3IgQU1EIFNWTSBndWVzdHMuIFRoZSBtYWluIGNoYW5nZXMgYXJlIGluIGhvdyBLVk0gaGFuZGxlcyBERUJVR0NUTE1TUiwgd2hpY2ggaXMgaW1wb3J0YW50LCBhbmQgaG93IGl0IG1hbmFnZXMgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nIGFuZCByZXN0b3JpbmcuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgdmlydHVhbGl6aW5nIHRoZSBCdXMgTG9jayBEZXRlY3QgZmVhdHVyZS4gSXQgYWxzbyBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIGNyaXRpY2FsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uLlxuXG5UaGUgb3ZlcmFsbCBgV29ydGhGdXp6aW5nYCBhc3Nlc3NtZW50IGlzIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kOyB0aGlzIGZlYXR1cmUgdmlydHVhbGl6YXRpb24gaXMgY29tcGxleC5cblxuV2UndmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIHRlc3Rpbmc6IGBzdm1fdXBkYXRlX2xicnZgLCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLCBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgLCBgc3ZtX2VudGVyX3NtbWAsIGBzdm1fbGVhdmVfc21tYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLWltcG9ydGFudCBga3ZtX2RyNl9maXhlZGAuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gd29yayBhcmUgYEtWTWAsIGBLVk1fQU1EYCwgYW5kIGBLVk1fU01NYC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBjb25maWd1cmF0aW9ucyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMjMsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAxOjExOjI5Ljc5NjE4NzQ4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTYxMTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fU01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZtX3VwZGF0ZV9sYnJ2XCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZVwiLFxuICAgIFwic3ZtX3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcImt2bV9kcjZfZml4ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMsIG1vZGlmeWluZyBLVk0ncyBoYW5kbGluZyBvZiBERUJVR0NUTE1TUiwgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nL3Jlc3RvcmluZywgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBwcm9wZXJseSB2aXJ0dWFsaXplIHRoZSBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBMQlIgVmlydHVhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fU01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZtX3VwZGF0ZV9sYnJ2XCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZVwiLFxuICAgIFwic3ZtX3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcImt2bV9kcjZfZml4ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMsIG1vZGlmeWluZyBLVk0ncyBoYW5kbGluZyBvZiBERUJVR0NUTE1TUiwgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nL3Jlc3RvcmluZywgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBwcm9wZXJseSB2aXJ0dWFsaXplIHRoZSBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBMQlIgVmlydHVhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 00:56:58 +0000 UTC FinishedAt: 2026-07-10 01:11:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_SMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "50406d35f5635e1cc523e61409d57e851b5f5df8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_SMM" ], "series_id": "31d145ec-e5c2-41c2-bcb3-fe91249c53c8" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "svm_update_lbrv", "nested_vmcb02_prepare_save", "svm_set_nested_state", "svm_enter_smm", "svm_leave_smm", "kvm_dr6_fixed" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUmIzM0OywKICAgICYjMzQ7c3ZtX3NldF9uZXN0ZWRfc3RhdGUmIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O2t2bV9kcjZfZml4ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNJiMzOTtzIGhhbmRsaW5nIG9mIERFQlVHQ1RMTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBzYXZpbmcvcmVzdG9yaW5nLCBhbmQgU01NIHN0YXRlIHRyYW5zaXRpb25zIHRvIHByb3Blcmx5IHZpcnR1YWxpemUgdGhlIGZlYXR1cmUgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIExCUiBWaXJ0dWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2MjA0NDA4Y2QyMGU4MjY1ZWQ4ZGI0YmZhNmMyYWIxNTUwOGI2NDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMToxMDo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5jIGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuaW5kZXggZDJjYWY1YTY3ZGJhNDAuLjFiNWRmYTc2NTE0MDdiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3JlZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3JlZ3MuY1xuQEAgLTc2NCw3ICYjNDM7NzY0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX2RyNyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdXBkYXRlX2RyNyk7XG4gXG4tc3RhdGljIHU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7dTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHU2NCBmaXhlZCA9IERSNl9GSVhFRF8xO1xuIFxuQEAgLTc3NSw2ICYjNDM7Nzc1LDcgQEAgc3RhdGljIHU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0Zml4ZWQgfD0gRFI2X0JVU19MT0NLO1xuIFx0cmV0dXJuIGZpeGVkO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9kcjZfZml4ZWQpO1xuIFxuIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbClcbiB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmhcbmluZGV4IDk0ZmQ4NjcyOGZlZDI5Li5lODVjM2ZmM2UxMjAxYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9yZWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBpbnQga3ZtX3NldF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7XG4gaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpO1xuIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTtcbiBpbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpO1xuJiM0Mzt1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7XG4gdW5zaWduZWQgbG9uZyBrdm1fZ2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQga3ZtX2xtc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG1zdyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbmluZGV4IGMxNDg1YzNlNjkxYzQzLi40ZGZjY2MyZGVkYTg3ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbkBAIC01MzQsNiAmIzQzOzUzNCwxMSBAQCB2b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGlmICghZ21ldF9lbmFibGVkIHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9HTUVUKSlcbiBcdFx0dG8tXHUwMDNlbWlzY19jdGwgXHUwMDI2PSB+U1ZNX01JU0NfRU5BQkxFX0dNRVQ7XG4gXG4mIzQzO1x0LyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi9cbiYjNDM7XHR0by1cdTAwM2VtaXNjX2N0bDIgPSBmcm9tLVx1MDAzZW1pc2NfY3RsMjtcbiYjNDM7XHRpZiAoIWxicnYgfHwgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpKVxuJiM0MztcdFx0dG8tXHUwMDNlbWlzY19jdGwyIFx1MDAyNj0gflNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4mIzQzO1xuIFx0dG8tXHUwMDNlaW9wbV9iYXNlX3BhICAgICAgICA9IGZyb20tXHUwMDNlaW9wbV9iYXNlX3BhIFx1MDAyNiBQQUdFX01BU0s7XG4gXHR0by1cdTAwM2Vtc3JwbV9iYXNlX3BhICAgICAgID0gZnJvbS1cdTAwM2Vtc3JwbV9iYXNlX3BhIFx1MDAyNiBQQUdFX01BU0s7XG4gXHR0by1cdTAwM2V0c2Nfb2Zmc2V0ICAgICAgICAgID0gZnJvbS1cdTAwM2V0c2Nfb2Zmc2V0O1xuQEAgLTU1MSw3ICYjNDM7NTU2LDYgQEAgdm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHR0by1cdTAwM2VldmVudF9pbmpfZXJyICAgICAgID0gZnJvbS1cdTAwM2VldmVudF9pbmpfZXJyO1xuIFx0dG8tXHUwMDNlbmV4dF9yaXAgICAgICAgICAgICA9IGZyb20tXHUwMDNlbmV4dF9yaXA7XG4gXHR0by1cdTAwM2VuZXN0ZWRfY3IzICAgICAgICAgID0gZnJvbS1cdTAwM2VuZXN0ZWRfY3IzO1xuLVx0dG8tXHUwMDNlbWlzY19jdGwyXHRcdD0gZnJvbS1cdTAwM2VtaXNjX2N0bDI7XG4gXHR0by1cdTAwM2VwYXVzZV9maWx0ZXJfY291bnQgID0gZnJvbS1cdTAwM2VwYXVzZV9maWx0ZXJfY291bnQ7XG4gXHR0by1cdTAwM2VwYXVzZV9maWx0ZXJfdGhyZXNoID0gZnJvbS1cdTAwM2VwYXVzZV9maWx0ZXJfdGhyZXNoO1xuIFxuQEAgLTczNiwxMCAmIzQzOzc0MCw5IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9sb2FkX2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mztib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcdTAwMjZcdTAwMjZcbi1cdFx0KHRvX3N2bSh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUik7XG4mIzQzO1x0cmV0dXJuIHRvX3N2bSh2Y3B1KS1cdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG5AQCAtODA4LDcgJiM0Mzs4MTEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcbiBcdGlmICh1bmxpa2VseShuZXdfdm1jYjEyIHx8IHZtY2IxMl9pc19kaXJ0eShjb250cm9sLCBWTUNCX0RSKSkpIHtcbiBcdFx0dm1jYjAyLVx1MDAzZXNhdmUuZHI3ID0gc3ZtLVx1MDAzZW5lc3RlZC5zYXZlLmRyNyB8IERSN19GSVhFRF8xO1xuLVx0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwgRFI2X0FDVElWRV9MT1c7XG4mIzQzO1x0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcbiBcdFx0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9EUik7XG4gXHR9XG4gXG5AQCAtODE4LDcgJiM0Mzs4MjEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdFx0ICogc3ZtX3NldF9tc3ImIzM5O3MgZGVmaW5pdGlvbiBvZiByZXNlcnZlZCBiaXRzLlxuIFx0XHQgKi9cbiBcdFx0c3ZtX2NvcHlfbGJycyhcdTAwMjZ2bWNiMDItXHUwMDNlc2F2ZSwgc2F2ZSk7XG4tXHRcdHZtY2IwMi1cdTAwM2VzYXZlLmRiZ2N0bCBcdTAwMjY9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTO1xuJiM0MztcdFx0dm1jYjAyLVx1MDAzZXNhdmUuZGJnY3RsIFx1MDAyNj0gfnN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0cyh2Y3B1KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN2bV9jb3B5X2xicnMoXHUwMDI2dm1jYjAyLVx1MDAzZXNhdmUsIFx1MDAyNnZtY2IwMS1cdTAwM2VzYXZlKTtcbiBcdH1cbkBAIC0xMjAxLDcgJiM0MzsxMjA0LDcgQEAgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBcbiAvKiBDb3B5IHN0YXRlIHNhdmUgYXJlYSBmaWVsZHMgd2hpY2ggYXJlIGhhbmRsZWQgYnkgVk1SVU4gKi9cbi12b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcbiYjNDM7dm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcbiBcdFx0XHQgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqZnJvbV9zYXZlKVxuIHtcbiBcdHRvX3NhdmUtXHUwMDNlZXMgPSBmcm9tX3NhdmUtXHUwMDNlZXM7XG5AQCAtMTIyOCw3ICYjNDM7MTIzMSw3IEBAIHZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuIFxuIFx0aWYgKGt2bV9jcHVfY2FwX2hhcyhYODZfRkVBVFVSRV9MQlJWKSkge1xuIFx0XHRzdm1fY29weV9sYnJzKHRvX3NhdmUsIGZyb21fc2F2ZSk7XG4tXHRcdHRvX3NhdmUtXHUwMDNlZGJnY3RsIFx1MDAyNj0gfkRFQlVHQ1RMX1JFU0VSVkVEX0JJVFM7XG4mIzQzO1x0XHR0b19zYXZlLVx1MDAzZWRiZ2N0bCBcdTAwMjY9IH5zdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHModmNwdSk7XG4gXHR9XG4gfVxuIFxuQEAgLTIwNjksNyAmIzQzOzIwNzIsNyBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN2bS1cdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS1cdTAwM2VoZHIuc3ZtLnZtY2JfcGE7XG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBzYXZlKTtcbiYjNDM7XHRzdm1fY29weV92bXJ1bl9zdGF0ZSh2Y3B1LCBcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBzYXZlKTtcbiBcdG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdm0sIGN0bCk7XG4gXG4gXHRzdm1fc3dpdGNoX3ZtY2Ioc3ZtLCBcdTAwMjZzdm0tXHUwMDNlbmVzdGVkLnZtY2IwMik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5iZDIwNGFhMzNlNDdmZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC04ODAsOSAmIzQzOzg4MCwxNCBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcbi1cdGJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IERFQlVHQ1RMTVNSX0xCUikgfHxcbi1cdFx0XHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAoc3ZtLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKSk7XG4mIzQzO1x0Ym9vbCBlbmFibGVfbGJydiA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBCdXMgTG9jayBEZXRlY3QgaW4gZ3Vlc3QgZGVwZW5kcyBvbiBMQlIgVmlydHVhbGl6YXRpb24gKi9cbiYjNDM7XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IChERUJVR0NUTE1TUl9MQlIgfCBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1QpKVxuJiM0MztcdFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydih2Y3B1KSlcbiYjNDM7XHRcdGVuYWJsZV9sYnJ2ID0gdHJ1ZTtcbiBcbiBcdGlmIChlbmFibGVfbGJydiBcdTAwMjZcdTAwMjYgIWN1cnJlbnRfZW5hYmxlX2xicnYpXG4gXHRcdF9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpO1xuQEAgLTMxNjAsNyAmIzQzOzMxNjUsNyBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3IpXG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5ERUJVR0NUTE1TUl9CVEY7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKGRhdGEgXHUwMDI2IERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMpXG4mIzQzO1x0XHRpZiAoZGF0YSBcdTAwMjYgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpKVxuIFx0XHRcdHJldHVybiAxO1xuIFxuIFx0XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgPT0gZGF0YSlcbkBAIC01MDMzLDcgJiM0Mzs1MDM4LDcgQEAgc3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbiBcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApO1xuIFxuLVx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwLFxuJiM0MztcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCxcbiBcdFx0XHQgICAgIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUpO1xuIFxuIFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwX3NhdmUpO1xuQEAgLTUwNzcsNyAmIzQzOzUwODIsNyBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFx0ICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKVxuIFx0ICovXG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBtYXBfc2F2ZS5odmEgJiM0MzsgMHg0MDApO1xuJiM0MztcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7XG4gXG4gXHQvKlxuIFx0ICogRW50ZXIgdGhlIG5lc3RlZCBndWVzdCBub3dcbkBAIC01NTkxLDkgJiM0Mzs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG4gXHQgKiBDbGVhciBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkIGJ5IGNvbW1vbiBjb2RlLFxuIFx0ICogYnV0IHRoYXQgcmVxdWlyZSBleHBsaWNpdCBTVk0gc3VwcG9ydCAodGhhdCBpc24mIzM5O3QgeWV0IGltcGxlbWVudGVkKS5cbiBcdCAqL1xuLVx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKTtcbiBcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX01TUl9JTU0pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGVcbiYjNDM7XHQgKiBndWVzdCwgc2luY2UgQnVzTG9ja1RyYXAgaXMgZW5hYmxlZCB0aHJvdWdoIE1TUl9JQTMyX0RFQlVHQ1RMTVNSIGFuZFxuJiM0MztcdCAqIE1TUl9JQTMyX0RFQlVHQ1RMTVNSIGlzIHZpcnR1YWxpemVkIG9ubHkgaWYgTEJSIFZpcnR1YWxpemF0aW9uIGlzXG4mIzQzO1x0ICogZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWxicnYpXG4mIzQzO1x0XHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuJiM0MztcbiBcdGt2bV9zZXR1cF94c3NfY2FwcygpO1xuIFx0a3ZtX2ZpbmFsaXplX2NwdV9jYXBzKCk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA3MTZiZTIxZmJhMzM1NC4uNDAyYTgyN2Y2MjJkMmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtNzgzLDcgJiM0Mzs3ODMsMTUgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KVxuIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgY2xlYXIsIF9fY2xlYXIpXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KVxuIFxuLSNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUyAofkRFQlVHQ1RMTVNSX0xCUilcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHU2NCBkZWJ1Z2N0bCA9IERFQlVHQ1RMTVNSX0xCUjtcbiYjNDM7XG4mIzQzO1x0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG4mIzQzO1x0XHRkZWJ1Z2N0bCB8PSBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1Q7XG4mIzQzO1xuJiM0MztcdHJldHVybiB+ZGVidWdjdGw7XG4mIzQzO31cbiBcbiAvKiBzdm0uYyAqL1xuIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiO1xuQEAgLTg3Myw3ICYjNDM7ODgxLDcgQEAgdm9pZCBzdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzdm1fZnJlZV9uZXN0ZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBpbnQgbmVzdGVkX3N2bV92bXJ1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLXZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuJiM0Mzt2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuIFx0XHRcdCAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpmcm9tX3NhdmUpO1xuIHZvaWQgc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZShzdHJ1Y3Qgdm1jYiAqdG9fdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYik7XG4gdm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG5AQCAtODk5LDYgJiM0Mzs5MDcsNyBAQCB2b2lkIG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbiB2b2lkIG5lc3RlZF9jb3B5X3ZtY2Jfc2F2ZV90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnNhdmUpO1xuIHZvaWQgbmVzdGVkX3N5bmNfY29udHJvbF9mcm9tX3ZtY2IwMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4mIzQzO2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc3ZtX3N3aXRjaF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3ZtY2JfaW5mbyAqdGFyZ2V0X3ZtY2IpO1xuIFxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdm1fdXBkYXRlX2xicnYmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUmIzM0OywKICAgICYjMzQ7c3ZtX3NldF9uZXN0ZWRfc3RhdGUmIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O2t2bV9kcjZfZml4ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNJiMzOTtzIGhhbmRsaW5nIG9mIERFQlVHQ1RMTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBzYXZpbmcvcmVzdG9yaW5nLCBhbmQgU01NIHN0YXRlIHRyYW5zaXRpb25zIHRvIHByb3Blcmx5IHZpcnR1YWxpemUgdGhlIGZlYXR1cmUgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIExCUiBWaXJ0dWFsaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjYyMDQ0MDhjZDIwZTgyNjVlZDhkYjRiZmE2YzJhYjE1NTA4YjY0NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDAxOjEwOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuYyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKaW5kZXggZDJjYWY1YTY3ZGJhNDAuLjFiNWRmYTc2NTE0MDdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmMKQEAgLTc2NCw3ICYjNDM7NzY0LDcgQEAgdm9pZCBrdm1fdXBkYXRlX2RyNyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpOwogCi1zdGF0aWMgdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3U2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1NjQgZml4ZWQgPSBEUjZfRklYRURfMTsKIApAQCAtNzc1LDYgJiM0Mzs3NzUsNyBAQCBzdGF0aWMgdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7CiAJcmV0dXJuIGZpeGVkOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTsKIAogaW50IGt2bV9zZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9yZWdzLmgKaW5kZXggOTRmZDg2NzI4ZmVkMjkuLmU4NWMzZmYzZTEyMDFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9yZWdzLmgKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIGludCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKIGludCBrdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTsKIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTsKIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7CiYjNDM7dTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7CiB1bnNpZ25lZCBsb25nIGt2bV9nZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9sbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3cpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKaW5kZXggYzE0ODVjM2U2OTFjNDMuLjRkZmNjYzJkZWRhODdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMKQEAgLTUzNCw2ICYjNDM7NTM0LDExIEBAIHZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmICghZ21ldF9lbmFibGVkIHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9HTUVUKSkKIAkJdG8tJmd0O21pc2NfY3RsICZhbXA7PSB+U1ZNX01JU0NfRU5BQkxFX0dNRVQ7CiAKJiM0MzsJLyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi8KJiM0MzsJdG8tJmd0O21pc2NfY3RsMiA9IGZyb20tJmd0O21pc2NfY3RsMjsKJiM0MzsJaWYgKCFsYnJ2IHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSkKJiM0MzsJCXRvLSZndDttaXNjX2N0bDIgJmFtcDs9IH5TVk1fTUlTQzJfRU5BQkxFX1ZfTEJSOwomIzQzOwogCXRvLSZndDtpb3BtX2Jhc2VfcGEgICAgICAgID0gZnJvbS0mZ3Q7aW9wbV9iYXNlX3BhICZhbXA7IFBBR0VfTUFTSzsKIAl0by0mZ3Q7bXNycG1fYmFzZV9wYSAgICAgICA9IGZyb20tJmd0O21zcnBtX2Jhc2VfcGEgJmFtcDsgUEFHRV9NQVNLOwogCXRvLSZndDt0c2Nfb2Zmc2V0ICAgICAgICAgID0gZnJvbS0mZ3Q7dHNjX29mZnNldDsKQEAgLTU1MSw3ICYjNDM7NTU2LDYgQEAgdm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJdG8tJmd0O2V2ZW50X2lual9lcnIgICAgICAgPSBmcm9tLSZndDtldmVudF9pbmpfZXJyOwogCXRvLSZndDtuZXh0X3JpcCAgICAgICAgICAgID0gZnJvbS0mZ3Q7bmV4dF9yaXA7CiAJdG8tJmd0O25lc3RlZF9jcjMgICAgICAgICAgPSBmcm9tLSZndDtuZXN0ZWRfY3IzOwotCXRvLSZndDttaXNjX2N0bDIJCT0gZnJvbS0mZ3Q7bWlzY19jdGwyOwogCXRvLSZndDtwYXVzZV9maWx0ZXJfY291bnQgID0gZnJvbS0mZ3Q7cGF1c2VfZmlsdGVyX2NvdW50OwogCXRvLSZndDtwYXVzZV9maWx0ZXJfdGhyZXNoID0gZnJvbS0mZ3Q7cGF1c2VfZmlsdGVyX3RocmVzaDsKIApAQCAtNzM2LDEwICYjNDM7NzQwLDkgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX2xvYWRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpICZhbXA7JmFtcDsKLQkJKHRvX3N2bSh2Y3B1KS0mZ3Q7bmVzdGVkLmN0bC5taXNjX2N0bDIgJmFtcDsgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUik7CiYjNDM7CXJldHVybiB0b19zdm0odmNwdSktJmd0O25lc3RlZC5jdGwubWlzY19jdGwyICZhbXA7IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7CiB9CiAKIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQpAQCAtODA4LDcgJiM0Mzs4MTEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIAogCWlmICh1bmxpa2VseShuZXdfdm1jYjEyIHx8IHZtY2IxMl9pc19kaXJ0eShjb250cm9sLCBWTUNCX0RSKSkpIHsKIAkJdm1jYjAyLSZndDtzYXZlLmRyNyA9IHN2bS0mZ3Q7bmVzdGVkLnNhdmUuZHI3IHwgRFI3X0ZJWEVEXzE7Ci0JCXN2bS0mZ3Q7dmNwdS5hcmNoLmRyNiAgPSBzdm0tJmd0O25lc3RlZC5zYXZlLmRyNiB8IERSNl9BQ1RJVkVfTE9XOwomIzQzOwkJc3ZtLSZndDt2Y3B1LmFyY2guZHI2ICA9IHN2bS0mZ3Q7bmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTsKIAkJdm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9EUik7CiAJfQogCkBAIC04MTgsNyAmIzQzOzgyMSw3IEBAIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCQkgKiBzdm1fc2V0X21zciYjMzk7cyBkZWZpbml0aW9uIG9mIHJlc2VydmVkIGJpdHMuCiAJCSAqLwogCQlzdm1fY29weV9sYnJzKCZhbXA7dm1jYjAyLSZndDtzYXZlLCBzYXZlKTsKLQkJdm1jYjAyLSZndDtzYXZlLmRiZ2N0bCAmYW1wOz0gfkRFQlVHQ1RMX1JFU0VSVkVEX0JJVFM7CiYjNDM7CQl2bWNiMDItJmd0O3NhdmUuZGJnY3RsICZhbXA7PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpOwogCX0gZWxzZSB7CiAJCXN2bV9jb3B5X2xicnMoJmFtcDt2bWNiMDItJmd0O3NhdmUsICZhbXA7dm1jYjAxLSZndDtzYXZlKTsKIAl9CkBAIC0xMjAxLDcgJiM0MzsxMjA0LDcgQEAgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogCiAvKiBDb3B5IHN0YXRlIHNhdmUgYXJlYSBmaWVsZHMgd2hpY2ggYXJlIGhhbmRsZWQgYnkgVk1SVU4gKi8KLXZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLAomIzQzO3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsCiAJCQkgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqZnJvbV9zYXZlKQogewogCXRvX3NhdmUtJmd0O2VzID0gZnJvbV9zYXZlLSZndDtlczsKQEAgLTEyMjgsNyAmIzQzOzEyMzEsNyBAQCB2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSwKIAogCWlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfTEJSVikpIHsKIAkJc3ZtX2NvcHlfbGJycyh0b19zYXZlLCBmcm9tX3NhdmUpOwotCQl0b19zYXZlLSZndDtkYmdjdGwgJmFtcDs9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTOwomIzQzOwkJdG9fc2F2ZS0mZ3Q7ZGJnY3RsICZhbXA7PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpOwogCX0KIH0KIApAQCAtMjA2OSw3ICYjNDM7MjA3Miw3IEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCiAJc3ZtLSZndDtuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS0mZ3Q7aGRyLnN2bS52bWNiX3BhOwogCi0Jc3ZtX2NvcHlfdm1ydW5fc3RhdGUoJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUsIHNhdmUpOwomIzQzOwlzdm1fY29weV92bXJ1bl9zdGF0ZSh2Y3B1LCAmYW1wO3N2bS0mZ3Q7dm1jYjAxLnB0ci0mZ3Q7c2F2ZSwgc2F2ZSk7CiAJbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgY3RsKTsKIAogCXN2bV9zd2l0Y2hfdm1jYihzdm0sICZhbXA7c3ZtLSZndDtuZXN0ZWQudm1jYjAyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IGVmNjlhNTFhYjI3Zjk4Li5iZDIwNGFhMzNlNDdmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC04ODAsOSAmIzQzOzg4MCwxNCBAQCB2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJYm9vbCBjdXJyZW50X2VuYWJsZV9sYnJ2ID0gc3ZtLSZndDt2bWNiLSZndDtjb250cm9sLm1pc2NfY3RsMiAmYW1wOyBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSOwotCWJvb2wgZW5hYmxlX2xicnYgPSAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ2N0bCAmYW1wOyBERUJVR0NUTE1TUl9MQlIpIHx8Ci0JCQkgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSAmYW1wOyZhbXA7Ci0JCQkgICAgKHN2bS0mZ3Q7bmVzdGVkLmN0bC5taXNjX2N0bDIgJmFtcDsgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUikpOwomIzQzOwlib29sIGVuYWJsZV9sYnJ2ID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIEJ1cyBMb2NrIERldGVjdCBpbiBndWVzdCBkZXBlbmRzIG9uIExCUiBWaXJ0dWFsaXphdGlvbiAqLwomIzQzOwlpZiAoc3ZtLSZndDt2bWNiLSZndDtzYXZlLmRiZ2N0bCAmYW1wOyAoREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUKSkKJiM0MzsJCWVuYWJsZV9sYnJ2ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgJmFtcDsmYW1wOyBuZXN0ZWRfdm1jYjEyX2hhc19sYnJ2KHZjcHUpKQomIzQzOwkJZW5hYmxlX2xicnYgPSB0cnVlOwogCiAJaWYgKGVuYWJsZV9sYnJ2ICZhbXA7JmFtcDsgIWN1cnJlbnRfZW5hYmxlX2xicnYpCiAJCV9fc3ZtX2VuYWJsZV9sYnJ2KHZjcHUpOwpAQCAtMzE2MCw3ICYjNDM7MzE2NSw3IEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcikKIAkJCWRhdGEgJmFtcDs9IH5ERUJVR0NUTE1TUl9CVEY7CiAJCX0KIAotCQlpZiAoZGF0YSAmYW1wOyBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKQomIzQzOwkJaWYgKGRhdGEgJmFtcDsgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpKQogCQkJcmV0dXJuIDE7CiAKIAkJaWYgKHN2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZS5kYmdjdGwgPT0gZGF0YSkKQEAgLTUwMzMsNyAmIzQzOzUwMzgsNyBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKQogCiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2bWNiLCBzYXZlKSAhPSAweDQwMCk7CiAKLQlzdm1fY29weV92bXJ1bl9zdGF0ZShtYXBfc2F2ZS5odmEgJiM0MzsgMHg0MDAsCiYjNDM7CXN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCwKIAkJCSAgICAgJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUpOwogCiAJa3ZtX3ZjcHVfdW5tYXAodmNwdSwgJmFtcDttYXBfc2F2ZSk7CkBAIC01MDc3LDcgJiM0Mzs1MDgyLDcgQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSkKIAkgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpCiAJICovCiAKLQlzdm1fY29weV92bXJ1bl9zdGF0ZSgmYW1wO3N2bS0mZ3Q7dm1jYjAxLnB0ci0mZ3Q7c2F2ZSwgbWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwKTsKJiM0MzsJc3ZtX2NvcHlfdm1ydW5fc3RhdGUodmNwdSwgJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7CiAKIAkvKgogCSAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93CkBAIC01NTkxLDkgJiM0Mzs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpCiAJICogQ2xlYXIgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCBieSBjb21tb24gY29kZSwKIAkgKiBidXQgdGhhdCByZXF1aXJlIGV4cGxpY2l0IFNWTSBzdXBwb3J0ICh0aGF0IGlzbiYjMzk7dCB5ZXQgaW1wbGVtZW50ZWQpLgogCSAqLwotCWt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7CiAJa3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfTVNSX0lNTSk7CiAKJiM0MzsJLyoKJiM0MzsJICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGUKJiM0MzsJICogZ3Vlc3QsIHNpbmNlIEJ1c0xvY2tUcmFwIGlzIGVuYWJsZWQgdGhyb3VnaCBNU1JfSUEzMl9ERUJVR0NUTE1TUiBhbmQKJiM0MzsJICogTVNSX0lBMzJfREVCVUdDVExNU1IgaXMgdmlydHVhbGl6ZWQgb25seSBpZiBMQlIgVmlydHVhbGl6YXRpb24gaXMKJiM0MzsJICogZW5hYmxlZC4KJiM0MzsJICovCiYjNDM7CWlmICghbGJydikKJiM0MzsJCWt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7CiYjNDM7CiAJa3ZtX3NldHVwX3hzc19jYXBzKCk7CiAJa3ZtX2ZpbmFsaXplX2NwdV9jYXBzKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCA3MTZiZTIxZmJhMzM1NC4uNDAyYTgyN2Y2MjJkMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtNzgzLDcgJiM0Mzs3ODMsMTUgQEAgQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyhib29sLCB0ZXN0LCB0ZXN0KQogQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBjbGVhciwgX19jbGVhcikKIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgc2V0LCBfX3NldCkKIAotI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+REVCVUdDVExNU1JfTEJSKQomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl1NjQgZGVidWdjdGwgPSBERUJVR0NUTE1TUl9MQlI7CiYjNDM7CiYjNDM7CWlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKQomIzQzOwkJZGVidWdjdGwgfD0gREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUOwomIzQzOwomIzQzOwlyZXR1cm4gfmRlYnVnY3RsOwomIzQzO30KIAogLyogc3ZtLmMgKi8KIGV4dGVybiBib29sIGR1bXBfaW52YWxpZF92bWNiOwpAQCAtODczLDcgJiM0Mzs4ODEsNyBAQCB2b2lkIHN2bV9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgc3ZtX2ZyZWVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTsKIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSwKJiM0Mzt2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLAogCQkJICBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKmZyb21fc2F2ZSk7CiB2b2lkIHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUoc3RydWN0IHZtY2IgKnRvX3ZtY2IsIHN0cnVjdCB2bWNiICpmcm9tX3ZtY2IpOwogdm9pZCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CkBAIC04OTksNiAmIzQzOzkwNyw3IEBAIHZvaWQgbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAogdm9pZCBuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3RydWN0IHZjcHVfc3ZtICpzdm0sCiAJCQkJICAgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSk7CiB2b2lkIG5lc3RlZF9zeW5jX2NvbnRyb2xfZnJvbV92bWNiMDIoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBzdm1fc3dpdGNoX3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fdm1jYl9pbmZvICp0YXJnZXRfdm1jYik7CiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBTVk0gQnVzIExvY2sgRGV0ZWN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBkZXNpZ25lZCB0byBlbmFibGUgQnVzIExvY2sgRGV0ZWN0IHdpdGhpbiBLVk0gZ3Vlc3RzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcnVubmluZyBvbiBBTUQmIzM5O3MgU1ZNIGFyY2hpdGVjdHVyZS4gSSBjYW4gc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgS1ZNIGZpbGVzOiBgcmVncy5jYCwgYHJlZ3MuaGAsIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29tcG9uZW50cyBpbiBgbmVzdGVkLmNgLCBhbmQgdGhlIFNWTS1zcGVjaWZpYyBjb2RlIGluIGBzdm0uY2AgYW5kIGBzdm0uaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYmUuCgpMb29raW5nIGNsb3NlciwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBhIGZldyBrZXkgYXJlYXMuIEZpcnN0LCBpdCYjMzk7cyBleHBvcnRpbmcgYGt2bV9kcjZfZml4ZWRgLCBsaWtlbHkgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIGludGVybmFsbHkgd2l0aGluIEtWTS4gVGhhdCYjMzk7cyBnb29kLCBrZWVwcyB0aGluZ3MgZW5jYXBzdWxhdGVkIHdoZXJlIHRoZXkgc2hvdWxkIGJlLiBUaGVuLCBpbiBgbmVzdGVkLmNgLCBpdOKAmXMgY2FyZWZ1bGx5IGNsZWFyaW5nIGJpdHMgaW4gYG1pc2NfY3RsMmAgdGhhdCB0aGUgZ3Vlc3Qgc2hvdWxkbiYjMzk7dCBiZSBtZXNzaW5nIHdpdGgsIHBhcnRpY3VsYXJseSBgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUmAgaWYgTEJSViAoTGFzdCBCcmFuY2ggUmVjb3JkIFZhbGlkYXRpb24pIGlzbiYjMzk7dCBzdXBwb3J0ZWQuIFNtYXJ0LCBwcmV2ZW50cyBhbnkgZ3Vlc3QtbGV2ZWwgc2hlbmFuaWdhbnMgdGhhdCBjb3VsZCBjYXVzZSBpbnN0YWJpbGl0eS4KCkZ1cnRoZXIgb24sIGl0JiMzOTtzIHVzaW5nIGBrdm1fZHI2X2ZpeGVkKHZjcHUpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYERSNl9BQ1RJVkVfTE9XYCBpbiB0aGUgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBmdW5jdGlvbi4gVGhhdCBzdWdnZXN0cyBhIG1vcmUgcm9idXN0IG9yIGNvcnJlY3Qgd2F5IHRvIGhhbmRsZSBEUjYgYW5kIHBvdGVudGlhbGx5IGFkZHJlc3Mgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBpZGlvc3luY3Jhc2llcy4gIFNpbWlsYXIgbG9naWMgaXMgYmVpbmcgYXBwbGllZCB0byBkZWJ1ZyBjb250cm9sIE1TUnMuCgpUaGUgY29kZSBhbHNvIGFwcGVhcnMgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgTEJSViBhbmQgQnVzIExvY2sgRGV0ZWN0IGludGVyYWN0aW9ucy4gSXQgY29uZGl0aW9uYWxseSBlbmFibGVzIExCUlYgYmFzZWQgb24gdGhlIGBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1RgIGZsYWcgaW4gdGhlIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGNvbmRpdGlvbmFsbHkgY2xlYXJzIHRoZSBgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUYCBDUFUgZmVhdHVyZSBpZiBMQlJWIGlzIHVuYXZhaWxhYmxlLiAgVGhhdCYjMzk7cyBhIHNvdW5kIGFwcHJvYWNoIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBhdm9pZCBleHBvc2luZyBmZWF0dXJlcyB0aGF0IGFyZW4mIzM5O3QgZnVsbHkgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgoKRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHNvbGlkLiBJdCYjMzk7cyBlbmFibGluZyBCdXMgTG9jayBEZXRlY3QgZm9yIFNWTSBndWVzdHMgaW4gS1ZNLCB3aGljaCBpcyBhIHZhbHVhYmxlIGZlYXR1cmUgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgS1ZNIGFuZCBLVk1fQU1EIGFyZSBlbmFibGVkIGFuZCB0aGVuIHNlYXJjaCB0aGUga2VybmVsIGNvbmZpZyBmb3IgaG93IGBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1RgIGFuZCByZWxhdGVkIG9wdGlvbnMgYXJlIGhhbmRsZWQuIFRoaXMgaXMgdGhlIGtpbmQgb2YgcGF0Y2ggdGhhdCBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdG8gaW50ZWdyYXRlLCBhc3N1bWluZyBhbGwgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIG1ldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgxNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKktWTS9BTUQgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyBwcmltYXJpbHkgd2l0aCBhIGBLVk1fQU1EYCBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIHRoZSBiYXNlLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBkcmlsbGluZyBkb3duIHRvIHRoZSBzcGVjaWZpY3MgdGhhdCB3aWxsIHByb3ZpZGUgb3B0aW1pemF0aW9uLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIGtlcm5lbCBoYXMgY29uZmlndXJlZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgQ1BVIGFuZCB0aGUgaHlwZXJ2aXNvciBpbiB0aGlzIHNwZWNpZmljIHVzZS1jYXNlLiBNeSBmaXJzdCB0d28gYXJlYXMgb2YgaW5xdWlyeSB3b3VsZCBiZSBgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUYCBhbmQgYFg4Nl9GRUFUVVJFX0xCUlZgLiBUaGVzZSBmZWF0dXJlcyBjYW4gYmUgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIHR1bmluZywgc28gSSYjMzk7bGwgc2VlIHdoYXQmIzM5O3Mgc2V0IGFuZCB3aGF0IHRoYXQgdGVsbHMgbWUgYWJvdXQgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC00MDYtI2RlZmluZSBYODZfRkVBVFVSRV9SRFBJRFx0XHQoMTYqMzImIzQzOzIyKSAvKiBcJiMzNDtyZHBpZFwmIzM0OyBSRFBJRCBpbnN0cnVjdGlvbiAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaDo0MDc6I2RlZmluZSBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1RcdCgxNiozMiYjNDM7MjQpIC8qIFwmIzM0O2J1c19sb2NrX2RldGVjdFwmIzM0OyBCdXMgTG9jayBkZXRlY3QgKi9cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgtNDA4LSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xERU1PVEVcdFx0KDE2KjMyJiM0MzsyNSkgLyogXCYjMzQ7Y2xkZW1vdGVcJiMzNDsgQ0xERU1PVEUgaW5zdHJ1Y3Rpb24gKi9cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM9MTEyPXN0YXRpYyB2b2lkIF9faW5pdCBzbGRfc3RhdGVfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMTE4LVx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjExOTpcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMTIwLVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTMwMT12b2lkIGJ1c19sb2NrX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMzA0LVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjMwNTpcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtMzA2LVx0XHRyZXR1cm47XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTM5OD1zdGF0aWMgdm9pZCBzbGRfc3RhdGVfc2hvdyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy00MDEtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDAyOlx0aWYgKCghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDAzLVx0ICAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NQTElUX0xPQ0tfREVURUNUKSkgfHxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDA3LVx0aWYgKHNsZF9zdGF0ZSA9PSBzbGRfcmF0ZWxpbWl0KSB7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDA4Olx0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDA5LVx0XHRcdHByX2luZm8oXCYjMzQ7I0RCOiBzZXR0aW5nIHN5c3RlbSB3aWRlIGJ1cyBsb2NrIHJhdGUgbGltaXQgdG8gJXUvc2VjXFxuXCYjMzQ7LCBibGRfcmF0ZWxpbWl0LmJ1cnN0KTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDI2LVxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjQyNzpcdH0gZWxzZSBpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpIHtcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy00MjgtXHRcdHByX2luZm8oXCYjMzQ7I0RCOiAlcyBvbiB1c2VyLXNwYWNlIGJ1c19sb2Nrc1xcblwmIzM0OywgYWN0aW9uKTtcbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTc2Nz11NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzMtXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjc3NDpcdGlmICghZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcbmFyY2gveDg2L2t2bS9yZWdzLmMtNzc1LVx0XHRmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01NTE0PXN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjA3LVx0aWYgKCFsYnJ2KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NjA4Olx0XHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjA5LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9Nzg2PXN0YXRpYyBpbmxpbmUgdTY0IHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03ODktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjc5MDpcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC03OTEtXHRcdGRlYnVnY3RsIHw9IERFQlVHQ1RMTVNSX0JVU19MT0NLX0RFVEVDVDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTIyOTY9dTY0IHZteF9nZXRfc3VwcG9ydGVkX2RlYnVnY3RsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBob3N0X2luaXRpYXRlZClcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTIyOTktXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjIzMDA6XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkgXHUwMDI2XHUwMDI2XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjIzMDE6XHQgICAgKGhvc3RfaW5pdGlhdGVkIHx8IGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkpKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0yMzAyLVx0XHRkZWJ1Z2N0bCB8PSBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbiBUYXJnZXRzIGluIHRoZSBTVk0gSHlwZXJ2aXNvcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBTVk0gaHlwZXJ2aXNvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHdlIGNhbiBwb3RlbnRpYWxseSBzcXVlZXplIG91dCBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLiBUaGUgZnVuY3Rpb25zIEkmIzM5O3ZlIGJlZW4gZXhhbWluaW5nIGFyZTogYGt2bV9kcjZfZml4ZWRgLCBgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGVgLCBgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydmAsIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGBzdm1fY29weV92bXJ1bl9zdGF0ZWAsIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAsIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX3NldF9tc3JgLCBgc3ZtX2VudGVyX3NtbWAsIGBzdm1fbGVhdmVfc21tYCwgYHN2bV9zZXRfY3B1X2NhcHNgLCBhbmQgYHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0c2AuIFRoYXQmIzM5O3MgYSBsb3QgdG8gY29uc2lkZXIhCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmFycm93IHRoZSBzY29wZS4gSSBrbm93IHRoYXQgYG5lc3RlZF9zdm1fdm1ydW5gIGlzIGNyaXRpY2FsIGFuZCBjYWxscyBgc3ZtX2NvcHlfdm1ydW5fc3RhdGVgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OiBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYHN2bV9zZXRfbXNyYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAsIGFuZCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLgoKTGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBhIGNvdXBsZSBvZiB0aGVtLiBJJiMzOTttIHdvbmRlcmluZyBpZiBgc3ZtX3NldF9tc3JgIGlzIGEgaG90c3BvdC4gSXQmIzM5O3MgaW52b2tlZCB3aGVuZXZlciB0aGUgZ3Vlc3Qgd3JpdGVzIHRvIGFuIE1TUiwgc28gaXQmIzM5O3MgcmVsYXRpdmVseSBmcmVxdWVudCwgYnV0IG5vdCBhcyBmcmVxdWVudCBhcyBWTSBleGl0cy4gYHN2bV91cGRhdGVfbGJydmAgaXMgaW52b2tlZCB3aGVuIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBMQlIgdmlydHVhbGl6YXRpb24gc3RhdGUuIEFuZCB0aGVuIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAgaXMgaW52b2tlZCBkdXJpbmcgdGhlIHJlc3RvcmF0aW9uIG9mIG5lc3RlZCBzdGF0ZSwgZm9yIGV4YW1wbGUsIGR1cmluZyBhIG1pZ3JhdGlvbi4gRmluYWxseSwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBpbnZva2VkIHdoZW4gcHJlcGFyaW5nIHRvIHJ1biB0aGUgTDIgZ3Vlc3QuCgpPa2F5LCBsZXQmIzM5O3MgcHJpb3JpdGl6ZS4gSSB0aGluayBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCwgYHN2bV9lbnRlcl9zbW1gLCBhbmQgYHN2bV9sZWF2ZV9zbW1gIGFyZSBwcm9iYWJseSB0aGUgbW9zdCBpbnRlcmVzdGluZy4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc3ZtX3VwZGF0ZV9sYnJ2YCBhbmQgYHN2bV9zZXRfbXNyYC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX3VwZGF0ZV9sYnJ2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDg9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MjgtXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0xCUik7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgyOTpcdHN2bV91cGRhdGVfbGJydihcdTAwMjZzdm0tXHUwMDNldmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgzMC19XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NTY9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05OTAtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjk5MTpcdC8qIFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIgaXMgY29udHJvbGxlZCBieSBzdm1fdXBkYXRlX2xicnYoKSAqL1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy05OTItXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMzI1PXZvaWQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzg5LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMzkwOlx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzkxLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9ODczPXN0YXRpYyB2b2lkIF9fc3ZtX2Rpc2FibGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy04NzgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjg3OTp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTg4MC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yOTgwPXN0YXRpYyBpbnQgc3ZtX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMxNzUtXHRcdHZtY2JfbWFya19kaXJ0eShzdm0tXHUwMDNldm1jYiwgVk1DQl9MQlIpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMTc2Olx0XHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTMxNzctXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9ODE2PXZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjgxNzp2b2lkIHN2bV91cGRhdGVfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC04MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU1ZNIEJ1cyBMb2NrIERldGVjdCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHNvbWUga2V5IGFyZWFzIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEFNRCBTVk0gZ3Vlc3QgZW52aXJvbm1lbnQuIEkgc2VlIGBzdm1fdXBkYXRlX2xicnZgIGJlaW5nIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAsIGFuZCBgc3ZtX3NldF9tc3JgLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gYHN2bV9zZXRfbXNyYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIGd1ZXN0IE1TUiB3cml0ZXMsIHdoaWNoIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgdG8gYnVzIGxvY2sgZGV0ZWN0aW9uIGdpdmVuIGl0cyBkZXBlbmRlbmNlIG9uIHRoZSBgREVCVUdDVExNU1JgIE1TUi4gYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBpbnRlcmVzdGluZyBhcyB3ZWxsOyB0aGF0JiMzOTtzIHRyaWdnZXJlZCBieSBuZXN0ZWQgVk1SVU4sIGltcGx5aW5nIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYXNwZWN0LiBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBiZWluZyB0cmlnZ2VyZWQgYnkgU01JcyBpbiB0aGUgZ3Vlc3QgaXMgYWxzbyBpbXBvcnRhbnQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBoYW5kbGluZyBTTU0gdHJhbnNpdGlvbnMsIHdoaWNoIGlzIGFsc28gYSBzaWduaWZpY2FudCBhcmVhIHRvIGFkZHJlc3MuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBJIGNhbiBsaXN0IGBLVk1gIGFuZCBgS1ZNX0FNRGAuCgpOb3csIHRoZSBmb2N1cyBzeW1ib2xzIGFyZToKYHN2bV91cGRhdGVfbGJydmAKYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYApgc3ZtX3NldF9tc3JgCmBzdm1fZW50ZXJfc21tYApgc3ZtX2xlYXZlX3NtbWAKYHN2bV9zZXRfbmVzdGVkX3N0YXRlYAoKV2FpdC4uLnRoaW5raW5nIHRocm91Z2ggaXQuLi4gYHN2bV9zZXRfbXNyYCBtaWdodCBiZSBhIGhvdCBwYXRoIGZvciBzb21lIE1TUnMsIGJ1dCBpbmNsdWRpbmcgaXQgaXMgZmluZS4gYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBkZWZpbml0ZWx5IHNwZWNpZmljIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gYHN2bV91cGRhdGVfbGJydmAgaXMgdGllZCBkaXJlY3RseSB0byBMQlIgdmlydHVhbGl6YXRpb24uIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gLi4uIFNNTSwgb2J2aW91c2x5LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIGEgYml0IG1vcmUuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgY29uZmlnLXdpc2U/IE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gS1ZNX0FNRCwgb3IgdmlhIGEgbW9kdWxlIHBhcmFtZXRlciwgc28gaXQgc291bmRzIGxpa2UgYEtWTV9BTURgIGlzIHRoZSBrZXkuIElzIHRoZXJlIGFueSBzZXBhcmF0ZSBjb25maWcgZm9yIFNNTT8gTm8sIFNNTSBpcyBwYXJ0IG9mIEtWTS4KCkxldCYjMzk7cyBhbHNvIGNoZWNrIGlmIGBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1RgIGhhcyBjb25maWcgZGVwZW5kZW5jeS4gSXQgaXMgYSBDUFUgZmVhdHVyZSwgc28gaXQgZG9lcyBub3QuIEFsc28sIHRoZSBpbmxpbmUgZnVuY3Rpb24gYHN2bV9nZXRfZGVidWdjdGxfcmVzZXJ2ZWRfYml0c2AgZG9lc24mIzM5O3QgbmVlZCB0byBiZSB0cmFja2VkLgoKT2theSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGtleSBjb25maWd1cmF0aW9ucywgYEtWTWAgYW5kIGBLVk1fQU1EYC4KCkFuZCB0aGUgZm9jdXMgc3ltYm9sczoKYHN2bV91cGRhdGVfbGJydmAKYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYApgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgCmBzdm1fZW50ZXJfc21tYApgc3ZtX2xlYXZlX3NtbWAKCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byBpbXBsZW1lbnQgQnVzIExvY2sgRGV0ZWN0IGZvciBBTUQgU1ZNIGd1ZXN0cy4gVGhpcyBpbmV2aXRhYmx5IG1lYW5zIG1vZGlmeWluZyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgdGhlIGBERUJVR0NUTE1TUmAgTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBtYW5hZ2VtZW50IChzYXZpbmcvcmVzdG9yaW5nKSwgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBjb3JyZWN0bHkgdmlydHVhbGl6ZSB0aGUgQnVzIExvY2sgRGV0ZWN0IGZlYXR1cmUuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBwYXRjaCBhZmZlY3RpbmcgZ3Vlc3QgZXhlY3V0aW9uIGFuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24g4oCTIGxpa2VseSBpbnRlcmFjdGluZyB3aXRoIExCUiB2aXJ0dWFsaXphdGlvbi4gV2UgbmVlZCB0byBoYW5kbGUgdGhlIGRlcGVuZGVuY2llcy4gTm93IGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYEtWTV9BTURgIGlzIHRoZSBvbmx5IGNvbmZpZyBpbnZvbHZlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mjpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTY6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMy1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk1fU01NIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBLVk1fU01NYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBrZXkgdGFrZWF3YXkgaGVyZS4gVGhlIGZhY3QgdGhhdCB0aGUgZnVuY3Rpb25zIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gIGhhdmUgYmVlbiBtb2RpZmllZCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBLVk1fU01NYCBpcyBkaXJlY3RseSByZWxldmFudC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIG1ha2Ugc3VyZSBpcyBpbmNsdWRlZCwgYWxvbmcgd2l0aCB0aGUgYmFzZSBgS1ZNYCBhbmQgYEtWTV9BTURgIGNvbmZpZ3VyYXRpb25zLCBnaXZlbiB0aGUgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBsaW5rZWQgdG8gYEtWTV9TTU1gLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHN2bV91cGRhdGVfbGJydmAsIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGFuZCBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgLiBJIGFsc28gbmVlZCB0byBrZWVwIGluIG1pbmQgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYXMgdGhleSBhcmUgYXQgdGhlIGNlbnRlciBvZiB0aGlzLgoKU2luY2UgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBrdm1fZHI2X2ZpeGVkYC4gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS9yZWdzLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGVyZSBtaWdodCBiZSBvdGhlciBjYWxsIHNpdGVzIEkgbmVlZCB0byBjaGVjay4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZHI2X2ZpeGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vcmVncy5jPTc2NT1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpO1xuYXJjaC94ODYva3ZtL3JlZ3MuYy03NjYtXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjc2Nzp1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc2OC17XG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzctfVxuYXJjaC94ODYva3ZtL3JlZ3MuYzo3Nzg6RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV9kcjZfZml4ZWQpO1xuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzktXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTc4MD1pbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpXG4tLVxuYXJjaC94ODYva3ZtL3JlZ3MuYy03OTMtXHRcdFx0cmV0dXJuIDE7IC8qICNHUCAqL1xuYXJjaC94ODYva3ZtL3JlZ3MuYzo3OTQ6XHRcdHZjcHUtXHUwMDNlYXJjaC5kcjYgPSAodmFsIFx1MDAyNiBEUjZfVk9MQVRJTEUpIHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9yZWdzLmMtNzk1LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTI1PWludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XG5hcmNoL3g4Ni9rdm0vcmVncy5oOjI2OnU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vcmVncy5oLTI3LXVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz03NDg9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MTMtXHRcdHZtY2IwMi1cdTAwM2VzYXZlLmRyNyA9IHN2bS1cdTAwM2VuZXN0ZWQuc2F2ZS5kcjcgfCBEUjdfRklYRURfMTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6ODE0Olx0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODE1LVx0XHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0RSKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjMKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgcGF0Y2gsIGFzIEkgdW5kZXJzdGFuZCBpdDoKCioqUGF0Y2ggRGVlcCBEaXZlOiBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gR3Vlc3RzKioKCk9rYXksIHNvIGBrdm1fZHI2X2ZpeGVkYCBpcyBhIGZ1bmN0aW9uIGNhbGxlZCB3aXRoaW4gYGt2bV9zZXRfZHJgLCB3aGljaCBtYWtlcyBpdCBhIHNvbGlkIHRhcmdldCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBXZSBuZWVkIHRvIGZpbmFsaXplIHRoZSBhc3Nlc3NtZW50LiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIEJ1cyBMb2NrIERldGVjdCBzcGVjaWZpY2FsbHkgZm9yIEFNRCBTVk0gZ3Vlc3RzLiBUaGUgbWFpbiBjaGFuZ2VzIGFyZSBpbiBob3cgS1ZNIGhhbmRsZXMgREVCVUdDVExNU1IsIHdoaWNoIGlzIGltcG9ydGFudCwgYW5kIGhvdyBpdCBtYW5hZ2VzIG5lc3RlZCBWTUNCIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IHZpcnR1YWxpemluZyB0aGUgQnVzIExvY2sgRGV0ZWN0IGZlYXR1cmUuIEl0IGFsc28gaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBTTU0gc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSBjcml0aWNhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4KClRoZSBvdmVyYWxsIGBXb3J0aEZ1enppbmdgIGFzc2Vzc21lbnQgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgc291bmQ7IHRoaXMgZmVhdHVyZSB2aXJ0dWFsaXphdGlvbiBpcyBjb21wbGV4LgoKV2UmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyB0ZXN0aW5nOiBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCwgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1pbXBvcnRhbnQgYGt2bV9kcjZfZml4ZWRgLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byB3b3JrIGFyZSBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9TTU1gLiBNYWtlcyBzZW5zZSBnaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIG91ciBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2bV91cGRhdGVfbGJydiYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZSYjMzQ7LAogICAgJiMzNDtzdm1fc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtzdm1fZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O3N2bV9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7a3ZtX2RyNl9maXhlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMsIG1vZGlmeWluZyBLVk0mIzM5O3MgaGFuZGxpbmcgb2YgREVCVUdDVExNU1IsIG5lc3RlZCBWTUNCIHN0YXRlIHNhdmluZy9yZXN0b3JpbmcsIGFuZCBTTU0gc3RhdGUgdHJhbnNpdGlvbnMgdG8gcHJvcGVybHkgdmlydHVhbGl6ZSB0aGUgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY3kgb24gTEJSIFZpcnR1YWxpemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZtX3VwZGF0ZV9sYnJ2JiMzNDssCiAgICAmIzM0O25lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlJiMzNDssCiAgICAmIzM0O3N2bV9zZXRfbmVzdGVkX3N0YXRlJiMzNDssCiAgICAmIzM0O3N2bV9lbnRlcl9zbW0mIzM0OywKICAgICYjMzQ7c3ZtX2xlYXZlX3NtbSYjMzQ7LAogICAgJiMzNDtrdm1fZHI2X2ZpeGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgQnVzIExvY2sgRGV0ZWN0IGZvciBBTUQgU1ZNIGd1ZXN0cywgbW9kaWZ5aW5nIEtWTSYjMzk7cyBoYW5kbGluZyBvZiBERUJVR0NUTE1TUiwgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nL3Jlc3RvcmluZywgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBwcm9wZXJseSB2aXJ0dWFsaXplIHRoZSBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBMQlIgVmlydHVhbGl6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMDo1MC44MDg5MDUxMDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTMxMjkxNDA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9TTU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdm1fdXBkYXRlX2xicnZcIixcbiAgICBcIm5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlXCIsXG4gICAgXCJzdm1fc2V0X25lc3RlZF9zdGF0ZVwiLFxuICAgIFwic3ZtX2VudGVyX3NtbVwiLFxuICAgIFwic3ZtX2xlYXZlX3NtbVwiLFxuICAgIFwia3ZtX2RyNl9maXhlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgQnVzIExvY2sgRGV0ZWN0IGZvciBBTUQgU1ZNIGd1ZXN0cywgbW9kaWZ5aW5nIEtWTSdzIGhhbmRsaW5nIG9mIERFQlVHQ1RMTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBzYXZpbmcvcmVzdG9yaW5nLCBhbmQgU01NIHN0YXRlIHRyYW5zaXRpb25zIHRvIHByb3Blcmx5IHZpcnR1YWxpemUgdGhlIGZlYXR1cmUgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIExCUiBWaXJ0dWFsaXphdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTA6NTAuODA4OTM1NTg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc1NzA1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NjIwNDQwOGNkMjBlODI2NWVkOGRiNGJmYTZjMmFiMTU1MDhiNjQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDAxOjEwOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXFxuaW5kZXggZDJjYWY1YTY3ZGJhNDAuLjFiNWRmYTc2NTE0MDdiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9yZWdzLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXFxuQEAgLTc2NCw3ICs3NjQsNyBAQCB2b2lkIGt2bV91cGRhdGVfZHI3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpO1xcbiBcXG4tc3RhdGljIHU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHU2NCBmaXhlZCA9IERSNl9GSVhFRF8xO1xcbiBcXG5AQCAtNzc1LDYgKzc3NSw3IEBAIHN0YXRpYyB1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdGZpeGVkIHw9IERSNl9CVVNfTE9DSztcXG4gXFx0cmV0dXJuIGZpeGVkO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTtcXG4gXFxuIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbClcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcmVncy5oIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbmluZGV4IDk0ZmQ4NjcyOGZlZDI5Li5lODVjM2ZmM2UxMjAxYiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3JlZ3MuaFxcbkBAIC0yMyw2ICsyMyw3IEBAIGludCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTtcXG4gaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpO1xcbiBpbnQga3ZtX3NldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyOCk7XFxuIGludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XFxuK3U2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcik7XFxuIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gdm9pZCBrdm1fbG1zdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbXN3KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG5pbmRleCBjMTQ4NWMzZTY5MWM0My4uNGRmY2NjMmRlZGE4N2UgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG5AQCAtNTM0LDYgKzUzNCwxMSBAQCB2b2lkIF9fbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0aWYgKCFnbWV0X2VuYWJsZWQgfHwgIWd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0dNRVQpKVxcbiBcXHRcXHR0by1cXHUwMDNlbWlzY19jdGwgXFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9HTUVUO1xcbiBcXG4rXFx0LyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi9cXG4rXFx0dG8tXFx1MDAzZW1pc2NfY3RsMiA9IGZyb20tXFx1MDAzZW1pc2NfY3RsMjtcXG4rXFx0aWYgKCFsYnJ2IHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSlcXG4rXFx0XFx0dG8tXFx1MDAzZW1pc2NfY3RsMiBcXHUwMDI2PSB+U1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcXG4rXFxuIFxcdHRvLVxcdTAwM2Vpb3BtX2Jhc2VfcGEgICAgICAgID0gZnJvbS1cXHUwMDNlaW9wbV9iYXNlX3BhIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiBcXHR0by1cXHUwMDNlbXNycG1fYmFzZV9wYSAgICAgICA9IGZyb20tXFx1MDAzZW1zcnBtX2Jhc2VfcGEgXFx1MDAyNiBQQUdFX01BU0s7XFxuIFxcdHRvLVxcdTAwM2V0c2Nfb2Zmc2V0ICAgICAgICAgID0gZnJvbS1cXHUwMDNldHNjX29mZnNldDtcXG5AQCAtNTUxLDcgKzU1Niw2IEBAIHZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR0by1cXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXFx1MDAzZWV2ZW50X2lual9lcnI7XFxuIFxcdHRvLVxcdTAwM2VuZXh0X3JpcCAgICAgICAgICAgID0gZnJvbS1cXHUwMDNlbmV4dF9yaXA7XFxuIFxcdHRvLVxcdTAwM2VuZXN0ZWRfY3IzICAgICAgICAgID0gZnJvbS1cXHUwMDNlbmVzdGVkX2NyMztcXG4tXFx0dG8tXFx1MDAzZW1pc2NfY3RsMlxcdFxcdD0gZnJvbS1cXHUwMDNlbWlzY19jdGwyO1xcbiBcXHR0by1cXHUwMDNlcGF1c2VfZmlsdGVyX2NvdW50ICA9IGZyb20tXFx1MDAzZXBhdXNlX2ZpbHRlcl9jb3VudDtcXG4gXFx0dG8tXFx1MDAzZXBhdXNlX2ZpbHRlcl90aHJlc2ggPSBmcm9tLVxcdTAwM2VwYXVzZV9maWx0ZXJfdGhyZXNoO1xcbiBcXG5AQCAtNzM2LDEwICs3NDAsOSBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fbG9hZF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdHJldHVybiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQodG9fc3ZtKHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlIpO1xcbitcXHRyZXR1cm4gdG9fc3ZtKHZjcHUpLVxcdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbkBAIC04MDgsNyArODExLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcbiBcXHRpZiAodW5saWtlbHkobmV3X3ZtY2IxMiB8fCB2bWNiMTJfaXNfZGlydHkoY29udHJvbCwgVk1DQl9EUikpKSB7XFxuIFxcdFxcdHZtY2IwMi1cXHUwMDNlc2F2ZS5kcjcgPSBzdm0tXFx1MDAzZW5lc3RlZC5zYXZlLmRyNyB8IERSN19GSVhFRF8xO1xcbi1cXHRcXHRzdm0tXFx1MDAzZXZjcHUuYXJjaC5kcjYgID0gc3ZtLVxcdTAwM2VuZXN0ZWQuc2F2ZS5kcjYgfCBEUjZfQUNUSVZFX0xPVztcXG4rXFx0XFx0c3ZtLVxcdTAwM2V2Y3B1LmFyY2guZHI2ICA9IHN2bS1cXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcXG4gXFx0XFx0dm1jYl9tYXJrX2RpcnR5KHZtY2IwMiwgVk1DQl9EUik7XFxuIFxcdH1cXG4gXFxuQEAgLTgxOCw3ICs4MjEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4gXFx0XFx0ICogc3ZtX3NldF9tc3IncyBkZWZpbml0aW9uIG9mIHJlc2VydmVkIGJpdHMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzdm1fY29weV9sYnJzKFxcdTAwMjZ2bWNiMDItXFx1MDAzZXNhdmUsIHNhdmUpO1xcbi1cXHRcXHR2bWNiMDItXFx1MDAzZXNhdmUuZGJnY3RsIFxcdTAwMjY9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTO1xcbitcXHRcXHR2bWNiMDItXFx1MDAzZXNhdmUuZGJnY3RsIFxcdTAwMjY9IH5zdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHModmNwdSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN2bV9jb3B5X2xicnMoXFx1MDAyNnZtY2IwMi1cXHUwMDNlc2F2ZSwgXFx1MDAyNnZtY2IwMS1cXHUwMDNlc2F2ZSk7XFxuIFxcdH1cXG5AQCAtMTIwMSw3ICsxMjA0LDcgQEAgaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuIFxcbiAvKiBDb3B5IHN0YXRlIHNhdmUgYXJlYSBmaWVsZHMgd2hpY2ggYXJlIGhhbmRsZWQgYnkgVk1SVU4gKi9cXG4tdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuK3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpmcm9tX3NhdmUpXFxuIHtcXG4gXFx0dG9fc2F2ZS1cXHUwMDNlZXMgPSBmcm9tX3NhdmUtXFx1MDAzZWVzO1xcbkBAIC0xMjI4LDcgKzEyMzEsNyBAQCB2b2lkIHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcXG4gXFxuIFxcdGlmIChrdm1fY3B1X2NhcF9oYXMoWDg2X0ZFQVRVUkVfTEJSVikpIHtcXG4gXFx0XFx0c3ZtX2NvcHlfbGJycyh0b19zYXZlLCBmcm9tX3NhdmUpO1xcbi1cXHRcXHR0b19zYXZlLVxcdTAwM2VkYmdjdGwgXFx1MDAyNj0gfkRFQlVHQ1RMX1JFU0VSVkVEX0JJVFM7XFxuK1xcdFxcdHRvX3NhdmUtXFx1MDAzZWRiZ2N0bCBcXHUwMDI2PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTIwNjksNyArMjA3Miw3IEBAIHN0YXRpYyBpbnQgc3ZtX3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXG4gXFx0c3ZtLVxcdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS1cXHUwMDNlaGRyLnN2bS52bWNiX3BhO1xcbiBcXG4tXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSwgc2F2ZSk7XFxuK1xcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUsIHNhdmUpO1xcbiBcXHRuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCBjdGwpO1xcbiBcXG4gXFx0c3ZtX3N3aXRjaF92bWNiKHN2bSwgXFx1MDAyNnN2bS1cXHUwMDNlbmVzdGVkLnZtY2IwMik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZWY2OWE1MWFiMjdmOTguLmJkMjA0YWEzM2U0N2ZlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTg4MCw5ICs4ODAsMTQgQEAgdm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbiBcXHRib29sIGN1cnJlbnRfZW5hYmxlX2xicnYgPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wubWlzY19jdGwyIFxcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUjtcXG4tXFx0Ym9vbCBlbmFibGVfbGJydiA9IChzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUuZGJnY3RsIFxcdTAwMjYgREVCVUdDVExNU1JfTEJSKSB8fFxcbi1cXHRcXHRcXHQgICAgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjYgZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfTEJSVikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIChzdm0tXFx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFxcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUikpO1xcbitcXHRib29sIGVuYWJsZV9sYnJ2ID0gZmFsc2U7XFxuK1xcbitcXHQvKiBCdXMgTG9jayBEZXRlY3QgaW4gZ3Vlc3QgZGVwZW5kcyBvbiBMQlIgVmlydHVhbGl6YXRpb24gKi9cXG4rXFx0aWYgKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5kYmdjdGwgXFx1MDAyNiAoREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUKSlcXG4rXFx0XFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xcbitcXG4rXFx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjYgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydih2Y3B1KSlcXG4rXFx0XFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xcbiBcXG4gXFx0aWYgKGVuYWJsZV9sYnJ2IFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50X2VuYWJsZV9sYnJ2KVxcbiBcXHRcXHRfX3N2bV9lbmFibGVfbGJydih2Y3B1KTtcXG5AQCAtMzE2MCw3ICszMTY1LDcgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxcbiBcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5ERUJVR0NUTE1TUl9CVEY7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChkYXRhIFxcdTAwMjYgREVCVUdDVExfUkVTRVJWRURfQklUUylcXG4rXFx0XFx0aWYgKGRhdGEgXFx1MDAyNiBzdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHModmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0XFx0aWYgKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZS5kYmdjdGwgPT0gZGF0YSlcXG5AQCAtNTAzMyw3ICs1MDM4LDcgQEAgc3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApO1xcbiBcXG4tXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICsgMHg0MDAsXFxuK1xcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSArIDB4NDAwLFxcbiBcXHRcXHRcXHQgICAgIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUpO1xcbiBcXG4gXFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXFx1MDAyNm1hcF9zYXZlKTtcXG5AQCAtNTA3Nyw3ICs1MDgyLDcgQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG4gXFx0ICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKVxcbiBcXHQgKi9cXG4gXFxuLVxcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSArIDB4NDAwKTtcXG4rXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUodmNwdSwgXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSwgbWFwX3NhdmUuaHZhICsgMHg0MDApO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRW50ZXIgdGhlIG5lc3RlZCBndWVzdCBub3dcXG5AQCAtNTU5MSw5ICs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXFxuIFxcdCAqIENsZWFyIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgYnkgY29tbW9uIGNvZGUsXFxuIFxcdCAqIGJ1dCB0aGF0IHJlcXVpcmUgZXhwbGljaXQgU1ZNIHN1cHBvcnQgKHRoYXQgaXNuJ3QgeWV0IGltcGxlbWVudGVkKS5cXG4gXFx0ICovXFxuLVxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7XFxuIFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX01TUl9JTU0pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGVcXG4rXFx0ICogZ3Vlc3QsIHNpbmNlIEJ1c0xvY2tUcmFwIGlzIGVuYWJsZWQgdGhyb3VnaCBNU1JfSUEzMl9ERUJVR0NUTE1TUiBhbmRcXG4rXFx0ICogTVNSX0lBMzJfREVCVUdDVExNU1IgaXMgdmlydHVhbGl6ZWQgb25seSBpZiBMQlIgVmlydHVhbGl6YXRpb24gaXNcXG4rXFx0ICogZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghbGJydilcXG4rXFx0XFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKTtcXG4rXFxuIFxcdGt2bV9zZXR1cF94c3NfY2FwcygpO1xcbiBcXHRrdm1fZmluYWxpemVfY3B1X2NhcHMoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li40MDJhODI3ZjYyMmQyZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC03ODMsNyArNzgzLDE1IEBAIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlMoYm9vbCwgdGVzdCwgdGVzdClcXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBjbGVhciwgX19jbGVhcilcXG4gQlVJTERfU1ZNX01TUl9CSVRNQVBfSEVMUEVSUyh2b2lkLCBzZXQsIF9fc2V0KVxcbiBcXG4tI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+REVCVUdDVExNU1JfTEJSKVxcbitzdGF0aWMgaW5saW5lIHU2NCBzdm1fZ2V0X2RlYnVnY3RsX3Jlc2VydmVkX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHU2NCBkZWJ1Z2N0bCA9IERFQlVHQ1RMTVNSX0xCUjtcXG4rXFxuK1xcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbitcXHRcXHRkZWJ1Z2N0bCB8PSBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1Q7XFxuK1xcbitcXHRyZXR1cm4gfmRlYnVnY3RsO1xcbit9XFxuIFxcbiAvKiBzdm0uYyAqL1xcbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcXG5AQCAtODczLDcgKzg4MSw3IEBAIHZvaWQgc3ZtX2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHN2bV9mcmVlX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4gaW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4tdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuK3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpmcm9tX3NhdmUpO1xcbiB2b2lkIHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUoc3RydWN0IHZtY2IgKnRvX3ZtY2IsIHN0cnVjdCB2bWNiICpmcm9tX3ZtY2IpO1xcbiB2b2lkIG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG5AQCAtODk5LDYgKzkwNyw3IEBAIHZvaWQgbmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLFxcbiB2b2lkIG5lc3RlZF9jb3B5X3ZtY2Jfc2F2ZV90b19jYWNoZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSk7XFxuIHZvaWQgbmVzdGVkX3N5bmNfY29udHJvbF9mcm9tX3ZtY2IwMihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuK2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHN2bV9zd2l0Y2hfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV92bWNiX2luZm8gKnRhcmdldF92bWNiKTtcXG4gXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMDo1MS43NTc1Nzk3OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzY0MjI1MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2bV91cGRhdGVfbGJydlwiLFxuICAgIFwibmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVcIixcbiAgICBcInN2bV9zZXRfbmVzdGVkX3N0YXRlXCIsXG4gICAgXCJzdm1fZW50ZXJfc21tXCIsXG4gICAgXCJzdm1fbGVhdmVfc21tXCIsXG4gICAgXCJrdm1fZHI2X2ZpeGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gZ3Vlc3RzLCBtb2RpZnlpbmcgS1ZNJ3MgaGFuZGxpbmcgb2YgREVCVUdDVExNU1IsIG5lc3RlZCBWTUNCIHN0YXRlIHNhdmluZy9yZXN0b3JpbmcsIGFuZCBTTU0gc3RhdGUgdHJhbnNpdGlvbnMgdG8gcHJvcGVybHkgdmlydHVhbGl6ZSB0aGUgZmVhdHVyZSBhbmQgaXRzIGRlcGVuZGVuY3kgb24gTEJSIFZpcnR1YWxpemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2MjA0NDA4Y2QyMGU4MjY1ZWQ4ZGI0YmZhNmMyYWIxNTUwOGI2NDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMToxMDo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmMgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5pbmRleCBkMmNhZjVhNjdkYmE0MC4uMWI1ZGZhNzY1MTQwN2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmVncy5jXG5AQCAtNzY0LDcgKzc2NCw3IEBAIHZvaWQga3ZtX3VwZGF0ZV9kcjcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3VwZGF0ZV9kcjcpO1xuIFxuLXN0YXRpYyB1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHU2NCBmaXhlZCA9IERSNl9GSVhFRF8xO1xuIFxuQEAgLTc3NSw2ICs3NzUsNyBAQCBzdGF0aWMgdTY0IGt2bV9kcjZfZml4ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7XG4gXHRyZXR1cm4gZml4ZWQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTtcbiBcbiBpbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9yZWdzLmggYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5pbmRleCA5NGZkODY3MjhmZWQyOS4uZTg1YzNmZjNlMTIwMWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vcmVncy5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vcmVncy5oXG5AQCAtMjMsNiArMjMsNyBAQCBpbnQga3ZtX3NldF9jcjMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7XG4gaW50IGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpO1xuIGludCBrdm1fc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KTtcbiBpbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpO1xuK3U2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdW5zaWduZWQgbG9uZyBrdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKTtcbiB1bnNpZ25lZCBsb25nIGt2bV9nZXRfY3I4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fbG1zdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbXN3KTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuaW5kZXggYzE0ODVjM2U2OTFjNDMuLjRkZmNjYzJkZWRhODdlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuY1xuQEAgLTUzNCw2ICs1MzQsMTEgQEAgdm9pZCBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAoIWdtZXRfZW5hYmxlZCB8fCAhZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfR01FVCkpXG4gXHRcdHRvLVx1MDAzZW1pc2NfY3RsIFx1MDAyNj0gflNWTV9NSVNDX0VOQUJMRV9HTUVUO1xuIFxuK1x0LyogQWx3YXlzIGNsZWFyIG1pc2NfY3RsMiBiaXRzIHRoYXQgdGhlIGd1ZXN0IGNhbm5vdCB1c2UgKi9cbitcdHRvLVx1MDAzZW1pc2NfY3RsMiA9IGZyb20tXHUwMDNlbWlzY19jdGwyO1xuK1x0aWYgKCFsYnJ2IHx8ICFndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSlcbitcdFx0dG8tXHUwMDNlbWlzY19jdGwyIFx1MDAyNj0gflNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4rXG4gXHR0by1cdTAwM2Vpb3BtX2Jhc2VfcGEgICAgICAgID0gZnJvbS1cdTAwM2Vpb3BtX2Jhc2VfcGEgXHUwMDI2IFBBR0VfTUFTSztcbiBcdHRvLVx1MDAzZW1zcnBtX2Jhc2VfcGEgICAgICAgPSBmcm9tLVx1MDAzZW1zcnBtX2Jhc2VfcGEgXHUwMDI2IFBBR0VfTUFTSztcbiBcdHRvLVx1MDAzZXRzY19vZmZzZXQgICAgICAgICAgPSBmcm9tLVx1MDAzZXRzY19vZmZzZXQ7XG5AQCAtNTUxLDcgKzU1Niw2IEBAIHZvaWQgX19uZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0dG8tXHUwMDNlZXZlbnRfaW5qX2VyciAgICAgICA9IGZyb20tXHUwMDNlZXZlbnRfaW5qX2VycjtcbiBcdHRvLVx1MDAzZW5leHRfcmlwICAgICAgICAgICAgPSBmcm9tLVx1MDAzZW5leHRfcmlwO1xuIFx0dG8tXHUwMDNlbmVzdGVkX2NyMyAgICAgICAgICA9IGZyb20tXHUwMDNlbmVzdGVkX2NyMztcbi1cdHRvLVx1MDAzZW1pc2NfY3RsMlx0XHQ9IGZyb20tXHUwMDNlbWlzY19jdGwyO1xuIFx0dG8tXHUwMDNlcGF1c2VfZmlsdGVyX2NvdW50ICA9IGZyb20tXHUwMDNlcGF1c2VfZmlsdGVyX2NvdW50O1xuIFx0dG8tXHUwMDNlcGF1c2VfZmlsdGVyX3RocmVzaCA9IGZyb20tXHUwMDNlcGF1c2VfZmlsdGVyX3RocmVzaDtcbiBcbkBAIC03MzYsMTAgKzc0MCw5IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9sb2FkX2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBib29sIG5lc3RlZF92bWNiMTJfaGFzX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xCUlYpIFx1MDAyNlx1MDAyNlxuLVx0XHQodG9fc3ZtKHZjcHUpLVx1MDAzZW5lc3RlZC5jdGwubWlzY19jdGwyIFx1MDAyNiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSKTtcbitcdHJldHVybiB0b19zdm0odmNwdSktXHUwMDNlbmVzdGVkLmN0bC5taXNjX2N0bDIgXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuQEAgLTgwOCw3ICs4MTEsNyBAQCBzdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcbiBcdGlmICh1bmxpa2VseShuZXdfdm1jYjEyIHx8IHZtY2IxMl9pc19kaXJ0eShjb250cm9sLCBWTUNCX0RSKSkpIHtcbiBcdFx0dm1jYjAyLVx1MDAzZXNhdmUuZHI3ID0gc3ZtLVx1MDAzZW5lc3RlZC5zYXZlLmRyNyB8IERSN19GSVhFRF8xO1xuLVx0XHRzdm0tXHUwMDNldmNwdS5hcmNoLmRyNiAgPSBzdm0tXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwgRFI2X0FDVElWRV9MT1c7XG4rXHRcdHN2bS1cdTAwM2V2Y3B1LmFyY2guZHI2ICA9IHN2bS1cdTAwM2VuZXN0ZWQuc2F2ZS5kcjYgfCBrdm1fZHI2X2ZpeGVkKHZjcHUpO1xuIFx0XHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0RSKTtcbiBcdH1cbiBcbkBAIC04MTgsNyArODIxLDcgQEAgc3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRcdCAqIHN2bV9zZXRfbXNyJ3MgZGVmaW5pdGlvbiBvZiByZXNlcnZlZCBiaXRzLlxuIFx0XHQgKi9cbiBcdFx0c3ZtX2NvcHlfbGJycyhcdTAwMjZ2bWNiMDItXHUwMDNlc2F2ZSwgc2F2ZSk7XG4tXHRcdHZtY2IwMi1cdTAwM2VzYXZlLmRiZ2N0bCBcdTAwMjY9IH5ERUJVR0NUTF9SRVNFUlZFRF9CSVRTO1xuK1x0XHR2bWNiMDItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0c3ZtX2NvcHlfbGJycyhcdTAwMjZ2bWNiMDItXHUwMDNlc2F2ZSwgXHUwMDI2dm1jYjAxLVx1MDAzZXNhdmUpO1xuIFx0fVxuQEAgLTEyMDEsNyArMTIwNCw3IEBAIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB9XG4gXG4gLyogQ29weSBzdGF0ZSBzYXZlIGFyZWEgZmllbGRzIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IFZNUlVOICovXG4tdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXG4rdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqdG9fc2F2ZSxcbiBcdFx0XHQgIHN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqZnJvbV9zYXZlKVxuIHtcbiBcdHRvX3NhdmUtXHUwMDNlZXMgPSBmcm9tX3NhdmUtXHUwMDNlZXM7XG5AQCAtMTIyOCw3ICsxMjMxLDcgQEAgdm9pZCBzdm1fY29weV92bXJ1bl9zdGF0ZShzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXG4gXG4gXHRpZiAoa3ZtX2NwdV9jYXBfaGFzKFg4Nl9GRUFUVVJFX0xCUlYpKSB7XG4gXHRcdHN2bV9jb3B5X2xicnModG9fc2F2ZSwgZnJvbV9zYXZlKTtcbi1cdFx0dG9fc2F2ZS1cdTAwM2VkYmdjdGwgXHUwMDI2PSB+REVCVUdDVExfUkVTRVJWRURfQklUUztcbitcdFx0dG9fc2F2ZS1cdTAwM2VkYmdjdGwgXHUwMDI2PSB+c3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDY5LDcgKzIwNzIsNyBAQCBzdGF0aWMgaW50IHN2bV9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdHN2bS1cdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSA9IGt2bV9zdGF0ZS1cdTAwM2VoZHIuc3ZtLnZtY2JfcGE7XG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlLCBzYXZlKTtcbitcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIHNhdmUpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgY3RsKTtcbiBcbiBcdHN2bV9zd2l0Y2hfdm1jYihzdm0sIFx1MDAyNnN2bS1cdTAwM2VuZXN0ZWQudm1jYjAyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZWY2OWE1MWFiMjdmOTguLmJkMjA0YWEzM2U0N2ZlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTg4MCw5ICs4ODAsMTQgQEAgdm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0Ym9vbCBjdXJyZW50X2VuYWJsZV9sYnJ2ID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5taXNjX2N0bDIgXHUwMDI2IFNWTV9NSVNDMl9FTkFCTEVfVl9MQlI7XG4tXHRib29sIGVuYWJsZV9sYnJ2ID0gKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUuZGJnY3RsIFx1MDAyNiBERUJVR0NUTE1TUl9MQlIpIHx8XG4tXHRcdFx0ICAgIChpc19ndWVzdF9tb2RlKHZjcHUpIFx1MDAyNlx1MDAyNiBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9MQlJWKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKHN2bS1cdTAwM2VuZXN0ZWQuY3RsLm1pc2NfY3RsMiBcdTAwMjYgU1ZNX01JU0MyX0VOQUJMRV9WX0xCUikpO1xuK1x0Ym9vbCBlbmFibGVfbGJydiA9IGZhbHNlO1xuK1xuK1x0LyogQnVzIExvY2sgRGV0ZWN0IGluIGd1ZXN0IGRlcGVuZHMgb24gTEJSIFZpcnR1YWxpemF0aW9uICovXG4rXHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgXHUwMDI2IChERUJVR0NUTE1TUl9MQlIgfCBERUJVR0NUTE1TUl9CVVNfTE9DS19ERVRFQ1QpKVxuK1x0XHRlbmFibGVfbGJydiA9IHRydWU7XG4rXG4rXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjYgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydih2Y3B1KSlcbitcdFx0ZW5hYmxlX2xicnYgPSB0cnVlO1xuIFxuIFx0aWYgKGVuYWJsZV9sYnJ2IFx1MDAyNlx1MDAyNiAhY3VycmVudF9lbmFibGVfbGJydilcbiBcdFx0X19zdm1fZW5hYmxlX2xicnYodmNwdSk7XG5AQCAtMzE2MCw3ICszMTY1LDcgQEAgc3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxuIFx0XHRcdGRhdGEgXHUwMDI2PSB+REVCVUdDVExNU1JfQlRGO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChkYXRhIFx1MDAyNiBERUJVR0NUTF9SRVNFUlZFRF9CSVRTKVxuK1x0XHRpZiAoZGF0YSBcdTAwMjYgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHZjcHUpKVxuIFx0XHRcdHJldHVybiAxO1xuIFxuIFx0XHRpZiAoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZS5kYmdjdGwgPT0gZGF0YSlcbkBAIC01MDMzLDcgKzUwMzgsNyBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFxuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCB2bWNiLCBzYXZlKSAhPSAweDQwMCk7XG4gXG4tXHRzdm1fY29weV92bXJ1bl9zdGF0ZShtYXBfc2F2ZS5odmEgKyAweDQwMCxcbitcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKHZjcHUsIG1hcF9zYXZlLmh2YSArIDB4NDAwLFxuIFx0XHRcdCAgICAgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSk7XG4gXG4gXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG5AQCAtNTA3Nyw3ICs1MDgyLDcgQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbiBcdCAqIHVzZWQgZHVyaW5nIFNNTSAoc2VlIHN2bV9lbnRlcl9zbW0oKSlcbiBcdCAqL1xuIFxuLVx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSwgbWFwX3NhdmUuaHZhICsgMHg0MDApO1xuK1x0c3ZtX2NvcHlfdm1ydW5fc3RhdGUodmNwdSwgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSwgbWFwX3NhdmUuaHZhICsgMHg0MDApO1xuIFxuIFx0LypcbiBcdCAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93XG5AQCAtNTU5MSw5ICs1NTk2LDE3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBzdm1fc2V0X2NwdV9jYXBzKHZvaWQpXG4gXHQgKiBDbGVhciBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkIGJ5IGNvbW1vbiBjb2RlLFxuIFx0ICogYnV0IHRoYXQgcmVxdWlyZSBleHBsaWNpdCBTVk0gc3VwcG9ydCAodGhhdCBpc24ndCB5ZXQgaW1wbGVtZW50ZWQpLlxuIFx0ICovXG4tXHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuIFx0a3ZtX2NwdV9jYXBfY2xlYXIoWDg2X0ZFQVRVUkVfTVNSX0lNTSk7XG4gXG4rXHQvKlxuK1x0ICogTEJSIFZpcnR1YWxpemF0aW9uIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IEJ1c0xvY2tUcmFwIGluc2lkZSB0aGVcbitcdCAqIGd1ZXN0LCBzaW5jZSBCdXNMb2NrVHJhcCBpcyBlbmFibGVkIHRocm91Z2ggTVNSX0lBMzJfREVCVUdDVExNU1IgYW5kXG4rXHQgKiBNU1JfSUEzMl9ERUJVR0NUTE1TUiBpcyB2aXJ0dWFsaXplZCBvbmx5IGlmIExCUiBWaXJ0dWFsaXphdGlvbiBpc1xuK1x0ICogZW5hYmxlZC5cbitcdCAqL1xuK1x0aWYgKCFsYnJ2KVxuK1x0XHRrdm1fY3B1X2NhcF9jbGVhcihYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpO1xuK1xuIFx0a3ZtX3NldHVwX3hzc19jYXBzKCk7XG4gXHRrdm1fZmluYWxpemVfY3B1X2NhcHMoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbmluZGV4IDcxNmJlMjFmYmEzMzU0Li40MDJhODI3ZjYyMmQyZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC03ODMsNyArNzgzLDE1IEBAIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlMoYm9vbCwgdGVzdCwgdGVzdClcbiBCVUlMRF9TVk1fTVNSX0JJVE1BUF9IRUxQRVJTKHZvaWQsIGNsZWFyLCBfX2NsZWFyKVxuIEJVSUxEX1NWTV9NU1JfQklUTUFQX0hFTFBFUlModm9pZCwgc2V0LCBfX3NldClcbiBcbi0jZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH5ERUJVR0NUTE1TUl9MQlIpXG4rc3RhdGljIGlubGluZSB1NjQgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR1NjQgZGVidWdjdGwgPSBERUJVR0NUTE1TUl9MQlI7XG4rXG4rXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcbitcdFx0ZGVidWdjdGwgfD0gREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUO1xuK1xuK1x0cmV0dXJuIH5kZWJ1Z2N0bDtcbit9XG4gXG4gLyogc3ZtLmMgKi9cbiBleHRlcm4gYm9vbCBkdW1wX2ludmFsaWRfdm1jYjtcbkBAIC04NzMsNyArODgxLDcgQEAgdm9pZCBzdm1fbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBzdm1fZnJlZV9uZXN0ZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIGludCBzdm1fYWxsb2NhdGVfbmVzdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBpbnQgbmVzdGVkX3N2bV92bXJ1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLXZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICp0b19zYXZlLFxuK3ZvaWQgc3ZtX2NvcHlfdm1ydW5fc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKnRvX3NhdmUsXG4gXHRcdFx0ICBzdHJ1Y3Qgdm1jYl9zYXZlX2FyZWEgKmZyb21fc2F2ZSk7XG4gdm9pZCBzdm1fY29weV92bWxvYWRzYXZlX3N0YXRlKHN0cnVjdCB2bWNiICp0b192bWNiLCBzdHJ1Y3Qgdm1jYiAqZnJvbV92bWNiKTtcbiB2b2lkIG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbkBAIC04OTksNiArOTA3LDcgQEAgdm9pZCBuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3RydWN0IHZjcHVfc3ZtICpzdm0sXG4gdm9pZCBuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3RydWN0IHZjcHVfc3ZtICpzdm0sXG4gXHRcdFx0XHQgICAgc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzYXZlKTtcbiB2b2lkIG5lc3RlZF9zeW5jX2NvbnRyb2xfZnJvbV92bWNiMDIoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuK2Jvb2wgbmVzdGVkX3ZtY2IxMl9oYXNfbGJydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgc3ZtX3N3aXRjaF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3ZtY2JfaW5mbyAqdGFyZ2V0X3ZtY2IpO1xuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTA6NTEuNzU3NTgyMDI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExOTc1OTE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gU1ZNIEJ1cyBMb2NrIERldGVjdCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgZGVzaWduZWQgdG8gZW5hYmxlIEJ1cyBMb2NrIERldGVjdCB3aXRoaW4gS1ZNIGd1ZXN0cywgc3BlY2lmaWNhbGx5IHRob3NlIHJ1bm5pbmcgb24gQU1EJ3MgU1ZNIGFyY2hpdGVjdHVyZS4gSSBjYW4gc2VlIGl0J3MgdG91Y2hpbmcgY29yZSBLVk0gZmlsZXM6IGByZWdzLmNgLCBgcmVncy5oYCwgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb21wb25lbnRzIGluIGBuZXN0ZWQuY2AsIGFuZCB0aGUgU1ZNLXNwZWNpZmljIGNvZGUgaW4gYHN2bS5jYCBhbmQgYHN2bS5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYmUuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGEgZmV3IGtleSBhcmVhcy4gRmlyc3QsIGl0J3MgZXhwb3J0aW5nIGBrdm1fZHI2X2ZpeGVkYCwgbGlrZWx5IHRvIG1ha2UgaXQgYWNjZXNzaWJsZSBpbnRlcm5hbGx5IHdpdGhpbiBLVk0uIFRoYXQncyBnb29kLCBrZWVwcyB0aGluZ3MgZW5jYXBzdWxhdGVkIHdoZXJlIHRoZXkgc2hvdWxkIGJlLiBUaGVuLCBpbiBgbmVzdGVkLmNgLCBpdOKAmXMgY2FyZWZ1bGx5IGNsZWFyaW5nIGJpdHMgaW4gYG1pc2NfY3RsMmAgdGhhdCB0aGUgZ3Vlc3Qgc2hvdWxkbid0IGJlIG1lc3Npbmcgd2l0aCwgcGFydGljdWxhcmx5IGBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSYCBpZiBMQlJWIChMYXN0IEJyYW5jaCBSZWNvcmQgVmFsaWRhdGlvbikgaXNuJ3Qgc3VwcG9ydGVkLiBTbWFydCwgcHJldmVudHMgYW55IGd1ZXN0LWxldmVsIHNoZW5hbmlnYW5zIHRoYXQgY291bGQgY2F1c2UgaW5zdGFiaWxpdHkuXG5cbkZ1cnRoZXIgb24sIGl0J3MgdXNpbmcgYGt2bV9kcjZfZml4ZWQodmNwdSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgRFI2X0FDVElWRV9MT1dgIGluIHRoZSBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgIGZ1bmN0aW9uLiBUaGF0IHN1Z2dlc3RzIGEgbW9yZSByb2J1c3Qgb3IgY29ycmVjdCB3YXkgdG8gaGFuZGxlIERSNiBhbmQgcG90ZW50aWFsbHkgYWRkcmVzcyBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGlkaW9zeW5jcmFzaWVzLiAgU2ltaWxhciBsb2dpYyBpcyBiZWluZyBhcHBsaWVkIHRvIGRlYnVnIGNvbnRyb2wgTVNScy5cblxuVGhlIGNvZGUgYWxzbyBhcHBlYXJzIHRvIGNhcmVmdWxseSBtYW5hZ2UgdGhlIExCUlYgYW5kIEJ1cyBMb2NrIERldGVjdCBpbnRlcmFjdGlvbnMuIEl0IGNvbmRpdGlvbmFsbHkgZW5hYmxlcyBMQlJWIGJhc2VkIG9uIHRoZSBgREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUYCBmbGFnIGluIHRoZSBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIGFuZCBjb25kaXRpb25hbGx5IGNsZWFycyB0aGUgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgQ1BVIGZlYXR1cmUgaWYgTEJSViBpcyB1bmF2YWlsYWJsZS4gIFRoYXQncyBhIHNvdW5kIGFwcHJvYWNoIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBhdm9pZCBleHBvc2luZyBmZWF0dXJlcyB0aGF0IGFyZW4ndCBmdWxseSBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBzZWVtcyBzb2xpZC4gSXQncyBlbmFibGluZyBCdXMgTG9jayBEZXRlY3QgZm9yIFNWTSBndWVzdHMgaW4gS1ZNLCB3aGljaCBpcyBhIHZhbHVhYmxlIGZlYXR1cmUgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBLVk0gYW5kIEtWTV9BTUQgYXJlIGVuYWJsZWQgYW5kIHRoZW4gc2VhcmNoIHRoZSBrZXJuZWwgY29uZmlnIGZvciBob3cgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgYW5kIHJlbGF0ZWQgb3B0aW9ucyBhcmUgaGFuZGxlZC4gVGhpcyBpcyB0aGUga2luZCBvZiBwYXRjaCB0aGF0IHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBpbnRlZ3JhdGUsIGFzc3VtaW5nIGFsbCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTA6NTguODc3MzQzNzQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTI2OTA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAxOjEwOjU5LjA3MjYyMzQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MzEzMDQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqS1ZNL0FNRCBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyBwcmltYXJpbHkgd2l0aCBhIGBLVk1fQU1EYCBjb25maWd1cmF0aW9uLCB0aGF0J3MgdGhlIGJhc2UuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIGRyaWxsaW5nIGRvd24gdG8gdGhlIHNwZWNpZmljcyB0aGF0IHdpbGwgcHJvdmlkZSBvcHRpbWl6YXRpb24sIHNvIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBrZXJuZWwgaGFzIGNvbmZpZ3VyZWQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIENQVSBhbmQgdGhlIGh5cGVydmlzb3IgaW4gdGhpcyBzcGVjaWZpYyB1c2UtY2FzZS4gTXkgZmlyc3QgdHdvIGFyZWFzIG9mIGlucXVpcnkgd291bGQgYmUgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgYW5kIGBYODZfRkVBVFVSRV9MQlJWYC4gVGhlc2UgZmVhdHVyZXMgY2FuIGJlIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSB0dW5pbmcsIHNvIEknbGwgc2VlIHdoYXQncyBzZXQgYW5kIHdoYXQgdGhhdCB0ZWxscyBtZSBhYm91dCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMTowMi4zNDU3NTYwOTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0ODg3OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaC00MDYtI2RlZmluZSBYODZfRkVBVFVSRV9SRFBJRFxcdFxcdCgxNiozMisyMikgLyogXFxcInJkcGlkXFxcIiBSRFBJRCBpbnN0cnVjdGlvbiAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmg6NDA3OiNkZWZpbmUgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUXFx0KDE2KjMyKzI0KSAvKiBcXFwiYnVzX2xvY2tfZGV0ZWN0XFxcIiBCdXMgTG9jayBkZXRlY3QgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oLTQwOC0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NMREVNT1RFXFx0XFx0KDE2KjMyKzI1KSAvKiBcXFwiY2xkZW1vdGVcXFwiIENMREVNT1RFIGluc3RydWN0aW9uICovXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM9MTEyPXN0YXRpYyB2b2lkIF9faW5pdCBzbGRfc3RhdGVfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0xMTgtXFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjExOTpcXHQgICAgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0xMjAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTMwMT12b2lkIGJ1c19sb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0zMDQtXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jOjMwNTpcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy0zMDYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jPTM5OD1zdGF0aWMgdm9pZCBzbGRfc3RhdGVfc2hvdyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jLTQwMS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDAyOlxcdGlmICgoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jLTQwMy1cXHQgICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1BMSVRfTE9DS19ERVRFQ1QpKSB8fFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9idXNfbG9jay5jLTQwNy1cXHRpZiAoc2xkX3N0YXRlID09IHNsZF9yYXRlbGltaXQpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmM6NDA4OlxcdFxcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDA5LVxcdFxcdFxcdHByX2luZm8oXFxcIiNEQjogc2V0dGluZyBzeXN0ZW0gd2lkZSBidXMgbG9jayByYXRlIGxpbWl0IHRvICV1L3NlY1xcXFxuXFxcIiwgYmxkX3JhdGVsaW1pdC5idXJzdCk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1c19sb2NrLmMtNDI2LVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYzo0Mjc6XFx0fSBlbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSkge1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvYnVzX2xvY2suYy00MjgtXFx0XFx0cHJfaW5mbyhcXFwiI0RCOiAlcyBvbiB1c2VyLXNwYWNlIGJ1c19sb2Nrc1xcXFxuXFxcIiwgYWN0aW9uKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9yZWdzLmM9NzY3PXU2NCBrdm1fZHI2X2ZpeGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9yZWdzLmMtNzczLVxcbmFyY2gveDg2L2t2bS9yZWdzLmM6Nzc0OlxcdGlmICghZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfQlVTX0xPQ0tfREVURUNUKSlcXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc3NS1cXHRcXHRmaXhlZCB8PSBEUjZfQlVTX0xPQ0s7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTU1MTQ9c3RhdGljIF9faW5pdCB2b2lkIHN2bV9zZXRfY3B1X2NhcHModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTYwNy1cXHRpZiAoIWxicnYpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NjA4OlxcdFxcdGt2bV9jcHVfY2FwX2NsZWFyKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NjA5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD03ODY9c3RhdGljIGlubGluZSB1NjQgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzg5LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6NzkwOlxcdGlmIChndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtNzkxLVxcdFxcdGRlYnVnY3RsIHw9IERFQlVHQ1RMTVNSX0JVU19MT0NLX0RFVEVDVDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9MjI5Nj11NjQgdm14X2dldF9zdXBwb3J0ZWRfZGVidWdjdGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGhvc3RfaW5pdGlhdGVkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0yMjk5LVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6MjMwMDpcXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVCkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjIzMDE6XFx0ICAgIChob3N0X2luaXRpYXRlZCB8fCBndWVzdF9jcHVfY2FwX2hhcyh2Y3B1LCBYODZfRkVBVFVSRV9CVVNfTE9DS19ERVRFQ1QpKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTIzMDItXFx0XFx0ZGVidWdjdGwgfD0gREVCVUdDVExNU1JfQlVTX0xPQ0tfREVURUNUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMTowMi42OTA2NDk3NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI5OTYxODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9uIFRhcmdldHMgaW4gdGhlIFNWTSBIeXBlcnZpc29yKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgc29tZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBTVk0gaHlwZXJ2aXNvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHdlIGNhbiBwb3RlbnRpYWxseSBzcXVlZXplIG91dCBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLiBUaGUgZnVuY3Rpb25zIEkndmUgYmVlbiBleGFtaW5pbmcgYXJlOiBga3ZtX2RyNl9maXhlZGAsIGBfX25lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZWAsIGBuZXN0ZWRfdm1jYjEyX2hhc19sYnJ2YCwgYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCwgYHN2bV9jb3B5X3ZtcnVuX3N0YXRlYCwgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYCwgYHN2bV91cGRhdGVfbGJydmAsIGBzdm1fc2V0X21zcmAsIGBzdm1fZW50ZXJfc21tYCwgYHN2bV9sZWF2ZV9zbW1gLCBgc3ZtX3NldF9jcHVfY2Fwc2AsIGFuZCBgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzYC4gVGhhdCdzIGEgbG90IHRvIGNvbnNpZGVyIVxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmFycm93IHRoZSBzY29wZS4gSSBrbm93IHRoYXQgYG5lc3RlZF9zdm1fdm1ydW5gIGlzIGNyaXRpY2FsIGFuZCBjYWxscyBgc3ZtX2NvcHlfdm1ydW5fc3RhdGVgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OiBgc3ZtX3VwZGF0ZV9sYnJ2YCwgYHN2bV9zZXRfbXNyYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGBzdm1fc2V0X25lc3RlZF9zdGF0ZWAsIGFuZCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLlxuXG5MZXQncyBkcmlsbCBkb3duIGludG8gYSBjb3VwbGUgb2YgdGhlbS4gSSdtIHdvbmRlcmluZyBpZiBgc3ZtX3NldF9tc3JgIGlzIGEgaG90c3BvdC4gSXQncyBpbnZva2VkIHdoZW5ldmVyIHRoZSBndWVzdCB3cml0ZXMgdG8gYW4gTVNSLCBzbyBpdCdzIHJlbGF0aXZlbHkgZnJlcXVlbnQsIGJ1dCBub3QgYXMgZnJlcXVlbnQgYXMgVk0gZXhpdHMuIGBzdm1fdXBkYXRlX2xicnZgIGlzIGludm9rZWQgd2hlbiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgTEJSIHZpcnR1YWxpemF0aW9uIHN0YXRlLiBBbmQgdGhlbiBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgIGlzIGludm9rZWQgZHVyaW5nIHRoZSByZXN0b3JhdGlvbiBvZiBuZXN0ZWQgc3RhdGUsIGZvciBleGFtcGxlLCBkdXJpbmcgYSBtaWdyYXRpb24uIEZpbmFsbHksIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAgaXMgaW52b2tlZCB3aGVuIHByZXBhcmluZyB0byBydW4gdGhlIEwyIGd1ZXN0LlxuXG5Pa2F5LCBsZXQncyBwcmlvcml0aXplLiBJIHRoaW5rIGBzdm1fdXBkYXRlX2xicnZgLCBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgLCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLCBgc3ZtX2VudGVyX3NtbWAsIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYXJlIHByb2JhYmx5IHRoZSBtb3N0IGludGVyZXN0aW5nLlxuXG5JJ20gbm93IGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc3ZtX3VwZGF0ZV9sYnJ2YCBhbmQgYHN2bV9zZXRfbXNyYC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIGFueSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMTowOS4zMjA2MTQwMTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3Mzk2NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV91cGRhdGVfbGJydlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTc0OD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtODI4LVxcdHZtY2JfbWFya19kaXJ0eSh2bWNiMDIsIFZNQ0JfTEJSKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjgyOTpcXHRzdm1fdXBkYXRlX2xicnYoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MzAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz04NTY9c3RhdGljIHZvaWQgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX2NvbnRyb2woc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk5MC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjk5MTpcXHQvKiBTVk1fTUlTQzJfRU5BQkxFX1ZfTEJSIGlzIGNvbnRyb2xsZWQgYnkgc3ZtX3VwZGF0ZV9sYnJ2KCkgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTk5Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9MTMyNT12b2lkIG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzg5LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTM5MDpcXHRzdm1fdXBkYXRlX2xicnYodmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz04NzM9c3RhdGljIHZvaWQgX19zdm1fZGlzYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtODc4LVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6ODc5OnZvaWQgc3ZtX3VwZGF0ZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTg4MC17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTI5ODA9c3RhdGljIGludCBzdm1fc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMTc1LVxcdFxcdHZtY2JfbWFya19kaXJ0eShzdm0tXFx1MDAzZXZtY2IsIFZNQ0JfTEJSKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMxNzY6XFx0XFx0c3ZtX3VwZGF0ZV9sYnJ2KHZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzE3Ny1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9ODE2PXZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo4MTc6dm9pZCBzdm1fdXBkYXRlX2xicnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTgxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTE6MDkuNDY4MDI3MDA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU2MTE2OTI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTVk0gQnVzIExvY2sgRGV0ZWN0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHNvbWUga2V5IGFyZWFzIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEFNRCBTVk0gZ3Vlc3QgZW52aXJvbm1lbnQuIEkgc2VlIGBzdm1fdXBkYXRlX2xicnZgIGJlaW5nIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAsIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAsIGFuZCBgc3ZtX3NldF9tc3JgLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZS4gYHN2bV9zZXRfbXNyYCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHRpZWQgdG8gZ3Vlc3QgTVNSIHdyaXRlcywgd2hpY2ggaXMgZGVmaW5pdGVseSByZWxldmFudCB0byBidXMgbG9jayBkZXRlY3Rpb24gZ2l2ZW4gaXRzIGRlcGVuZGVuY2Ugb24gdGhlIGBERUJVR0NUTE1TUmAgTVNSLiBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgIGlzIGludGVyZXN0aW5nIGFzIHdlbGw7IHRoYXQncyB0cmlnZ2VyZWQgYnkgbmVzdGVkIFZNUlVOLCBpbXBseWluZyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFzcGVjdC4gYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYmVpbmcgdHJpZ2dlcmVkIGJ5IFNNSXMgaW4gdGhlIGd1ZXN0IGlzIGFsc28gaW1wb3J0YW50LiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgaGFuZGxpbmcgU01NIHRyYW5zaXRpb25zLCB3aGljaCBpcyBhbHNvIGEgc2lnbmlmaWNhbnQgYXJlYSB0byBhZGRyZXNzLlxuXG5BbHJpZ2h0LCBsZXQncyBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIEkgY2FuIGxpc3QgYEtWTWAgYW5kIGBLVk1fQU1EYC5cblxuTm93LCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6XG5gc3ZtX3VwZGF0ZV9sYnJ2YFxuYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYFxuYHN2bV9zZXRfbXNyYFxuYHN2bV9lbnRlcl9zbW1gXG5gc3ZtX2xlYXZlX3NtbWBcbmBzdm1fc2V0X25lc3RlZF9zdGF0ZWBcblxuV2FpdC4uLnRoaW5raW5nIHRocm91Z2ggaXQuLi4gYHN2bV9zZXRfbXNyYCBtaWdodCBiZSBhIGhvdCBwYXRoIGZvciBzb21lIE1TUnMsIGJ1dCBpbmNsdWRpbmcgaXQgaXMgZmluZS4gYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYCBpcyBkZWZpbml0ZWx5IHNwZWNpZmljIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gYHN2bV91cGRhdGVfbGJydmAgaXMgdGllZCBkaXJlY3RseSB0byBMQlIgdmlydHVhbGl6YXRpb24uIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gLi4uIFNNTSwgb2J2aW91c2x5LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBhIGJpdCBtb3JlLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHJlbGV2YW50IGNvbmZpZy13aXNlPyBOZXN0ZWQgdmlydHVhbGl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIEtWTV9BTUQsIG9yIHZpYSBhIG1vZHVsZSBwYXJhbWV0ZXIsIHNvIGl0IHNvdW5kcyBsaWtlIGBLVk1fQU1EYCBpcyB0aGUga2V5LiBJcyB0aGVyZSBhbnkgc2VwYXJhdGUgY29uZmlnIGZvciBTTU0/IE5vLCBTTU0gaXMgcGFydCBvZiBLVk0uXG5cbkxldCdzIGFsc28gY2hlY2sgaWYgYFg4Nl9GRUFUVVJFX0JVU19MT0NLX0RFVEVDVGAgaGFzIGNvbmZpZyBkZXBlbmRlbmN5LiBJdCBpcyBhIENQVSBmZWF0dXJlLCBzbyBpdCBkb2VzIG5vdC4gQWxzbywgdGhlIGlubGluZSBmdW5jdGlvbiBgc3ZtX2dldF9kZWJ1Z2N0bF9yZXNlcnZlZF9iaXRzYCBkb2Vzbid0IG5lZWQgdG8gYmUgdHJhY2tlZC5cblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLCBgS1ZNYCBhbmQgYEtWTV9BTURgLlxuXG5BbmQgdGhlIGZvY3VzIHN5bWJvbHM6XG5gc3ZtX3VwZGF0ZV9sYnJ2YFxuYG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlYFxuYHN2bV9zZXRfbmVzdGVkX3N0YXRlYFxuYHN2bV9lbnRlcl9zbW1gXG5gc3ZtX2xlYXZlX3NtbWBcblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCdzIHB1cnBvc2UgaXMgdG8gaW1wbGVtZW50IEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMuIFRoaXMgaW5ldml0YWJseSBtZWFucyBtb2RpZnlpbmcgS1ZNJ3MgaGFuZGxpbmcgb2YgdGhlIGBERUJVR0NUTE1TUmAgTVNSLCBuZXN0ZWQgVk1DQiBzdGF0ZSBtYW5hZ2VtZW50IChzYXZpbmcvcmVzdG9yaW5nKSwgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBjb3JyZWN0bHkgdmlydHVhbGl6ZSB0aGUgQnVzIExvY2sgRGV0ZWN0IGZlYXR1cmUuIEl0J3MgYSBmdW5jdGlvbmFsIHBhdGNoIGFmZmVjdGluZyBndWVzdCBleGVjdXRpb24gYW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiDigJMgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggTEJSIHZpcnR1YWxpemF0aW9uLiBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgZGVwZW5kZW5jaWVzLiBOb3cgbGV0IG1lIGRvdWJsZS1jaGVjayBpZiBgS1ZNX0FNRGAgaXMgdGhlIG9ubHkgY29uZmlnIGludm9sdmVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAxOjExOjE5LjAyOTE5ODc1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjc4MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTE6MTkuMjgyNDg1NDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mzg4MTYxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTV9TTU0gQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBLVk1fU01NYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgdGhlIGtleSB0YWtlYXdheSBoZXJlLiBUaGUgZmFjdCB0aGF0IHRoZSBmdW5jdGlvbnMgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgaGF2ZSBiZWVuIG1vZGlmaWVkIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYEtWTV9TTU1gIGlzIGRpcmVjdGx5IHJlbGV2YW50LiBUaGVyZWZvcmUsIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBtYWtlIHN1cmUgaXMgaW5jbHVkZWQsIGFsb25nIHdpdGggdGhlIGJhc2UgYEtWTWAgYW5kIGBLVk1fQU1EYCBjb25maWd1cmF0aW9ucywgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGltcG9ydGFudCBzeW1ib2xzIGxpbmtlZCB0byBgS1ZNX1NNTWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBzdm1fdXBkYXRlX2xicnZgLCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLCBhbmQgYHN2bV9zZXRfbmVzdGVkX3N0YXRlYC4gSSBhbHNvIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGBzdm1fZW50ZXJfc21tYCBhbmQgYHN2bV9sZWF2ZV9zbW1gIGFzIHRoZXkgYXJlIGF0IHRoZSBjZW50ZXIgb2YgdGhpcy5cblxuU2luY2UgSSdtIGFscmVhZHkgaW4gdGhpcyB0aG91Z2h0IHByb2Nlc3MsIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGt2bV9kcjZfZml4ZWRgLiBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9rdm0vcmVncy5jYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZWAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGVyZSBtaWdodCBiZSBvdGhlciBjYWxsIHNpdGVzIEkgbmVlZCB0byBjaGVjay4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMToxMToyMy45MjEzMDQzNTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTIzMjk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZHI2X2ZpeGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3JlZ3MuYz03NjU9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV91cGRhdGVfZHI3KTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc2Ni1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jOjc2Nzp1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy03Njgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3JlZ3MuYy03NzctfVxcbmFyY2gveDg2L2t2bS9yZWdzLmM6Nzc4OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fZHI2X2ZpeGVkKTtcXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc3OS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jPTc4MD1pbnQga3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWwpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5jLTc5My1cXHRcXHRcXHRyZXR1cm4gMTsgLyogI0dQICovXFxuYXJjaC94ODYva3ZtL3JlZ3MuYzo3OTQ6XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5kcjYgPSAodmFsIFxcdTAwMjYgRFI2X1ZPTEFUSUxFKSB8IGt2bV9kcjZfZml4ZWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuYy03OTUtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcmVncy5oPTI1PWludCBrdm1fc2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7XFxuYXJjaC94ODYva3ZtL3JlZ3MuaDoyNjp1NjQga3ZtX2RyNl9maXhlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9yZWdzLmgtMjctdW5zaWduZWQgbG9uZyBrdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM9NzQ4PXN0YXRpYyB2b2lkIG5lc3RlZF92bWNiMDJfcHJlcGFyZV9zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy04MTMtXFx0XFx0dm1jYjAyLVxcdTAwM2VzYXZlLmRyNyA9IHN2bS1cXHUwMDNlbmVzdGVkLnNhdmUuZHI3IHwgRFI3X0ZJWEVEXzE7XFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzo4MTQ6XFx0XFx0c3ZtLVxcdTAwM2V2Y3B1LmFyY2guZHI2ICA9IHN2bS1cXHUwMDNlbmVzdGVkLnNhdmUuZHI2IHwga3ZtX2RyNl9maXhlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTgxNS1cXHRcXHR2bWNiX21hcmtfZGlydHkodm1jYjAyLCBWTUNCX0RSKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDE6MTE6MjQuMDgwNTQyNjIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTU2MzI2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBhcyBJIHVuZGVyc3RhbmQgaXQ6XG5cbioqUGF0Y2ggRGVlcCBEaXZlOiBCdXMgTG9jayBEZXRlY3QgZm9yIEFNRCBTVk0gR3Vlc3RzKipcblxuT2theSwgc28gYGt2bV9kcjZfZml4ZWRgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiBga3ZtX3NldF9kcmAsIHdoaWNoIG1ha2VzIGl0IGEgc29saWQgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFdlIG5lZWQgdG8gZmluYWxpemUgdGhlIGFzc2Vzc21lbnQuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRpbmcgQnVzIExvY2sgRGV0ZWN0IHNwZWNpZmljYWxseSBmb3IgQU1EIFNWTSBndWVzdHMuIFRoZSBtYWluIGNoYW5nZXMgYXJlIGluIGhvdyBLVk0gaGFuZGxlcyBERUJVR0NUTE1TUiwgd2hpY2ggaXMgaW1wb3J0YW50LCBhbmQgaG93IGl0IG1hbmFnZXMgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nIGFuZCByZXN0b3JpbmcuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVybHkgdmlydHVhbGl6aW5nIHRoZSBCdXMgTG9jayBEZXRlY3QgZmVhdHVyZS4gSXQgYWxzbyBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIGNyaXRpY2FsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uLlxuXG5UaGUgb3ZlcmFsbCBgV29ydGhGdXp6aW5nYCBhc3Nlc3NtZW50IGlzIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIHNvdW5kOyB0aGlzIGZlYXR1cmUgdmlydHVhbGl6YXRpb24gaXMgY29tcGxleC5cblxuV2UndmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIHRlc3Rpbmc6IGBzdm1fdXBkYXRlX2xicnZgLCBgbmVzdGVkX3ZtY2IwMl9wcmVwYXJlX3NhdmVgLCBgc3ZtX3NldF9uZXN0ZWRfc3RhdGVgLCBgc3ZtX2VudGVyX3NtbWAsIGBzdm1fbGVhdmVfc21tYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLWltcG9ydGFudCBga3ZtX2RyNl9maXhlZGAuXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gd29yayBhcmUgYEtWTWAsIGBLVk1fQU1EYCwgYW5kIGBLVk1fU01NYC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBjb25maWd1cmF0aW9ucyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMjMsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAxOjExOjI5Ljc5NjE4NzQ4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTYxMTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fU01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZtX3VwZGF0ZV9sYnJ2XCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZVwiLFxuICAgIFwic3ZtX3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcImt2bV9kcjZfZml4ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMsIG1vZGlmeWluZyBLVk0ncyBoYW5kbGluZyBvZiBERUJVR0NUTE1TUiwgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nL3Jlc3RvcmluZywgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBwcm9wZXJseSB2aXJ0dWFsaXplIHRoZSBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBMQlIgVmlydHVhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fU01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3ZtX3VwZGF0ZV9sYnJ2XCIsXG4gICAgXCJuZXN0ZWRfdm1jYjAyX3ByZXBhcmVfc2F2ZVwiLFxuICAgIFwic3ZtX3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcImt2bV9kcjZfZml4ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEJ1cyBMb2NrIERldGVjdCBmb3IgQU1EIFNWTSBndWVzdHMsIG1vZGlmeWluZyBLVk0ncyBoYW5kbGluZyBvZiBERUJVR0NUTE1TUiwgbmVzdGVkIFZNQ0Igc3RhdGUgc2F2aW5nL3Jlc3RvcmluZywgYW5kIFNNTSBzdGF0ZSB0cmFuc2l0aW9ucyB0byBwcm9wZXJseSB2aXJ0dWFsaXplIHRoZSBmZWF0dXJlIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBMQlIgVmlydHVhbGl6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[1] Phase: Succeeded StartedAt: 2026-07-10 01:11:44 +0000 UTC FinishedAt: 2026-07-10 01:11:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 01:11:44 +0000 UTC FinishedAt: 2026-07-10 01:11:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2] Phase: Succeeded StartedAt: 2026-07-10 01:11:44 +0000 UTC FinishedAt: 2026-07-10 05:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 01:11:45 +0000 UTC FinishedAt: 2026-07-10 05:24:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 01:11:45 +0000 UTC FinishedAt: 2026-07-10 01:12:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 01:11:45 +0000 UTC FinishedAt: 2026-07-10 01:12:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowflmqp/series-workflowflmqp-convert-artifact-1252748757/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 01:12:18 +0000 UTC FinishedAt: 2026-07-10 01:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 01:12:18 +0000 UTC FinishedAt: 2026-07-10 01:45:45 +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:*9d39b717-334d-4060-8024-42a38b84ac07,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-workflowflmqp/series-workflowflmqp-convert-artifact-1252748757/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": "b677371b-6d6a-4c75-bdcd-0b43f929ff0d", "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-workflowflmqp/series-workflowflmqp-build-action-346495035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 01:12:18 +0000 UTC FinishedAt: 2026-07-10 01:45:34 +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:*9d39b717-334d-4060-8024-42a38b84ac07,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-workflowflmqp/series-workflowflmqp-convert-artifact-1252748757/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": "b677371b-6d6a-4c75-bdcd-0b43f929ff0d", "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-workflowflmqp/series-workflowflmqp-build-action-346495035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 01:45:45 +0000 UTC FinishedAt: 2026-07-10 01:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 01:45:45 +0000 UTC FinishedAt: 2026-07-10 01:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 01:45:45 +0000 UTC FinishedAt: 2026-07-10 01:46:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 01:45:45 +0000 UTC FinishedAt: 2026-07-10 01:46:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowflmqp/series-workflowflmqp-convert-artifact-2509402544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 01:46:35 +0000 UTC FinishedAt: 2026-07-10 01:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 01:46:35 +0000 UTC FinishedAt: 2026-07-10 01:48:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b677371b-6d6a-4c75-bdcd-0b43f929ff0d,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-workflowflmqp/series-workflowflmqp-build-action-346495035/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-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 01:48:50 +0000 UTC FinishedAt: 2026-07-10 01:48:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 01:48:51 +0000 UTC FinishedAt: 2026-07-10 01:48:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 01:48:51 +0000 UTC FinishedAt: 2026-07-10 02:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 01:48:51 +0000 UTC FinishedAt: 2026-07-10 02:21:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9d39b717-334d-4060-8024-42a38b84ac07,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-workflowflmqp/series-workflowflmqp-convert-artifact-2509402544/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": "feb74afd-ef0d-4e41-9d6a-87975dc09f35", "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-workflowflmqp/series-workflowflmqp-build-action-3774368684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 01:48:51 +0000 UTC FinishedAt: 2026-07-10 02:21:12 +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:*9d39b717-334d-4060-8024-42a38b84ac07,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-workflowflmqp/series-workflowflmqp-convert-artifact-2509402544/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": "feb74afd-ef0d-4e41-9d6a-87975dc09f35", "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-workflowflmqp/series-workflowflmqp-build-action-3774368684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 02:21:22 +0000 UTC FinishedAt: 2026-07-10 02:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 02:21:22 +0000 UTC FinishedAt: 2026-07-10 02:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 02:21:22 +0000 UTC FinishedAt: 2026-07-10 02:23:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 02:21:22 +0000 UTC FinishedAt: 2026-07-10 02:23:21 +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:*feb74afd-ef0d-4e41-9d6a-87975dc09f35,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-workflowflmqp/series-workflowflmqp-build-action-3774368684/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-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 02:23:31 +0000 UTC FinishedAt: 2026-07-10 05:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 02:23:31 +0000 UTC FinishedAt: 2026-07-10 05:24:53 +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":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"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:*b677371b-6d6a-4c75-bdcd-0b43f929ff0d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*feb74afd-ef0d-4e41-9d6a-87975dc09f35,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-workflowflmqp/series-workflowflmqp-build-action-346495035/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-workflowflmqp/series-workflowflmqp-build-action-3774368684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 02:23:31 +0000 UTC FinishedAt: 2026-07-10 02:23:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 02:23:31 +0000 UTC FinishedAt: 2026-07-10 02:23:36 +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":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"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-workflowflmqp/series-workflowflmqp-convert-artifact-865229865/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 02:23:31 +0000 UTC FinishedAt: 2026-07-10 02:23:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 02:23:31 +0000 UTC FinishedAt: 2026-07-10 02:23:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 02:23:31 +0000 UTC FinishedAt: 2026-07-10 02:23:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 02:23:41 +0000 UTC FinishedAt: 2026-07-10 05:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflmqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["svm_update_lbrv","nested_vmcb02_prepare_save","svm_set_nested_state","svm_enter_smm","svm_leave_smm","kvm_dr6_fixed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"50406d35f5635e1cc523e61409d57e851b5f5df8","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_SMM"],"series_id":"31d145ec-e5c2-41c2-bcb3-fe91249c53c8","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 02:23:41 +0000 UTC FinishedAt: 2026-07-10 05:24:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b677371b-6d6a-4c75-bdcd-0b43f929ff0d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*feb74afd-ef0d-4e41-9d6a-87975dc09f35,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-workflowflmqp/series-workflowflmqp-build-action-346495035/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-workflowflmqp/series-workflowflmqp-build-action-3774368684/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-workflowflmqp/series-workflowflmqp-convert-artifact-865229865/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,}