Name: series-workflowb7wch Phase: Failed StartedAt: 2026-08-02 16:20:27 +0000 UTC FinishedAt: 2026-08-02 16:24:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7wch[0] Phase: Succeeded StartedAt: 2026-08-02 16:20:27 +0000 UTC FinishedAt: 2026-08-02 16:24:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7wch[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 16:20:27 +0000 UTC FinishedAt: 2026-08-02 16:24:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChxY2E4aykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzA4NjVlZjQ5MjY3YWNhMmE2YTlmZmIzZGZiMjEwODZjMDZhODFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6MjI6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1xuaW5kZXggNGM5Mjg5ODNiODYyMy4uNGFmOTJkNTFmMDQ2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1xuQEAgLTEwODcsMjIgJiM0MzsxMDg3LDYgQEAgcWNhOGtfc2V0dXBfbWFjX3B3cl9zZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHFjYThrX2ZpbmRfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLXtcbi1cdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbi1cbi1cdC8qIEZpbmQgdGhlIGNvbm5lY3RlZCBjcHUgcG9ydC4gVmFsaWQgcG9ydCBhcmUgMCBvciA2ICovXG4tXHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRkZXZfZGJnKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2XCYjMzQ7KTtcbi1cbi1cdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIDYpKVxuLVx0XHRyZXR1cm4gNjtcbi1cbi1cdHJldHVybiAtRUlOVkFMO1xuLX1cbi1cbiBzdGF0aWMgaW50XG4gcWNhOGtfc2V0dXBfb2ZfcHdzX3JlZyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbiB7XG5AQCAtMTc1OSw2ICYjNDM7MTc0MywxMzkgQEAgcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fUUNBO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdTMyICp1c2VyX21lbWJlcnMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiAqY3B1X21lbWJlcnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KnVzZXJfbWVtYmVycyA9IHZhbCBcdTAwMjYgZHNhX2NwdV9wb3J0cyhkcyk7XG4mIzQzO1x0KmNwdV9tZW1iZXJzID0gMDtcbiYjNDM7XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCxcbiYjNDM7XHRcdFx0XHQgIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVx1MDAzZWluZGV4KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwMjYgQklUKHBvcnQpKVxuJiM0MztcdFx0XHQqY3B1X21lbWJlcnMgfD0gQklUKGNwdV9kcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdTMyIHVzZXJfbWVtYmVycyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdTMyIGNwdV9tZW1iZXJzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCxcbiYjNDM7XHRcdFx0XHQgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcbiYjNDM7XHRcdFx0XHQgZHNhX2NwdV9wb3J0cyhkcyksIHVzZXJfbWVtYmVycyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoY3B1X2RwLCBkcykge1xuJiM0MztcdFx0dTMyIG1lbWJlciA9IGNwdV9tZW1iZXJzIFx1MDAyNiBCSVQoY3B1X2RwLVx1MDAzZWluZGV4KSA/IEJJVChwb3J0KSA6IDA7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLFxuJiM0MztcdFx0XHRcdFx0IFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVx1MDAzZWluZGV4KSxcbiYjNDM7XHRcdFx0XHRcdCBCSVQocG9ydCksIG1lbWJlcik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0dTMyIGNwdV9wb3J0X21hc2ssIG9sZF9jcHVfbWVtYmVycywgb2xkX3VzZXJfbWVtYmVycztcbiYjNDM7XHRpbnQgcmVzdG9yZV9yZXQsIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfY29uZHVpdF9wb3J0X21hc2soZHMsIGNvbmR1aXQsIFx1MDAyNmNwdV9wb3J0X21hc2ssIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjYThrX3BvcnRfZ2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgXHUwMDI2b2xkX3VzZXJfbWVtYmVycyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2b2xkX2NwdV9tZW1iZXJzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKGRzLCBwb3J0LCBjcHVfcG9ydF9tYXNrLFxuJiM0MztcdFx0XHRcdFx0XHRjcHVfcG9ydF9tYXNrKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX3JldCA9IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRvbGRfdXNlcl9tZW1iZXJzLFxuJiM0MztcdFx0XHRcdFx0XHRcdG9sZF9jcHVfbWVtYmVycyk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfcmV0KVxuJiM0MztcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgY29uZHVpdCBtZW1iZXJzaGlwIGZvciBwb3J0ICVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIEVSUl9QVFIocmVzdG9yZV9yZXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBkc2FfbGFnIGxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHRpZiAoZHNhX3BvcnRfdG9fY29uZHVpdChkcCkgIT0gbGFnLmRldilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChkcywgZHAtXHUwMDNlaW5kZXgsIGxhZy5kZXYsIE5VTEwpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfbGFnX2pvaW5fd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjYThrX3BvcnRfbGFnX2pvaW4oZHMsIHBvcnQsIGxhZywgaW5mbywgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoZHMsIGxhZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfbGVhdmVfd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc3RydWN0IGRzYV9sYWcgbGFnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfcG9ydF9sYWdfbGVhdmUoZHMsIHBvcnQsIGxhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKGRzLCBsYWcpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gcWNhOGtfY29uZHVpdF9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcbiBcdFx0ICAgICBib29sIG9wZXJhdGlvbmFsKVxuQEAgLTE4NDQsMTMgJiM0MzsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuLVx0aW50IGNwdV9wb3J0LCByZXQ7XG4tXHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgY3B1X3BvcnRzLCBtYXNrO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRjcHVfcG9ydCA9IHFjYThrX2ZpbmRfY3B1X3BvcnQoZHMpO1xuLVx0aWYgKGNwdV9wb3J0IFx1MDAzYyAwKSB7XG4tXHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O05vIGNwdSBwb3J0IGNvbmZpZ3VyZWQgaW4gYm90aCBjcHUgcG9ydDAgYW5kIHBvcnQ2XCYjMzQ7KTtcbi1cdFx0cmV0dXJuIGNwdV9wb3J0O1xuJiM0MztcdGNwdV9wb3J0cyA9IGRzYV9jcHVfcG9ydHMoZHMpO1xuJiM0MztcdGlmICghY3B1X3BvcnRzIHx8IGNwdV9wb3J0cyBcdTAwMjYgfihCSVQoMCkgfCBCSVQoNikpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtDUFUgcG9ydHMgbXVzdCBiZSBwb3J0IDAgb3IgNlwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdC8qIFBhcnNlIENQVSBwb3J0IGNvbmZpZyB0byBiZSBsYXRlciB1c2VkIGluIHBoeV9saW5rIG1hY19jb25maWcgKi9cbkBAIC0xOTAwLDkgJiM0MzsyMDE3LDEwIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdC8qIEluaXRpYWwgc2V0dXAgb2YgYWxsIHBvcnRzICovXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4tXHRcdC8qIERpc2FibGUgZm9yd2FyZGluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuJiM0MztcdFx0LyogRGlzYWJsZSBmb3J3YXJkaW5nIGFuZCBsZWFybmluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuIFx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChkcC1cdTAwM2VpbmRleCksXG4tXHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9NRU1CRVIsIDApO1xuJiM0MztcdFx0XHRcdFFDQThLX1BPUlRfTE9PS1VQX01FTUJFUiB8XG4mIzQzO1x0XHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTEVBUk4sIDApO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMTkyMiwyOCAmIzQzOzIwNDAsMjAgQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBGb3J3YXJkIGFsbCB1bmtub3duIGZyYW1lcyB0byBDUFUgcG9ydCBmb3IgTGludXggcHJvY2Vzc2luZ1xuLVx0ICogTm90aWNlIHRoYXQgaW4gbXVsdGktY3B1IGNvbmZpZyBvbmx5IG9uZSBwb3J0IHNob3VsZCBiZSBzZXRcbi1cdCAqIGZvciBpZ21wLCB1bmtub3duLCBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBwYWNrZXRcbiYjNDM7XHQvKiBGb3J3YXJkIHVua25vd24gZnJhbWVzIHRvIGV2ZXJ5IENQVSBwb3J0LiBUaGUgaW5ncmVzcyBwb3J0IGxvb2t1cFxuJiM0MztcdCAqIG1lbWJlcnNoaXAgcmVzdHJpY3RzIGVhY2ggZnJhbWUgdG8gaXRzIGFzc2lnbmVkIENQVSBwb3J0LlxuIFx0ICovXG4gXHRyZXQgPSBxY2E4a193cml0ZShwcml2LCBRQ0E4S19SRUdfR0xPQkFMX0ZXX0NUUkwxLFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfSUdNUF9EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XG4tXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9CQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XG4tXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XG4tXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9VQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSk7XG4mIzQzO1x0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfSUdNUF9EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbiYjNDM7XHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9CQ19EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbiYjNDM7XHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbiYjNDM7XHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9VQ19EUF9NQVNLLCBjcHVfcG9ydHMpKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBDUFUgcG9ydCBnZXRzIGNvbm5lY3RlZCB0byBhbGwgdXNlciBwb3J0cyBvZiB0aGUgc3dpdGNoICovXG4tXHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXG4tXHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCBkc2FfdXNlcl9wb3J0cyhkcykpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIFNldHVwIGNvbm5lY3Rpb24gYmV0d2VlbiBDUFUgcG9ydCBcdTAwMjYgdXNlciBwb3J0c1xuLVx0ICogSW5kaXZpZHVhbCB1c2VyIHBvcnRzIGdldCBjb25uZWN0ZWQgdG8gQ1BVIHBvcnQgb25seVxuLVx0ICovXG4mIzQzO1x0LyogQ29ubmVjdCBlYWNoIHVzZXIgcG9ydCBiaWRpcmVjdGlvbmFsbHkgdG8gaXRzIGFzc2lnbmVkIENQVSBwb3J0LiAqL1xuIFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHR1OCBjcHVfcG9ydCA9IGRwLVx1MDAzZWNwdV9kcC1cdTAwM2VpbmRleDtcbiBcdFx0dTggcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFxuIFx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcbkBAIC0xOTUyLDggJiM0MzsyMDYyLDggQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4tXHRcdHJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLFxuLVx0XHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9MRUFSTik7XG4mIzQzO1x0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXG4mIzQzO1x0XHRcdFx0QklUKHBvcnQpLCBCSVQocG9ydCkpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjAwOCw2ICYjNDM7MjExOCw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdC8qIFNldCBtYXggbnVtYmVyIG9mIExBR3Mgc3VwcG9ydGVkICovXG4gXHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFFDQThLX05VTV9MQUdTO1xuIFxuJiM0MztcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjA0MCw2ICYjNDM7MjE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcWNhOGtfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2ZkYl9hZGRcdFx0PSBxY2E4a19wb3J0X2ZkYl9hZGQsXG4gXHQucG9ydF9mZGJfZGVsXHRcdD0gcWNhOGtfcG9ydF9mZGJfZGVsLFxuIFx0LnBvcnRfZmRiX2R1bXBcdFx0PSBxY2E4a19wb3J0X2ZkYl9kdW1wLFxuJiM0MztcdC5sYWdfZmRiX2FkZFx0XHQ9IHFjYThrX2xhZ19mZGJfYWRkLFxuJiM0MztcdC5sYWdfZmRiX2RlbFx0XHQ9IHFjYThrX2xhZ19mZGJfZGVsLFxuIFx0LnBvcnRfbWRiX2FkZFx0XHQ9IHFjYThrX3BvcnRfbWRiX2FkZCxcbiBcdC5wb3J0X21kYl9kZWxcdFx0PSBxY2E4a19wb3J0X21kYl9kZWwsXG4gXHQucG9ydF9taXJyb3JfYWRkXHQ9IHFjYThrX3BvcnRfbWlycm9yX2FkZCxcbkBAIC0yMDQ5LDggJiM0MzsyMTYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfdmxhbl9kZWxcdFx0PSBxY2E4a19wb3J0X3ZsYW5fZGVsLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0gcWNhOGtfcGh5bGlua19nZXRfY2FwcyxcbiBcdC5nZXRfcGh5X2ZsYWdzXHRcdD0gcWNhOGtfZ2V0X3BoeV9mbGFncyxcbi1cdC5wb3J0X2xhZ19qb2luXHRcdD0gcWNhOGtfcG9ydF9sYWdfam9pbixcbi1cdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlLFxuJiM0MztcdC5wb3J0X2xhZ19qb2luXHRcdD0gcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzLFxuJiM0MztcdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMsXG4mIzQzO1x0LnBvcnRfY2hhbmdlX2NvbmR1aXRcdD0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdCxcbiBcdC5jb25kdWl0X3N0YXRlX2NoYW5nZVx0PSBxY2E4a19jb25kdWl0X2NoYW5nZSxcbiBcdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0PSBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jXG5pbmRleCAxMzAwNWYxMGVkYjdkLi43M2UzNmY1ZmIzNTg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuQEAgLTMyMiw2ICYjNDM7MzIyLDM2IEBAIHN0YXRpYyBpbnQgcWNhOGtfZmRiX3NlYXJjaF9hbmRfZGVsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1OCBwb3J0X21hc2ssXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hYyxcbiYjNDM7XHRcdFx0XHQgICB1MTYgdmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjYThrX2ZkYiBmZGIgPSB7IDAgfTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cWNhOGtfZmRiX3dyaXRlKHByaXYsIHZpZCwgMCwgbWFjLCAwKTtcbiYjNDM7XHRyZXQgPSBxY2E4a19mZGJfYWNjZXNzKHByaXYsIFFDQThLX0ZEQl9TRUFSQ0gsIC0xKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsIFx1MDAyNmZkYik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIGRlbGliZXJhdGVseSBjb25maWd1cmVkIHN0YXRpYyBlbnRyaWVzLiAqL1xuJiM0MztcdGlmICghZmRiLmFnaW5nIHx8IGZkYi5hZ2luZyA9PSBRQ0E4S19BVFVfU1RBVFVTX1NUQVRJQykge1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfUFVSR0UsIC0xKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBxY2E4a192bGFuX2FjY2VzcyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdixcbiBcdFx0XHQgICAgIGVudW0gcWNhOGtfdmxhbl9jbWQgY21kLCB1MTYgdmlkKVxuIHtcbkBAIC02MDcsMTUgJiM0Mzs2MzcsNjAgQEAgdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXG4gXHRxY2E4a19wb3J0X2NvbmZpZ3VyZV9sZWFybmluZyhkcywgcG9ydCwgbGVhcm5pbmcpO1xuIH1cbiBcbiYjNDM7aW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuJiM0MztcdFx0XHQgICAgdTMyICpwb3J0X21hc2ssXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy1cdTAwM2Vkc3Q7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgaWQ7XG4mIzQzO1xuJiM0MztcdCpwb3J0X21hc2sgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5ldGlmX2lzX2xhZ19tYXN0ZXIoY29uZHVpdCkpIHtcbiYjNDM7XHRcdGRwID0gY29uZHVpdC1cdTAwM2Vkc2FfcHRyO1xuJiM0MztcdFx0aWYgKCFkcCB8fCBkcC1cdTAwM2VkcyAhPSBkcyB8fCAhZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7Q29uZHVpdCBpcyBub3QgYSBsb2NhbCBDUFUgcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQqcG9ydF9tYXNrID0gQklUKGRwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBkc2FfbGFnX2lkKGRzdCwgY29uZHVpdCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGlkO1xuJiM0MztcbiYjNDM7XHRkc2FfbGFnX2ZvcmVhY2hfcG9ydChkcCwgZHN0LCBkc2FfbGFnX2J5X2lkKGRzdCwgaWQpKVxuJiM0MztcdFx0aWYgKGRwLVx1MDAzZWRzID09IGRzIFx1MDAyNlx1MDAyNiBkc2FfcG9ydF9pc19jcHUoZHApKVxuJiM0MztcdFx0XHQqcG9ydF9tYXNrIHw9IEJJVChkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1xuJiM0MztcdGlmICghKnBvcnRfbWFzaykge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDb25kdWl0IExBRyBoYXMgbm8gbG9jYWwgQ1BVIHBvcnRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBxY2E4a191cGRhdGVfcG9ydF9tZW1iZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwb3J0LFxuIFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmlkZ2VfZGV2LFxuIFx0XHRcdFx0ICAgIGJvb2wgam9pbilcbiB7XG4gXHRib29sIGlzb2xhdGVkID0gISEocHJpdi1cdTAwM2Vwb3J0X2lzb2xhdGVkX21hcCBcdTAwMjYgQklUKHBvcnQpKSwgb3RoZXJfaXNvbGF0ZWQ7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQocHJpdi1cdTAwM2VkcywgcG9ydCksICpvdGhlcl9kcDtcbi1cdHUzMiBwb3J0X21hc2sgPSBCSVQoZHAtXHUwMDNlY3B1X2RwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHR1MzIgcG9ydF9tYXNrO1xuIFx0aW50IGksIHJldDtcbiBcbiYjNDM7XHRyZXQgPSBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhwcml2LVx1MDAzZWRzLCBkc2FfcG9ydF90b19jb25kdWl0KGRwKSxcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZwb3J0X21hc2ssIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFFDQThLX05VTV9QT1JUUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGkgPT0gcG9ydClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC04MjksNiAmIzQzOzkwNCwxNCBAQCBpbnQgcWNhOGtfcG9ydF9mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHR1MTYgcG9ydF9tYXNrID0gQklUKHBvcnQpO1xuIFxuJiM0MztcdC8qIFVua25vd24gdW5pY2FzdCBmbG9vZGluZyBkZWxpdmVycyBob3N0IHRyYWZmaWMgdG8gdGhlIGNvbmR1aXQuICovXG4mIzQzO1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcbiYjNDM7XHRcdGlmICghdmlkKVxuJiM0MztcdFx0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIHFjYThrX2ZkYl9wdXJnZV9keW5hbWljKHByaXYsIGFkZHIsIHZpZCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpO1xuIH1cbiBcbkBAIC04MzksNiAmIzQzOzkyMiw5IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdHUxNiBwb3J0X21hc2sgPSBCSVQocG9ydCk7XG4gXG4mIzQzO1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRpZiAoIXZpZClcbiBcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuIFxuQEAgLTg2OCw2ICYjNDM7OTU0LDc1IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCBxY2E4a19sYWdfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRzYV9sYWcgKmxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTggcG9ydF9tYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzLVx1MDAzZWRzdCwgbGFnKVxuJiM0MztcdFx0aWYgKGRwLVx1MDAzZWRzID09IGRzKVxuJiM0MztcdFx0XHRwb3J0X21hc2sgfD0gQklUKGRwLVx1MDAzZWluZGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBvcnRfbWFzaztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcWNhOGtfbGFnX2lzX2NwdShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzYV9sYWcgKmxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0Ym9vbCBoYXNfY3B1ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy1cdTAwM2Vkc3QsIGxhZykge1xuJiM0MztcdFx0aWYgKGRwLVx1MDAzZWRzICE9IGRzKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRzYV9wb3J0X2lzX2NwdShkcCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRoYXNfY3B1ID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBoYXNfY3B1O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4mIzQzO1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHR1OCBwb3J0X21hc2s7XG4mIzQzO1xuJiM0MztcdHBvcnRfbWFzayA9IHFjYThrX2xhZ19wb3J0X21hc2soZHMsIFx1MDAyNmxhZyk7XG4mIzQzO1xuJiM0MztcdGlmIChxY2E4a19sYWdfaXNfY3B1KGRzLCBcdTAwMjZsYWcpKSB7XG4mIzQzO1x0XHRpZiAoIXZpZClcbiYjNDM7XHRcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHFjYThrX3BvcnRfZmRiX2luc2VydChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBxY2E4a19sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZyxcbiYjNDM7XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHU4IHBvcnRfbWFzaztcbiYjNDM7XG4mIzQzO1x0aWYgKHFjYThrX2xhZ19pc19jcHUoZHMsIFx1MDAyNmxhZykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2aWQpXG4mIzQzO1x0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4mIzQzO1xuJiM0MztcdHBvcnRfbWFzayA9IHFjYThrX2xhZ19wb3J0X21hc2soZHMsIFx1MDAyNmxhZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBxY2E4a19mZGJfZGVsKHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiLFxuIFx0XHQgICAgICAgc3RydWN0IGRzYV9kYiBkYilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmggYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhcbmluZGV4IDk1NjMzODg5MzAzMjUuLjMzM2IzNDM4ODZkZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaFxuQEAgLTUyMyw2ICYjNDM7NTIzLDEwIEBAIGludCBxY2E4a19nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCk7XG4gaW50IHFjYThrX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSk7XG4gXG4gLyogQ29tbW9uIGJyaWRnZSBmdW5jdGlvbiAqL1xuJiM0MztpbnQgcWNhOGtfY29uZHVpdF9wb3J0X21hc2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4mIzQzO1x0XHRcdCAgICB1MzIgKnBvcnRfbWFzayxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpO1xuIGludCBxY2E4a19wb3J0X3ByZV9icmlkZ2VfZmxhZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBzd2l0Y2hkZXZfYnJwb3J0X2ZsYWdzIGZsYWdzLFxuQEAgLTU2MSw2ICYjNDM7NTY1LDEyIEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xuIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTtcbiYjNDM7aW50IHFjYThrX2xhZ19mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLFxuJiM0MztcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCxcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xuJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4mIzQzO1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYik7XG4gXG4gLyogQ29tbW9uIE1EQiBmdW5jdGlvbiAqL1xuIGludCBxY2E4a19wb3J0X21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgRFNBIHN3aXRjaCBkcml2ZXIgKHFjYThrKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDg2NWVmNDkyNjdhY2EyYTZhOWZmYjNkZmIyMTA4NmMwNmE4MWQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxNjoyMjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMKaW5kZXggNGM5Mjg5ODNiODYyMy4uNGFmOTJkNTFmMDQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMKQEAgLTEwODcsMjIgJiM0MzsxMDg3LDYgQEAgcWNhOGtfc2V0dXBfbWFjX3B3cl9zZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBxY2E4a19maW5kX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKLXsKLQlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwotCi0JLyogRmluZCB0aGUgY29ubmVjdGVkIGNwdSBwb3J0LiBWYWxpZCBwb3J0IGFyZSAwIG9yIDYgKi8KLQlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCAwKSkKLQkJcmV0dXJuIDA7Ci0KLQlkZXZfZGJnKHByaXYtJmd0O2RldiwgJiMzNDtwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2JiMzNDspOwotCi0JaWYgKGRzYV9pc19jcHVfcG9ydChkcywgNikpCi0JCXJldHVybiA2OwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIHN0YXRpYyBpbnQKIHFjYThrX3NldHVwX29mX3B3c19yZWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpCiB7CkBAIC0xNzU5LDYgJiM0MzsxNzQzLDEzOSBAQCBxY2E4a19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJcmV0dXJuIERTQV9UQUdfUFJPVE9fUUNBOwogfQogCiYjNDM7c3RhdGljIGludCBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCSAgICAgdTMyICp1c2VyX21lbWJlcnMsCiYjNDM7CQkJCQkgICAgIHUzMiAqY3B1X21lbWJlcnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3JlYWQocHJpdi0mZ3Q7cmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqdXNlcl9tZW1iZXJzID0gdmFsICZhbXA7IGRzYV9jcHVfcG9ydHMoZHMpOwomIzQzOwkqY3B1X21lbWJlcnMgPSAwOwomIzQzOwomIzQzOwlkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHsKJiM0MzsJCXJldCA9IHJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwKJiM0MzsJCQkJICBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9kcC0mZ3Q7aW5kZXgpLCAmYW1wO3ZhbCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAodmFsICZhbXA7IEJJVChwb3J0KSkKJiM0MzsJCQkqY3B1X21lbWJlcnMgfD0gQklUKGNwdV9kcC0mZ3Q7aW5kZXgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkJICAgICB1MzIgdXNlcl9tZW1iZXJzLAomIzQzOwkJCQkJICAgICB1MzIgY3B1X21lbWJlcnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtJmd0O3JlZ21hcCwKJiM0MzsJCQkJIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksCiYjNDM7CQkJCSBkc2FfY3B1X3BvcnRzKGRzKSwgdXNlcl9tZW1iZXJzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoY3B1X2RwLCBkcykgewomIzQzOwkJdTMyIG1lbWJlciA9IGNwdV9tZW1iZXJzICZhbXA7IEJJVChjcHVfZHAtJmd0O2luZGV4KSA/IEJJVChwb3J0KSA6IDA7CiYjNDM7CiYjNDM7CQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLAomIzQzOwkJCQkJIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLSZndDtpbmRleCksCiYjNDM7CQkJCQkgQklUKHBvcnQpLCBtZW1iZXIpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwl1MzIgY3B1X3BvcnRfbWFzaywgb2xkX2NwdV9tZW1iZXJzLCBvbGRfdXNlcl9tZW1iZXJzOwomIzQzOwlpbnQgcmVzdG9yZV9yZXQsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcWNhOGtfY29uZHVpdF9wb3J0X21hc2soZHMsIGNvbmR1aXQsICZhbXA7Y3B1X3BvcnRfbWFzaywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfZ2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgJmFtcDtvbGRfdXNlcl9tZW1iZXJzLAomIzQzOwkJCQkJCSZhbXA7b2xkX2NwdV9tZW1iZXJzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgY3B1X3BvcnRfbWFzaywKJiM0MzsJCQkJCQljcHVfcG9ydF9tYXNrKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmVzdG9yZV9yZXQgPSBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsCiYjNDM7CQkJCQkJCW9sZF91c2VyX21lbWJlcnMsCiYjNDM7CQkJCQkJCW9sZF9jcHVfbWVtYmVycyk7CiYjNDM7CWlmIChyZXN0b3JlX3JldCkKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgY29uZHVpdCBtZW1iZXJzaGlwIGZvciBwb3J0ICVkOiAlcGVcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIEVSUl9QVFIocmVzdG9yZV9yZXQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJCSAgIHN0cnVjdCBkc2FfbGFnIGxhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykgewomIzQzOwkJaWYgKGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApICE9IGxhZy5kZXYpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyZXQgPSBxY2E4a19wb3J0X2NoYW5nZV9jb25kdWl0KGRzLCBkcC0mZ3Q7aW5kZXgsIGxhZy5kZXYsIE5VTEwpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfbGFnX2pvaW5fd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZHNhX2xhZyBsYWcsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfbGFnX2pvaW4oZHMsIHBvcnQsIGxhZywgaW5mbywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKGRzLCBsYWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBkc2FfbGFnIGxhZykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfbGFnX2xlYXZlKGRzLCBwb3J0LCBsYWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoZHMsIGxhZyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIHFjYThrX2NvbmR1aXRfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsCiAJCSAgICAgYm9vbCBvcGVyYXRpb25hbCkKQEAgLTE4NDQsMTMgJiM0MzsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwogCXN0cnVjdCBkc2FfcG9ydCAqZHA7Ci0JaW50IGNwdV9wb3J0LCByZXQ7Ci0JdTMyIG1hc2s7CiYjNDM7CXUzMiBjcHVfcG9ydHMsIG1hc2s7CiYjNDM7CWludCByZXQ7CiAKLQljcHVfcG9ydCA9IHFjYThrX2ZpbmRfY3B1X3BvcnQoZHMpOwotCWlmIChjcHVfcG9ydCAmbHQ7IDApIHsKLQkJZGV2X2Vycihwcml2LSZndDtkZXYsICYjMzQ7Tm8gY3B1IHBvcnQgY29uZmlndXJlZCBpbiBib3RoIGNwdSBwb3J0MCBhbmQgcG9ydDYmIzM0Oyk7Ci0JCXJldHVybiBjcHVfcG9ydDsKJiM0MzsJY3B1X3BvcnRzID0gZHNhX2NwdV9wb3J0cyhkcyk7CiYjNDM7CWlmICghY3B1X3BvcnRzIHx8IGNwdV9wb3J0cyAmYW1wOyB+KEJJVCgwKSB8IEJJVCg2KSkpIHsKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O0NQVSBwb3J0cyBtdXN0IGJlIHBvcnQgMCBvciA2JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogUGFyc2UgQ1BVIHBvcnQgY29uZmlnIHRvIGJlIGxhdGVyIHVzZWQgaW4gcGh5X2xpbmsgbWFjX2NvbmZpZyAqLwpAQCAtMTkwMCw5ICYjNDM7MjAxNywxMCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAKIAkvKiBJbml0aWFsIHNldHVwIG9mIGFsbCBwb3J0cyAqLwogCWRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHsKLQkJLyogRGlzYWJsZSBmb3J3YXJkaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovCiYjNDM7CQkvKiBEaXNhYmxlIGZvcndhcmRpbmcgYW5kIGxlYXJuaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovCiAJCXJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGRwLSZndDtpbmRleCksCi0JCQkJUUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCAwKTsKJiM0MzsJCQkJUUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSIHwKJiM0MzsJCQkJUUNBOEtfUE9SVF9MT09LVVBfTEVBUk4sIDApOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC0xOTIyLDI4ICYjNDM7MjA0MCwyMCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCX0KIAl9CiAKLQkvKiBGb3J3YXJkIGFsbCB1bmtub3duIGZyYW1lcyB0byBDUFUgcG9ydCBmb3IgTGludXggcHJvY2Vzc2luZwotCSAqIE5vdGljZSB0aGF0IGluIG11bHRpLWNwdSBjb25maWcgb25seSBvbmUgcG9ydCBzaG91bGQgYmUgc2V0Ci0JICogZm9yIGlnbXAsIHVua25vd24sIG11bHRpY2FzdCBhbmQgYnJvYWRjYXN0IHBhY2tldAomIzQzOwkvKiBGb3J3YXJkIHVua25vd24gZnJhbWVzIHRvIGV2ZXJ5IENQVSBwb3J0LiBUaGUgaW5ncmVzcyBwb3J0IGxvb2t1cAomIzQzOwkgKiBtZW1iZXJzaGlwIHJlc3RyaWN0cyBlYWNoIGZyYW1lIHRvIGl0cyBhc3NpZ25lZCBDUFUgcG9ydC4KIAkgKi8KIAlyZXQgPSBxY2E4a193cml0ZShwcml2LCBRQ0E4S19SRUdfR0xPQkFMX0ZXX0NUUkwxLAotCQkJICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9JR01QX0RQX01BU0ssIEJJVChjcHVfcG9ydCkpIHwKLQkJCSAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfQkNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfAotCQkJICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8Ci0JCQkgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX1VDX0RQX01BU0ssIEJJVChjcHVfcG9ydCkpKTsKJiM0MzsJCQkgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgY3B1X3BvcnRzKSB8CiYjNDM7CQkJICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9CQ19EUF9NQVNLLCBjcHVfcG9ydHMpIHwKJiM0MzsJCQkgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX01DX0RQX01BU0ssIGNwdV9wb3J0cykgfAomIzQzOwkJCSAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgY3B1X3BvcnRzKSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIENQVSBwb3J0IGdldHMgY29ubmVjdGVkIHRvIGFsbCB1c2VyIHBvcnRzIG9mIHRoZSBzd2l0Y2ggKi8KLQlyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksCi0JCQlRQ0E4S19QT1JUX0xPT0tVUF9NRU1CRVIsIGRzYV91c2VyX3BvcnRzKGRzKSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFNldHVwIGNvbm5lY3Rpb24gYmV0d2VlbiBDUFUgcG9ydCAmYW1wOyB1c2VyIHBvcnRzCi0JICogSW5kaXZpZHVhbCB1c2VyIHBvcnRzIGdldCBjb25uZWN0ZWQgdG8gQ1BVIHBvcnQgb25seQotCSAqLwomIzQzOwkvKiBDb25uZWN0IGVhY2ggdXNlciBwb3J0IGJpZGlyZWN0aW9uYWxseSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuICovCiAJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7CiYjNDM7CQl1OCBjcHVfcG9ydCA9IGRwLSZndDtjcHVfZHAtJmd0O2luZGV4OwogCQl1OCBwb3J0ID0gZHAtJmd0O2luZGV4OwogCiAJCXJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLApAQCAtMTk1Miw4ICYjNDM7MjA2Miw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0ID0gcmVnbWFwX2NsZWFyX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLAotCQkJCQlRQ0E4S19QT1JUX0xPT0tVUF9MRUFSTik7CiYjNDM7CQlyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksCiYjNDM7CQkJCUJJVChwb3J0KSwgQklUKHBvcnQpKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTIwMDgsNiAmIzQzOzIxMTgsOCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJLyogU2V0IG1heCBudW1iZXIgb2YgTEFHcyBzdXBwb3J0ZWQgKi8KIAlkcy0mZ3Q7bnVtX2xhZ19pZHMgPSBRQ0E4S19OVU1fTEFHUzsKIAomIzQzOwlkcy0mZ3Q7YXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQwLDYgJiM0MzsyMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0gewogCS5wb3J0X2ZkYl9hZGQJCT0gcWNhOGtfcG9ydF9mZGJfYWRkLAogCS5wb3J0X2ZkYl9kZWwJCT0gcWNhOGtfcG9ydF9mZGJfZGVsLAogCS5wb3J0X2ZkYl9kdW1wCQk9IHFjYThrX3BvcnRfZmRiX2R1bXAsCiYjNDM7CS5sYWdfZmRiX2FkZAkJPSBxY2E4a19sYWdfZmRiX2FkZCwKJiM0MzsJLmxhZ19mZGJfZGVsCQk9IHFjYThrX2xhZ19mZGJfZGVsLAogCS5wb3J0X21kYl9hZGQJCT0gcWNhOGtfcG9ydF9tZGJfYWRkLAogCS5wb3J0X21kYl9kZWwJCT0gcWNhOGtfcG9ydF9tZGJfZGVsLAogCS5wb3J0X21pcnJvcl9hZGQJPSBxY2E4a19wb3J0X21pcnJvcl9hZGQsCkBAIC0yMDQ5LDggJiM0MzsyMTYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0gewogCS5wb3J0X3ZsYW5fZGVsCQk9IHFjYThrX3BvcnRfdmxhbl9kZWwsCiAJLnBoeWxpbmtfZ2V0X2NhcHMJPSBxY2E4a19waHlsaW5rX2dldF9jYXBzLAogCS5nZXRfcGh5X2ZsYWdzCQk9IHFjYThrX2dldF9waHlfZmxhZ3MsCi0JLnBvcnRfbGFnX2pvaW4JCT0gcWNhOGtfcG9ydF9sYWdfam9pbiwKLQkucG9ydF9sYWdfbGVhdmUJCT0gcWNhOGtfcG9ydF9sYWdfbGVhdmUsCiYjNDM7CS5wb3J0X2xhZ19qb2luCQk9IHFjYThrX3BvcnRfbGFnX2pvaW5fd2l0aF9jb25kdWl0cywKJiM0MzsJLnBvcnRfbGFnX2xlYXZlCQk9IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMsCiYjNDM7CS5wb3J0X2NoYW5nZV9jb25kdWl0CT0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdCwKIAkuY29uZHVpdF9zdGF0ZV9jaGFuZ2UJPSBxY2E4a19jb25kdWl0X2NoYW5nZSwKIAkuY29ubmVjdF90YWdfcHJvdG9jb2wJPSBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYwppbmRleCAxMzAwNWYxMGVkYjdkLi43M2UzNmY1ZmIzNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMKQEAgLTMyMiw2ICYjNDM7MzIyLDM2IEBAIHN0YXRpYyBpbnQgcWNhOGtfZmRiX3NlYXJjaF9hbmRfZGVsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1OCBwb3J0X21hc2ssCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcWNhOGtfZmRiX3B1cmdlX2R5bmFtaWMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGNvbnN0IHU4ICptYWMsCiYjNDM7CQkJCSAgIHUxNiB2aWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfZmRiIGZkYiA9IHsgMCB9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX211dGV4KTsKJiM0MzsKJiM0MzsJcWNhOGtfZmRiX3dyaXRlKHByaXYsIHZpZCwgMCwgbWFjLCAwKTsKJiM0MzsJcmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfU0VBUkNILCAtMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsICZhbXA7ZmRiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogS2VlcCBkZWxpYmVyYXRlbHkgY29uZmlndXJlZCBzdGF0aWMgZW50cmllcy4gKi8KJiM0MzsJaWYgKCFmZGIuYWdpbmcgfHwgZmRiLmFnaW5nID09IFFDQThLX0FUVV9TVEFUVVNfU1RBVElDKSB7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfUFVSR0UsIC0xKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19tdXRleCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBxY2E4a192bGFuX2FjY2VzcyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwKIAkJCSAgICAgZW51bSBxY2E4a192bGFuX2NtZCBjbWQsIHUxNiB2aWQpCiB7CkBAIC02MDcsMTUgJiM0Mzs2MzcsNjAgQEAgdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpCiAJcWNhOGtfcG9ydF9jb25maWd1cmVfbGVhcm5pbmcoZHMsIHBvcnQsIGxlYXJuaW5nKTsKIH0KIAomIzQzO2ludCBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LAomIzQzOwkJCSAgICB1MzIgKnBvcnRfbWFzaywKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtJmd0O2RzdDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IGlkOwomIzQzOwomIzQzOwkqcG9ydF9tYXNrID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKGNvbmR1aXQpKSB7CiYjNDM7CQlkcCA9IGNvbmR1aXQtJmd0O2RzYV9wdHI7CiYjNDM7CQlpZiAoIWRwIHx8IGRwLSZndDtkcyAhPSBkcyB8fCAhZHNhX3BvcnRfaXNfY3B1KGRwKSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O0NvbmR1aXQgaXMgbm90IGEgbG9jYWwgQ1BVIHBvcnQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwomIzQzOwkJKnBvcnRfbWFzayA9IEJJVChkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBkc2FfbGFnX2lkKGRzdCwgY29uZHVpdCk7CiYjNDM7CWlmIChpZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gaWQ7CiYjNDM7CiYjNDM7CWRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkc3QsIGRzYV9sYWdfYnlfaWQoZHN0LCBpZCkpCiYjNDM7CQlpZiAoZHAtJmd0O2RzID09IGRzICZhbXA7JmFtcDsgZHNhX3BvcnRfaXNfY3B1KGRwKSkKJiM0MzsJCQkqcG9ydF9tYXNrIHw9IEJJVChkcC0mZ3Q7aW5kZXgpOwomIzQzOwomIzQzOwlpZiAoISpwb3J0X21hc2spIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7Q29uZHVpdCBMQUcgaGFzIG5vIGxvY2FsIENQVSBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcWNhOGtfdXBkYXRlX3BvcnRfbWVtYmVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgcG9ydCwKIAkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXYsCiAJCQkJICAgIGJvb2wgam9pbikKIHsKIAlib29sIGlzb2xhdGVkID0gISEocHJpdi0mZ3Q7cG9ydF9pc29sYXRlZF9tYXAgJmFtcDsgQklUKHBvcnQpKSwgb3RoZXJfaXNvbGF0ZWQ7CiAJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KHByaXYtJmd0O2RzLCBwb3J0KSwgKm90aGVyX2RwOwotCXUzMiBwb3J0X21hc2sgPSBCSVQoZHAtJmd0O2NwdV9kcC0mZ3Q7aW5kZXgpOwomIzQzOwl1MzIgcG9ydF9tYXNrOwogCWludCBpLCByZXQ7CiAKJiM0MzsJcmV0ID0gcWNhOGtfY29uZHVpdF9wb3J0X21hc2socHJpdi0mZ3Q7ZHMsIGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApLAomIzQzOwkJCQkgICAgICAmYW1wO3BvcnRfbWFzaywgTlVMTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBRQ0E4S19OVU1fUE9SVFM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpID09IHBvcnQpCiAJCQljb250aW51ZTsKQEAgLTgyOSw2ICYjNDM7OTA0LDE0IEBAIGludCBxY2E4a19wb3J0X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwogCXUxNiBwb3J0X21hc2sgPSBCSVQocG9ydCk7CiAKJiM0MzsJLyogVW5rbm93biB1bmljYXN0IGZsb29kaW5nIGRlbGl2ZXJzIGhvc3QgdHJhZmZpYyB0byB0aGUgY29uZHVpdC4gKi8KJiM0MzsJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHsKJiM0MzsJCWlmICghdmlkKQomIzQzOwkJCXZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjsKJiM0MzsKJiM0MzsJCXJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHFjYThrX3BvcnRfZmRiX2luc2VydChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7CiB9CiAKQEAgLTgzOSw2ICYjNDM7OTIyLDkgQEAgaW50IHFjYThrX3BvcnRfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCXN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiAJdTE2IHBvcnRfbWFzayA9IEJJVChwb3J0KTsKIAomIzQzOwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWlmICghdmlkKQogCQl2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7CiAKQEAgLTg2OCw2ICYjNDM7OTU0LDc1IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdTggcWNhOGtfbGFnX3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGRzYV9sYWcgKmxhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXU4IHBvcnRfbWFzayA9IDA7CiYjNDM7CiYjNDM7CWRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy0mZ3Q7ZHN0LCBsYWcpCiYjNDM7CQlpZiAoZHAtJmd0O2RzID09IGRzKQomIzQzOwkJCXBvcnRfbWFzayB8PSBCSVQoZHAtJmd0O2luZGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBvcnRfbWFzazsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcWNhOGtfbGFnX2lzX2NwdShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgZHNhX2xhZyAqbGFnKQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJYm9vbCBoYXNfY3B1ID0gZmFsc2U7CiYjNDM7CiYjNDM7CWRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy0mZ3Q7ZHN0LCBsYWcpIHsKJiM0MzsJCWlmIChkcC0mZ3Q7ZHMgIT0gZHMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWRzYV9wb3J0X2lzX2NwdShkcCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJaGFzX2NwdSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGhhc19jcHU7CiYjNDM7fQomIzQzOwomIzQzO2ludCBxY2E4a19sYWdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZywKJiM0MzsJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsCiYjNDM7CQkgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKQomIzQzO3sKJiM0MzsJc3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJdTggcG9ydF9tYXNrOwomIzQzOwomIzQzOwlwb3J0X21hc2sgPSBxY2E4a19sYWdfcG9ydF9tYXNrKGRzLCAmYW1wO2xhZyk7CiYjNDM7CiYjNDM7CWlmIChxY2E4a19sYWdfaXNfY3B1KGRzLCAmYW1wO2xhZykpIHsKJiM0MzsJCWlmICghdmlkKQomIzQzOwkJCXZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjsKJiM0MzsKJiM0MzsJCXJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsCiYjNDM7CQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLAomIzQzOwkJICAgICAgc3RydWN0IGRzYV9kYiBkYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CXU4IHBvcnRfbWFzazsKJiM0MzsKJiM0MzsJaWYgKHFjYThrX2xhZ19pc19jcHUoZHMsICZhbXA7bGFnKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIXZpZCkKJiM0MzsJCXZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjsKJiM0MzsKJiM0MzsJcG9ydF9tYXNrID0gcWNhOGtfbGFnX3BvcnRfbWFzayhkcywgJmFtcDtsYWcpOwomIzQzOwomIzQzOwlyZXR1cm4gcWNhOGtfZmRiX2RlbChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7CiYjNDM7fQomIzQzOwogaW50IHFjYThrX3BvcnRfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYiwKIAkJICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmggYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmgKaW5kZXggOTU2MzM4ODkzMDMyNS4uMzMzYjM0Mzg4NmRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaApAQCAtNTIzLDYgJiM0Mzs1MjMsMTAgQEAgaW50IHFjYThrX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KTsKIGludCBxY2E4a19zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZWUpOwogCiAvKiBDb21tb24gYnJpZGdlIGZ1bmN0aW9uICovCiYjNDM7aW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsCiYjNDM7CQkJICAgIHUzMiAqcG9ydF9tYXNrLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpOwogaW50IHFjYThrX3BvcnRfcHJlX2JyaWRnZV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJCXN0cnVjdCBzd2l0Y2hkZXZfYnJwb3J0X2ZsYWdzIGZsYWdzLApAQCAtNTYxLDYgJiM0Mzs1NjUsMTIgQEAgaW50IHFjYThrX3BvcnRfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgICAgc3RydWN0IGRzYV9kYiBkYik7CiBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTsKJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsCiYjNDM7CQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLAomIzQzOwkJICAgICAgc3RydWN0IGRzYV9kYiBkYik7CiYjNDM7aW50IHFjYThrX2xhZ19mZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLAomIzQzOwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCwKJiM0MzsJCSAgICAgIHN0cnVjdCBkc2FfZGIgZGIpOwogCiAvKiBDb21tb24gTURCIGZ1bmN0aW9uICovCiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBxY2E4ayBEU0EgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYHFjYThrYCBEU0EgZHJpdmVyLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IG9uZSwgYWRkaW5nIG11bHRpLUNQVSBwb3J0IHN1cHBvcnQgYW5kIExBRyBGREIgb3BlcmF0aW9ucywgYW1vbmcgb3RoZXIgdGhpbmdzLiBJdCB0b3VjaGVzIGBxY2E4ay04eHh4LmNgLCBgcWNhOGstY29tbW9uLmNgLCBhbmQgdGhlIGhlYWRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERTQSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBoYXJkd2FyZS1kZXBlbmRlbnQuIFRoZXkgdHlwaWNhbGx5IHJlbHkgb24gYSBwaHlzaWNhbCBFdGhlcm5ldCBzd2l0Y2ggY2hpcCBjb25uZWN0ZWQgdmlhIE1ESU8gb3IgU1BJLCB0aGF0IHNvcnQgb2YgdGhpbmcuCgpIbW0sIGNhbiBJIGluc3RhbnRpYXRlIGEgRFNBIGRyaXZlciBsaWtlIGBxY2E4a2AgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cyBpbiBRRU1VLCBvciBldmVuIHdpdGggc29tZSBzb3J0IG9mIGR1bW15IGRldmljZT8gVGhpcyBpcyB1c3VhbGx5IGhvdyB0aGV5IGNvbWUgdXAgLSBJIG1lYW4sIGBxY2E4a2AgaXMgKnNwZWNpZmljYWxseSogZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBRQ0E4SyBlbXVsYXRpb24gaW4gUUVNVSwgb3IgYXQgbGVhc3QgYSBmdXp6aW5nIHRhcmdldC4KCldhaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgZW11bGF0ZSAqc3BlY2lmaWMqIERTQSBzd2l0Y2ggY2hpcHMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgbW9yZSBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSB0aGVtLCBvciBpZiBpdCYjMzk7cyBhIHNvZnR3YXJlIHN3aXRjaC4gSSYjMzk7dmUgYmVlbiB0aHJvdWdoIHRoaXMgYmVmb3JlLCBidXQgZG9lcyBzeXprYWxsZXIgaGF2ZSAqYW55KiBidWlsdC1pbiBzdXBwb3J0IGZvciBpbmplY3RpbmcgZGV2aWNlIHRyZWUgbm9kZXMgb3IgdXNpbmcgbmV0bGluayB0byBjb25maWd1cmUgYSBEU0Egc2V0dXA/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gRFNBIHN3aXRjaGVzIGFyZSB1c3VhbGx5IGRlZmluZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvciBwbGF0Zm9ybSBkYXRhLgoKT2theSwgSSYjMzk7bSBnZXR0aW5nIGJhY2sgdG8gc3l6a2FsbGVyJiMzOTtzIGxpbWl0cy4gSSBrbm93IGl0IGNhbiB1c2UgYHN5el9nZW5ldGxpbmtgIGFuZCBvdGhlciBuZXR3b3JrIGZ1enppbmcgdGVjaG5pcXVlcywgYnV0IHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMsIHdpdGhvdXQgcHJvcGVyIFFFTVUgZW11bGF0aW9uLCBhcmUgZ2VuZXJhbGx5IHVucmVhY2hhYmxlLiBNeSBxdWVzdGlvbiByZW1haW5zOiBjYW4gSSBwcm9iZSBgcWNhOGtgIGluc2lkZSBRRU1VPyBMZXQmIzM5O3MgZ28gc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSBmb3IgYHFjYThrYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY2E4ayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxOTUxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX05FVF9EU0FfQVI5MzMxKVx0JiM0Mzs9IGFyOTMzMS5vXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX05FVF9EU0FfUUNBOEspXHQmIzQzOz0gcWNhOGsub1xuZHJpdmVycy9uZXQvZHNhL3FjYS9NYWtlZmlsZTo0OnFjYThrLXkgXHRcdFx0JiM0Mzs9IHFjYThrLWNvbW1vbi5vIHFjYThrLTh4eHgub1xuZHJpdmVycy9uZXQvZHNhL3FjYS9NYWtlZmlsZS01LWlmZGVmIENPTkZJR19ORVRfRFNBX1FDQThLX0xFRFNfU1VQUE9SVFxuZHJpdmVycy9uZXQvZHNhL3FjYS9NYWtlZmlsZTo2OnFjYThrLXlcdFx0XHRcdCYjNDM7PSBxY2E4ay1sZWRzLm9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGUtNy1lbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIzLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjQ6I2luY2x1ZGUgXCYjMzQ7cWNhOGsuaFwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjU6I2luY2x1ZGUgXCYjMzQ7cWNhOGtfbGVkcy5oXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yNi1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTI3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyODpxY2E4a19zcGxpdF9hZGRyKHUzMiByZWdhZGRyLCB1MTYgKnIxLCB1MTYgKnIyLCB1MTYgKnBhZ2UpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDE6cWNhOGtfbWlpX3dyaXRlX2xvKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiB2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDktXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoXHUwMDI2YnVzLVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUwOlx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSBxY2E4ayAzMmJpdCBsbyByZWdpc3RlclxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NjpxY2E4a19taWlfd3JpdGVfaGkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02NC1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZidXMtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjU6XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHFjYThrIDMyYml0IGhpIHJlZ2lzdGVyXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTcwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjcxOnFjYThrX21paV9yZWFkX2xvKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiAqdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzLVx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZidXMtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODQ6XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIHFjYThrIDMyYml0IGxvIHJlZ2lzdGVyXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg1LVx0KnZhbCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTE6cWNhOGtfbWlpX3JlYWRfaGkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyICp2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTAzLVx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZidXMtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTA0Olx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcmVhZCBxY2E4ayAzMmJpdCBoaSByZWdpc3RlclxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDUtXHQqdmFsID0gMDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTExOnFjYThrX21paV9yZWFkMzIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyICp2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExNy1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjExODpcdHJldCA9IHFjYThrX21paV9yZWFkX2xvKGJ1cywgcGh5X2lkLCByZWdudW0sIFx1MDAyNmxvKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExOS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTIxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTIyOlx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfaGkoYnVzLCBwaHlfaWQsIHJlZ251bSAmIzQzOyAxLCBcdTAwMjZoaSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjMtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEzMj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTMzOnFjYThrX21paV93cml0ZTMyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiB2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzQte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1Olx0aWYgKHFjYThrX21paV93cml0ZV9sbyhidXMsIHBoeV9pZCwgcmVnbnVtLCB2YWwpIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2LVx0XHRyZXR1cm47XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzctXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzg6XHRxY2E4a19taWlfd3JpdGVfaGkoYnVzLCBwaHlfaWQsIHJlZ251bSAmIzQzOyAxLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xNDE9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTQyOnFjYThrX3NldF9wYWdlKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1MTYgcGFnZSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE0My17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTUzLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKFx1MDAyNmJ1cy1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNTQ6XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHNldCBxY2E4ayBwYWdlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE1NS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNjItXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjM6c3RhdGljIHZvaWQgcWNhOGtfcndfcmVnX2Fja19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE2NC17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjU6XHRzdHJ1Y3QgcWNhOGtfbWdtdF9ldGhfZGF0YSAqbWdtdF9ldGhfZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE2NjpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE2Ny1cdHN0cnVjdCBxY2FfbWdtdF9ldGhoZHIgKm1nbXRfZXRoaGRyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxNy1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIxODpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFjYThrX2FsbG9jX21kaW9faGVhZGVyKGVudW0gbWRpb19jbWQgY21kLCB1MzIgcmVnLCB1MzIgKnZhbCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxOS1cdFx0XHRcdFx0ICAgICAgIGludCBwcmlvcml0eSwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMDEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMDI6c3RhdGljIHZvaWQgcWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzZXFfbnVtKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzAzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTI6c3RhdGljIGludCBxY2E4a19yZWFkX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzE0Olx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcdTAwMjZwcml2LVx1MDAzZW1nbXRfZXRoX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTUtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTMxOC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjMxOTpcdHNrYiA9IHFjYThrX2FsbG9jX21kaW9faGVhZGVyKE1ESU9fUkVBRCwgcmVnLCBOVUxMLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzIwLVx0XHRcdFx0ICAgICAgUUNBOEtfRVRIRVJORVRfTURJT19QUklPUklUWSwgbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMzgtXHRtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMzk6XHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc2tiLCBtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNDAtXHRtZ210X2V0aF9kYXRhLVx1MDAzZWFjayA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTM2My1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjM2NDpzdGF0aWMgaW50IHFjYThrX3dyaXRlX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNjUte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzY2Olx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcdTAwMjZwcml2LVx1MDAzZW1nbXRfZXRoX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNjctXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTM3MC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjM3MTpcdHNrYiA9IHFjYThrX2FsbG9jX21kaW9faGVhZGVyKE1ESU9fV1JJVEUsIHJlZywgdmFsLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzcyLVx0XHRcdFx0ICAgICAgUUNBOEtfRVRIRVJORVRfTURJT19QUklPUklUWSwgbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zOTAtXHRtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozOTE6XHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc2tiLCBtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zOTItXHRtZ210X2V0aF9kYXRhLVx1MDAzZWFjayA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQxMj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MTM6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZV92YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MTQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQxNy1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQxODpcdHJldCA9IHFjYThrX3JlYWRfZXRoKHByaXYsIHJlZywgXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQyNC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQyNTpcdHJldHVybiBxY2E4a193cml0ZV9ldGgocHJpdiwgcmVnLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQyNi19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDI4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQyOTpxY2E4a19yZWFkX21paShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCAqdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDMwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MzQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MzU6XHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQzNi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MzgtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0Mzk6XHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ0MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDQyLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDQzOlx0cmV0ID0gcWNhOGtfbWlpX3JlYWQzMihidXMsIDB4MTAgfCByMiwgcjEsIHZhbCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NDQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDUwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ1MTpxY2E4a193cml0ZV9taWkoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDUyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NTYtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NTc6XHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ1OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjAtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NjE6XHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ2Mi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDY0LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDY1Olx0cWNhOGtfbWlpX3dyaXRlMzIoYnVzLCAweDEwIHwgcjIsIHIxLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDY2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQ3Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NzM6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX21paShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdWludDMyX3QgcmVnLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDc0LVx0XHRcdCAgICAgdWludDMyX3QgbWFzaywgdWludDMyX3Qgd3JpdGVfdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4MC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ4MTpcdHFjYThrX3NwbGl0X2FkZHIocmVnLCBcdTAwMjZyMSwgXHUwMDI2cjIsIFx1MDAyNnBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDgyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4NC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ4NTpcdHJldCA9IHFjYThrX3NldF9wYWdlKHByaXYsIHBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDg2LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00ODgtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0ODk6XHRyZXQgPSBxY2E4a19taWlfcmVhZDMyKGJ1cywgMHgxMCB8IHIyLCByMSwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDk0LVx0dmFsIHw9IHdyaXRlX3ZhbDtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ5NTpcdHFjYThrX21paV93cml0ZTMyKGJ1cywgMHgxMCB8IHIyLCByMSwgdmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01MDM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTA0OnFjYThrX2J1bGtfcmVhZCh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfbGVuLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA1LVx0XHR2b2lkICp2YWxfYnVmLCBzaXplX3QgdmFsX2xlbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MDctXHRpbnQgaSwgY291bnQgPSB2YWxfbGVuIC8gc2l6ZW9mKHUzMiksIHJldDtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUwODpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gY3R4O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA5LVx0dTMyIHJlZyA9ICoodTE2ICopcmVnX2J1Zjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTEtXHRpZiAocHJpdi1cdTAwM2VtZ210X2NvbmR1aXQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1MTI6XHQgICAgIXFjYThrX3JlYWRfZXRoKHByaXYsIHJlZywgdmFsX2J1ZiwgdmFsX2xlbikpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTMtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUxNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOywgcmVnICYjNDM7PSBzaXplb2YodTMyKSkge1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTE3Olx0XHRyZXQgPSBxY2E4a19yZWFkX21paShwcml2LCByZWcsIHZhbF9idWYgJiM0MzsgaSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTgtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTI1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUyNjpxY2E4a19idWxrX2dhdGhlcl93cml0ZSh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfbGVuLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTI3LVx0XHRcdGNvbnN0IHZvaWQgKnZhbF9idWYsIHNpemVfdCB2YWxfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUyOS1cdGludCBpLCBjb3VudCA9IHZhbF9sZW4gLyBzaXplb2YodTMyKSwgcmV0O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTMwOlx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBjdHg7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MzEtXHR1MzIgcmVnID0gKih1MTYgKilyZWdfYnVmO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUzNC1cdGlmIChwcml2LVx1MDAzZW1nbXRfY29uZHVpdCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUzNTpcdCAgICAhcWNhOGtfd3JpdGVfZXRoKHByaXYsIHJlZywgdmFsLCB2YWxfbGVuKSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUzNi1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTQxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7LCByZWcgJiM0Mzs9IHNpemVvZih1MzIpLCB2YWwmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NDI6XHRcdHJldCA9IHFjYThrX3dyaXRlX21paShwcml2LCByZWcsICp2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTQzLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTU1MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTE6cWNhOGtfYnVsa193cml0ZSh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBieXRlcylcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU1Mi17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTM6XHRyZXR1cm4gcWNhOGtfYnVsa19nYXRoZXJfd3JpdGUoY3R4LCBkYXRhLCBzaXplb2YodTE2KSwgZGF0YSAmIzQzOyBzaXplb2YodTE2KSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU1NC1cdFx0XHRcdCAgICAgICBieXRlcyAtIHNpemVvZih1MTYpKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01NTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTU4OnFjYThrX3JlZ21hcF91cGRhdGVfYml0cyh2b2lkICpjdHgsIHVpbnQzMl90IHJlZywgdWludDMyX3QgbWFzaywgdWludDMyX3Qgd3JpdGVfdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTU5LXtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU2MDpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gY3R4O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTYxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTYyOlx0aWYgKCFxY2E4a19yZWdtYXBfdXBkYXRlX2JpdHNfZXRoKHByaXYsIHJlZywgbWFzaywgd3JpdGVfdmFsKSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU2My1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NjU6XHRyZXR1cm4gcWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX21paShwcml2LCByZWcsIG1hc2ssIHdyaXRlX3ZhbCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjYtfVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTY3LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBxY2E4a19yZWdtYXBfY29uZmlnID0ge1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTY5LVx0LnJlZ19iaXRzID0gMTYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTcyLVx0Lm1heF9yZWdpc3RlciA9IDB4MTZhYywgLyogZW5kIE1JQiAtIFBvcnQ2IHJhbmdlICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzM6XHQucmVhZCA9IHFjYThrX2J1bGtfcmVhZCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU3NDpcdC53cml0ZSA9IHFjYThrX2J1bGtfd3JpdGUsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzU6XHQucmVnX3VwZGF0ZV9iaXRzID0gcWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTc2Olx0LnJkX3RhYmxlID0gXHUwMDI2cWNhOGtfcmVhZGFibGVfdGFibGUsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1Nzc6XHQuZGlzYWJsZV9sb2NraW5nID0gdHJ1ZSwgLyogTG9ja2luZyBpcyBoYW5kbGVkIGJ5IHFjYThrIHJlYWQvd3JpdGUgKi9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU3OC1cdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwgLyogRXhwbGljaXRseSBkaXNhYmxlIENBQ0hFICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTg2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU4NzpxY2E4a19waHlfZXRoX2J1c3lfd2FpdChzdHJ1Y3QgcWNhOGtfbWdtdF9ldGhfZGF0YSAqbWdtdF9ldGhfZGF0YSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU4OC1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqcmVhZF9za2IsIHUzMiAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYwMC1cdG1nbXRfZXRoX2RhdGEtXHUwMDNlc2VxJiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjYwMTpcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShza2IsIG1nbXRfZXRoX2RhdGEtXHUwMDNlc2VxKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYwMi1cdG1nbXRfZXRoX2RhdGEtXHUwMDNlYWNrID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NjIyPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjYyMzpxY2E4a19waHlfZXRoX2NvbW1hbmQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGJvb2wgcmVhZCwgaW50IHBoeSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyNC1cdFx0ICAgICAgaW50IHJlZ251bSwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjI2LVx0c3RydWN0IHNrX2J1ZmYgKndyaXRlX3NrYiwgKmNsZWFyX3NrYiwgKnJlYWRfc2tiO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjI3Olx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02MjgtXHR1MzIgd3JpdGVfdmFsLCBjbGVhcl92YWwgPSAwLCB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjQ5LVx0LyogUHJlYWxsb2MgYWxsIHRoZSBuZWVkZWQgc2tiIGJlZm9yZSB0aGUgbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjUwOlx0d3JpdGVfc2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19XUklURSwgUUNBOEtfTURJT19NQVNURVJfQ1RSTCwgXHUwMDI2d3JpdGVfdmFsLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjUxLVx0XHRcdFx0XHQgICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2Yod3JpdGVfdmFsKSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjU0LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjU1Olx0Y2xlYXJfc2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19XUklURSwgUUNBOEtfTURJT19NQVNURVJfQ1RSTCwgXHUwMDI2Y2xlYXJfdmFsLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjU2LVx0XHRcdFx0XHQgICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2YoY2xlYXJfdmFsKSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjYxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjYyOlx0cmVhZF9za2IgPSBxY2E4a19hbGxvY19tZGlvX2hlYWRlcihNRElPX1JFQUQsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsIFx1MDAyNmNsZWFyX3ZhbCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY2My1cdFx0XHRcdFx0ICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2YoY2xlYXJfdmFsKSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzAyLVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzAzOlx0cWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKHdyaXRlX3NrYiwgbWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzA0LVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VhY2sgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03MjQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3MjU6XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChxY2E4a19waHlfZXRoX2J1c3lfd2FpdCwgcmV0MSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTcyNi1cdFx0XHRcdCEodmFsIFx1MDAyNiBRQ0E4S19NRElPX01BU1RFUl9CVVNZKSwgMCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03MzktXHRcdG1nbXRfZXRoX2RhdGEtXHUwMDNlc2VxJiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjc0MDpcdFx0cWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKHJlYWRfc2tiLCBtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03NDEtXHRcdG1nbXRfZXRoX2RhdGEtXHUwMDNlYWNrID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzY4LVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzY5Olx0cWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKGNsZWFyX3NrYiwgbWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzcwLVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VhY2sgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz03OTM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6Nzk0OnFjYThrX21kaW9fYnVzeV93YWl0KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiByZWcsIHUzMiBtYXNrKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzk1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03OTktXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MDA6XHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgwMS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgwMjpcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHFjYThrX21paV9yZWFkX2hpLCByZXQxLCAhKHZhbCBcdTAwMjYgbWFzayksIDAsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDMtXHRcdFx0XHRRQ0E4S19CVVNZX1dBSVRfVElNRU9VVCAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgwNS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgwNjpcdC8qIENoZWNrIGlmIHFjYThrX3JlYWQgaGFzIGZhaWxlZCBmb3IgYSBkaWZmZXJlbnQgcmVhc29uXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDctXHQgKiBiZWZvcmUgcmV0dXJudGluZyAtRVRJTUVET1VUXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9ODE1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgxNjpxY2E4a19tZGlvX3dyaXRlKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgcGh5LCBpbnQgcmVnbnVtLCB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODMwLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODMxOlx0cWNhOGtfc3BsaXRfYWRkcihRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcdTAwMjZyMSwgXHUwMDI2cjIsIFx1MDAyNnBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODMyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzNC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgzNTpcdHJldCA9IHFjYThrX3NldF9wYWdlKHByaXYsIHBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODM2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MzgtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4Mzk6XHRxY2E4a19taWlfd3JpdGUzMihidXMsIDB4MTAgfCByMiwgcjEsIHZhbCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDAtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NDE6XHRyZXQgPSBxY2E4a19tZGlvX2J1c3lfd2FpdChidXMsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDItXHRcdFx0XHQgICBRQ0E4S19NRElPX01BU1RFUl9CVVNZKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDUtXHQvKiBldmVuIGlmIHRoZSBidXN5X3dhaXQgdGltZW91dHMgdHJ5IHRvIGNsZWFyIHRoZSBNQVNURVJfRU4gKi9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg0NjpcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgJiM0MzsgMSwgMCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDctXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9ODUzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg1NDpxY2E4a19tZGlvX3JlYWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwaHksIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NTUte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2Ny1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg2ODpcdHFjYThrX3NwbGl0X2FkZHIoUUNBOEtfTURJT19NQVNURVJfQ1RSTCwgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NzEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NzI6XHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODc1LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODc2Olx0cWNhOGtfbWlpX3dyaXRlX2hpKGJ1cywgMHgxMCB8IHIyLCByMSAmIzQzOyAxLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODc3LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODc4Olx0cmV0ID0gcWNhOGtfbWRpb19idXN5X3dhaXQoYnVzLCBRQ0E4S19NRElPX01BU1RFUl9DVFJMLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODc5LVx0XHRcdFx0ICAgUUNBOEtfTURJT19NQVNURVJfQlVTWSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODgyLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODgzOlx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfbG8oYnVzLCAweDEwIHwgcjIsIHIxLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODg0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg4Ni1cdC8qIGV2ZW4gaWYgdGhlIGJ1c3lfd2FpdCB0aW1lb3V0cyB0cnkgdG8gY2xlYXIgdGhlIE1BU1RFUl9FTiAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODg3Olx0cWNhOGtfbWlpX3dyaXRlX2hpKGJ1cywgMHgxMCB8IHIyLCByMSAmIzQzOyAxLCAwKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg4OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz04OTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODk4OnFjYThrX2ludGVybmFsX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKnNsYXZlX2J1cywgaW50IHBoeSwgaW50IHJlZ251bSwgdTE2IGRhdGEpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04OTkte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTAwOlx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBzbGF2ZV9idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwMS1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTAzLVx0LyogVXNlIG1kaW8gRXRoZXJuZXQgd2hlbiBhdmFpbGFibGUsIGZhbGxiYWNrIHRvIGxlZ2FjeSBvbmUgb24gZXJyb3IgKi9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkwNDpcdHJldCA9IHFjYThrX3BoeV9ldGhfY29tbWFuZChwcml2LCBmYWxzZSwgcGh5LCByZWdudW0sIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTA1LVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTA3LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTA4Olx0cmV0dXJuIHFjYThrX21kaW9fd3JpdGUocHJpdiwgcGh5LCByZWdudW0sIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTA5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05MTE9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTEyOnFjYThrX2ludGVybmFsX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqc2xhdmVfYnVzLCBpbnQgcGh5LCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTEzLXtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxNDpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gc2xhdmVfYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MTUtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkxNy1cdC8qIFVzZSBtZGlvIEV0aGVybmV0IHdoZW4gYXZhaWxhYmxlLCBmYWxsYmFjayB0byBsZWdhY3kgb25lIG9uIGVycm9yICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MTg6XHRyZXQgPSBxY2E4a19waHlfZXRoX2NvbW1hbmQocHJpdiwgdHJ1ZSwgcGh5LCByZWdudW0sIDApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTE5LVx0aWYgKHJldCBcdTAwM2U9IDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTIxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTIyOlx0cmV0ID0gcWNhOGtfbWRpb19yZWFkKHByaXYsIHBoeSwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkyMy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05MzA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTMxOnFjYThrX2xlZ2FjeV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpzbGF2ZV9idXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkzMi17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MzM6XHRwb3J0ID0gcWNhOGtfcG9ydF90b19waHkocG9ydCkgJSBQSFlfTUFYX0FERFI7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MzU6XHRyZXR1cm4gcWNhOGtfaW50ZXJuYWxfbWRpb193cml0ZShzbGF2ZV9idXMsIHBvcnQsIHJlZ251bSwgZGF0YSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzYtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTkzOD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Mzk6cWNhOGtfbGVnYWN5X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqc2xhdmVfYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk0MC17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NDE6XHRwb3J0ID0gcWNhOGtfcG9ydF90b19waHkocG9ydCkgJSBQSFlfTUFYX0FERFI7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDItXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NDM6XHRyZXR1cm4gcWNhOGtfaW50ZXJuYWxfbWRpb19yZWFkKHNsYXZlX2J1cywgcG9ydCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk0NC19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk0NzpxY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NjYtXHRidXMtXHUwMDNlcHJpdiA9ICh2b2lkICopcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk2NzpcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDtxY2E4ay0lZC4lZFwmIzM0OyxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk2OC1cdFx0IGRzLVx1MDAzZWRzdC1cdTAwM2VpbmRleCwgZHMtXHUwMDNlaW5kZXgpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk3Mi1cdFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSB0cmVlIGRlY2xhcmVzIHRoZSBwb3J0OnBoeSBtYXBwaW5nICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NzM6XHRcdGJ1cy1cdTAwM2VuYW1lID0gXCYjMzQ7cWNhOGsgdXNlciBtaWlcJiMzNDs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NzQ6XHRcdGJ1cy1cdTAwM2VyZWFkID0gcWNhOGtfaW50ZXJuYWxfbWRpb19yZWFkO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTc1Olx0XHRidXMtXHUwMDNld3JpdGUgPSBxY2E4a19pbnRlcm5hbF9tZGlvX3dyaXRlO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTc2LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk3Ny1cdFx0LyogSWYgYSBtYXBwaW5nIGNhbiYjMzk7dCBiZSBmb3VuZCwgdGhlIGxlZ2FjeSBtYXBwaW5nIGlzIHVzZWQsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Nzg6XHRcdCAqIHVzaW5nIHFjYThrX3BvcnRfdG9fcGh5KClcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk3OS1cdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTgxLVx0XHRidXMtXHUwMDNlcGh5X21hc2sgPSB+ZHMtXHUwMDNlcGh5c19taWlfbWFzaztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4MjpcdFx0YnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtxY2E4ay1sZWdhY3kgdXNlciBtaWlcJiMzNDs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODM6XHRcdGJ1cy1cdTAwM2VyZWFkID0gcWNhOGtfbGVnYWN5X21kaW9fcmVhZDtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NDpcdFx0YnVzLVx1MDAzZXdyaXRlID0gcWNhOGtfbGVnYWN5X21kaW9fd3JpdGU7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk5NTpxY2E4a19zZXR1cF9tZGlvX2J1cyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk5Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA0MS1cdCAqIElmIHRoZSBleHRlcm5hbCBtZGlvLWJ1cyBkcml2ZXIgaXMgY2FwYWJsZSBtYWdpY2FsbHkgZGlzYWJsaW5nXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDQyOlx0ICogdGhlIFFDQThLX01ESU9fTUFTVEVSX0VOIGFuZCBtdXRleC9zcGluLWxvY2tpbmcgb3V0IHRoZSBxY2E4ayYjMzk7c1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA0My1cdCAqIGFjY2Vzc29ycyBmb3IgdGhlIHRpbWUgYmVpbmcsIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHB1bGwgdGhpc1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNTktXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDYwOlx0cmV0dXJuIHFjYThrX21kaW9fcmVnaXN0ZXIocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDYxLX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMDYzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwNjQ6cWNhOGtfc2V0dXBfbWFjX3B3cl9zZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDY1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDgwLVx0aWYgKG1hc2spIHtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwODE6XHRcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19SRUdfTUFDX1BXUl9TRUwsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDgyLVx0XHRcdFx0UUNBOEtfTUFDX1BXUl9SR01JSTBfMV84ViB8XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTA5MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDkxOnFjYThrX3NldHVwX29mX3B3c19yZWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDkyLXtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwOTM6XHRjb25zdCBzdHJ1Y3QgcWNhOGtfbWF0Y2hfZGF0YSAqZGF0YSA9IHByaXYtXHUwMDNlaW5mbztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwOTQtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwcml2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMDYtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTA3Olx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUkVHX1BXUywgUUNBODMyN19QV1NfUEFDS0FHRTE0OF9FTixcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMDgtXHRcdFx0XHR2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMjQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTI1Olx0cmV0dXJuIHFjYThrX3Jtdyhwcml2LCBRQ0E4S19SRUdfUFdTLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEyNi1cdFx0XHRRQ0E4S19QV1NfTEVEX09QRU5fRU5fQ1NSIHwgUUNBOEtfUFdTX1BPV0VSX09OX1NFTCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMTMwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjExMzE6cWNhOGtfcGFyc2VfcG9ydF9jb25maWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMTMyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMjI4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMjI5OnFjYThrX21hY19jb25maWdfc2V0dXBfaW50ZXJuYWxfZGVsYXkoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBjcHVfcG9ydF9pbmRleCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEyMzAtXHRcdFx0XHQgICAgICB1MzIgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEyNTctXHQvKiBTZXQgUkdNSUkgZGVsYXkgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHZhbHVlcyAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTI1ODpcdHJldCA9IHFjYThrX3Jtdyhwcml2LCByZWcsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjU5LVx0XHRcdFFDQThLX1BPUlRfUEFEX1JHTUlJX1RYX0RFTEFZX01BU0sgfFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEyNjk9c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMjcwOnFjYThrX3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjcxLVx0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjczLVx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEyNzQ6XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRwLVx1MDAzZWRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjc1LVx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3MgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEyOTk9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzMDA6cWNhOGtfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDEtXHRcdFx0IGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDQtXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cdTAwM2VkcztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzMDU6XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDYtXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNTgtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOlxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1OTpcdFx0cWNhOGtfd3JpdGUocHJpdiwgcmVnLCBRQ0E4S19QT1JUX1BBRF9SR01JSV9FTik7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzYwLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2MS1cdFx0LyogQ29uZmlndXJlIHJnbWlpIGRlbGF5ICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzYyOlx0XHRxY2E4a19tYWNfY29uZmlnX3NldHVwX2ludGVybmFsX2RlbGF5KHByaXYsIGNwdV9wb3J0X2luZGV4LCByZWcpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzY4LVx0XHRpZiAocHJpdi1cdTAwM2Vzd2l0Y2hfaWQgPT0gUUNBOEtfSURfUUNBODMzNylcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzNjk6XHRcdFx0cWNhOGtfd3JpdGUocHJpdiwgUUNBOEtfUkVHX1BPUlQ1X1BBRF9DVFJMLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM3MC1cdFx0XHRcdCAgICBRQ0E4S19QT1JUX1BBRF9SR01JSV9SWF9ERUxBWV9FTik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM3NC1cdFx0LyogRW5hYmxlIFNHTUlJIG9uIHRoZSBwb3J0ICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzc1Olx0XHRxY2E4a193cml0ZShwcml2LCByZWcsIFFDQThLX1BPUlRfUEFEX1NHTUlJX0VOKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNzYtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzODMtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzg0OnN0YXRpYyB2b2lkIHFjYThrX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzODUtXHRcdFx0XHQgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xNDE5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNDIwOnFjYThrX3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNDIxLVx0XHRcdCAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIFFDQThLIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyB0aGUgYHFjYThrYCBkcml2ZXIsIHdoaWNoIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHJlZ2lzdGVycyBhIERTQSBzd2l0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBzb21ldGhpbmcgd2UgY2FuIGV2ZW4gZnV6eiBlZmZlY3RpdmVseSwgYW5kIHRoYXQgbWVhbnMgZGV0ZXJtaW5pbmcgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0IHdpdGhvdXQgcmVseWluZyBvbiBhY3R1YWwgaGFyZHdhcmUuIERTQSBkcml2ZXJzIHR5cGljYWxseSB1c2UgdGhlIGRldmljZSB0cmVlLCBzbyBteSBicmFpbiBpcyBpbW1lZGlhdGVseSBnb2luZyBkb3duIHRoYXQgcGF0aC4gQ2FuIHdlIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXkgdG8gYnJpbmcgdGhlIGRyaXZlciB1cD8KClN5emthbGxlciwgb2YgY291cnNlLCBjb21lcyB0byBtaW5kLiBJdCBoYXMgd2F5cyB0byBpbmplY3QgdGhpbmdzICh0aG91Z2ggSSYjMzk7bSBzdGlsbCB0cnlpbmcgdG8gcmVtZW1iZXIgZXhhY3RseSB3aGF0IGl0IGNhbiBkbykuIEkga25vdyBpdCBoYXMgYHN5el9tb3VudF9pbWFnZWAgYW5kIGBzeXpfcmVhZF9wYXJ0X3NlY3RvcmAg4oCTIGJ1dCBmb3IgRFQgaW5qZWN0aW9uIHNwZWNpZmljYWxseSwgaXQmIzM5O3Mgbm90IGNsZWFyLiBEb2VzIGl0IHVzZSBgc3l6X2dlbmV0bGlua2A/IE5vLCB3YWl0LCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgaGF2ZSBgc3l6X2Rldl9kdF9vdmVybGF5YCBvciBzb21ldGhpbmc/IEhvbGQgb24sIG5vLCBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhICpnZW5lcmljKiBEVCBvdmVybGF5IGluamVjdG9yIGluIHVwc3RyZWFtIExpbnV4IHVubGVzcyBpdCYjMzk7cyB2aWEgY29uZmlnZnMuCgpBIHJlbGF0ZWQgcXVlc3Rpb24gaXM6IGRvZXMgU3l6a2FsbGVyICpldmVuKiB0ZXN0IERTQSBkcml2ZXJzPyBMZXQgbWUgc2VlIGlmIGBDT05GSUdfTkVUX0RTQV9RQ0E4S2AgaXMgZW5hYmxlZCBpbiBzeXpib3QuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyByZWxhdGVkIHRvIGBxY2E4a2AuIE9oLCBpbnRlcmVzdGluZyAtIHRoZSBjb21taXQgYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gU28sIHRoaXMgbGlrZWx5IG1lYW5zIHRoZSBwYXRjaCB3YXMgc3VibWl0dGVkIHRvIHN5ei1jbHVzdGVyIGZvciB0ZXN0aW5nLCBvciBpdCYjMzk7cyBhIHBhdGNoIHVuZGVyIHJldmlldyB0aGF0IHN5ei1jbHVzdGVyIGlzIHRlc3RpbmcuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGNvbmNlcm5zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCYjMzk7cyBrZXk6IGNhbiB3ZSByZWFjaCBgcWNhOGtgIGNvZGUgaW4gUUVNVT8gTm93LCB0aGlua2luZyBhYm91dCBpdCwgYHFjYThrYCBpcyBhbiBNRElPIGRldmljZS4gQXJlIHRoZXJlIHdheXMgdG8gZW11bGF0ZSBNRElPIGJ1c2VzIGluIFFFTVUsIG1heWJlIHRocm91Z2ggYG1kaW8tYmNtLXVuaW1hY2Agb3Igc2ltaWxhcj8gTm8sIFFFTVUgZG9lc24mIzM5O3Qgc2VlbSB0byBlbXVsYXRlIGEgYHFjYThrYCBzcGVjaWZpY2FsbHkuCgpCdXQgd2FpdCwgY2FuIHN5emthbGxlciBzb21laG93IGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcyB1c2luZyBhIG5ldGxpbmsgQVBJIG9yIHN5c2ZzPyBMaWtlIGl0IGhhcyBgc3l6X2dlbmV0bGlua2AgYW5kIGBzeXpfODAyMTFfLi4uYC4gVW5mb3J0dW5hdGVseSwgdGhlcmUgaXNuJiMzOTt0IGEgZ2VuZXJpYyBzb2Z0d2FyZSBlbXVsYXRvciBpbiB0aGUga2VybmVsIGZvciBNRElPIGRldmljZXMsIGxpa2UgdGhlcmUgaXMgYG1hYzgwMjExX2h3c2ltYCBvciBgdmhjaWAgZm9yIFVTQi4KCldhaXQsIHRoZXJlJiMzOTtzIGBkc2FfbG9vcGAsIGEgc29mdHdhcmUtZW11bGF0ZWQgRFNBIHN3aXRjaCwgYnV0IGBxY2E4a2AgaXMgYSBkcml2ZXIgZm9yICpzcGVjaWZpYyogaGFyZHdhcmUuIFRoaXMgYnJpbmdzIG1lIGJhY2sgdG8gdGhlIGNvcmUgcXVlc3Rpb246IElzIGl0IHBvc3NpYmxlIHRvIHJlYWNoIHRoZSBgcWNhOGtgIGNvZGUgaW4gUUVNVT8gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmXigJlzIGFueSBRRU1VIGVtdWxhdGlvbiBmb3IgaXQuCgpPa2F5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIGBxY2E4a2Agd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBwcm9iZWQgYW5kIHRyeSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgZm9yIGVtdWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIxNzM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjE3NDpxY2E4a19zd19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMTc1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMTc4LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjE3OTpcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjE4MC1cdCAqIElEIHJlZ2lzdGVyXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MjMzNj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHFjYThrbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyMzM3Olx0LnByb2JlICA9IHFjYThrX3N3X3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjMzOC1cdC5yZW1vdmUgPSBxY2E4a19zd19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTURJTyBEZXZpY2UgSW5zdGFudGlhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1kaW9fZHJpdmVyYCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIG1lY2hhbmljcyBvZiBkZXZpY2UgY3JlYXRpb24uIENhbiBJIGNvbmp1cmUgYW4gYG1kaW9fZGV2aWNlYCBmcm9tIHVzZXJzcGFjZSwgb3IgZG9lcyB0aGUga2VybmVsIG9mZmVyIHNvbWUgY2xldmVyIHNvZnR3YXJlIGVtdWxhdGlvbiBwYXRod2F5PyBJIHJlY2FsbCB0aGVyZSBiZWluZyBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrdXBgLCBidXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgaXQuIEFoYSEgYG1kaW8tZ3Bpb2AgcmVxdWlyZXMgYWN0dWFsIGhhcmR3YXJlIGludGVyYWN0aW9uLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuCgpXYWl0IGEgbWludXRlLCB3YXNuJiMzOTt0IHRoZXJlIGBkc2FfbG9vcGA/IFllcyEgSXQgKmlzKiBhbiBNRElPIGRldmljZS4gQW5kIGl0IGNsZXZlcmx5IHV0aWxpemVzIGBmaXhlZC1saW5rYCBhbmQgYSBtb2NrIE1ESU8gYnVzLiBJbnRlcmVzdGluZy4uLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGFjdHVhbGx5IGluc3RhbnRpYXRlIGEgYHFjYThrYCBkZXZpY2Ugb24gYSAqbW9jayogTURJTyBidXMgdXNpbmcgYSB1c2Vyc3BhY2UgYXBwcm9hY2g/CgpUeXBpY2FsbHksIE1ESU8gZGV2aWNlcyBhcmUgYm9ybiB0aHJvdWdoIHRoZSBEZXZpY2UgVHJlZSwgcmlnaHQ/IElmIHRoZSBrZXJuZWwgZG9lc24mIzM5O3Qgb2ZmZXIgYSBiYWNrZG9vciB0byBpbmplY3QgRFQgbm9kZXMgLSBhbmQgc3l6a2FsbGVyLCBteSBnby10byBmdXp6aW5nIHRvb2wsIHR5cGljYWxseSBjYW4mIzM5O3QgZG8gdGhhdCB1bmxlc3Mgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX09GX09WRVJMQVlgIGFuZCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgKHdoaWNoIGlzIG5vdCBzdGFuZGFyZCBmb3IgZnV6emluZynigJMgdGhlbiBpdCYjMzk7cyBhIG5vbi1zdGFydGVyLiBUaGlzIGlzIHVzdWFsbHkgd2hhdCBoYXBwZW5zLgoKSG9sZCBvbi4uLiBkaWRuJiMzOTt0IEkgcmVhZCBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGFjdHVhbGx5ICpiZWluZyogYWJsZSB0byBpbmplY3QgRFQgb3ZlcmxheXM/IEl0IGhpdCBtZSEgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgYHN5el9kZXZfZHRfb3ZlcmxheWAgcHNldWRvLXN5c2NhbGwuIFRoYXQmIzM5O3MgdGhlIGtleSEgTm93IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgc2VlIGlmIHRoaXMgc29sdmVzIG15IHByb2JsZW0uIFRoaXMgY291bGQgYmUgYSBnYW1lLWNoYW5nZXIgZm9yIG15IGZ1enppbmcgc3RyYXRlZ3khCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jPTI4Mz1pbnQgaW9tbXVmZF9pb2FzX2NvcHkoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZClcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5Mi1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb2FzLmM6MjkzOlx0aW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQodWNtZCwgY21kLVx1MDAzZXNyY19pb2FzX2lkLCBcdTAwMjZjbWQtXHUwMDNlc3JjX2lvdmEsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5NC1cdFx0XHRcdCAgICAgIFx1MDAyNmNtZC1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvbW11ZmRfcHJpdmF0ZS5oPTcxMj1leHRlcm4gc2l6ZV90IGlvbW11ZmRfdGVzdF9tZW1vcnlfbGltaXQ7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzEzOnZvaWQgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MTQtXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgaW9hc19pZCwgdTY0ICppb3ZhLCB1MzIgKmZsYWdzKTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg9NzE5PWludCBpb21tdWZkX3Rlc3RfZG1hX2J1Zl9pb21tdWZkX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjEtI2Vsc2VcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaDo3MjI6c3RhdGljIGlubGluZSB2b2lkIGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhX2lkKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmgtNzIzLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9hc19pZCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz01MT1zdGF0aWMgdm9pZCBtb2NrX2Rldl9kaXNhYmxlX2lvcGYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTU4LSAqL1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShzdHJ1Y3QgaW9fcGFnZXRhYmxlICppb3B0LFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNjAtXHRcdFx0XHRcdFx0ICB1NjQgKmlvdmEpXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MS17XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2MjpcdHN0cnVjdCBzeXpfbGF5b3V0IHtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTYzLVx0XHRfX3UzMiBudGhfYXJlYTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02NS1cdH07XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2NjpcdHN0cnVjdCBzeXpfbGF5b3V0ICpzeXogPSAodm9pZCAqKWlvdmE7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02Ny1cdHVuc2lnbmVkIGludCBudGggPSBzeXotXHUwMDNlbnRoX2FyZWE7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODMtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo4NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShzdHJ1Y3QgaW9tbXVmZF9hY2Nlc3MgKmFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTg1LVx0XHRcdFx0XHRcdHU2NCAqaW92YSlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy05My1cdH1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjk0Olx0cmV0ID0gX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShcdTAwMjZhY2Nlc3MtXHUwMDNlaW9hcy1cdTAwM2Vpb3B0LCBpb3ZhKTtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTk1LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFjY2Vzcy1cdTAwM2Vpb2FzX2xvY2spO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTk4LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6OTk6dm9pZCBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZChzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTAwLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGlvYXNfaWQsIHU2NCAqaW92YSwgdTMyICpmbGFncylcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xMTAtXHRcdHJldHVybjtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjExMTpcdCppb3ZhID0gX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShcdTAwMjZpb2FzLVx1MDAzZWlvcHQsIGlvdmEpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTEyLVx0aW9tbXVmZF9wdXRfb2JqZWN0KHVjbWQtXHUwMDNlaWN0eCwgXHUwMDI2aW9hcy1cdTAwM2VvYmopO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTE1Mjk9c3RhdGljIGludCBpb21tdWZkX3Rlc3RfYWNjZXNzX3BhZ2VzKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTU1Ny1cdGlmIChmbGFncyBcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTU1ODpcdFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVx1MDAzZWFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE1NTktXHRcdFx0XHRcdFx0ICBcdTAwMjZjbWQtXHUwMDNlYWNjZXNzX3BhZ2VzLmlvdmEpO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTE2MjQ9c3RhdGljIGludCBpb21tdWZkX3Rlc3RfYWNjZXNzX3J3KHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTY1OS1cdGlmIChmbGFncyBcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTY2MDpcdFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVx1MDAzZWFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE2NjEtXHRcdFx0XHRcdFx0ICBcdTAwMjZjbWQtXHUwMDNlYWNjZXNzX3J3LmlvdmEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzIwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBBcHBsaWNhYmlsaXR5IG9mIHRoZSBgcWNhOGtgIERyaXZlcioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgSSAqY2Fubm90KiBzZWFyY2ggZm9yIGFueSBgc3l6X2AgcHJlZml4ZXMgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0b2xkIG1lIHRoYXQuIEkgc2hvdWxkIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGZvciB0aGF0LCBidXQgSSBkb24mIzM5O3Qgc2VlIHRob3NlIGluIG15IGF2YWlsYWJsZSB0b29scyBhY2NvcmRpbmcgdG8gdGhlIGBkZWNsYXJhdGlvbmAgbGlzdDogYGRlZmF1bHRfYXBpOmdyZXBwZXJgLCBgZGVmYXVsdF9hcGk6Y29kZXNlYXJjaC1kaXItaW5kZXhgLCBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCwgYGRlZmF1bHRfYXBpOnNldC1yZXN1bHRzYC4gU28sIHNjcmF0Y2ggdGhhdC4KCk5vdywgbXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgYHFjYThrYCBkcml2ZXIgaXMgZXZlbiByZWFjaGFibGUgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXIgdGhhdCBpZiBzb21ldGhpbmcgcmVsaWVzIG9uIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgdGhlbiBpdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBJdCBmbGFncyBQQ0llIHN3aXRjaCBkcml2ZXJzIGFuZCBTbWFydE5JQyBkcml2ZXJzIGFzIGltbWVkaWF0ZSByZWQgZmxhZ3MgaWYgdGhleSBuZWVkIGEgcGh5c2ljYWwgUENJZSBjYXJkLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gYHFjYThrYC4gSXQmIzM5O3MgYSBRdWFsY29tbSBBdGhlcm9zIERTQSBzd2l0Y2ggZHJpdmVyLCBzbyBpdCYjMzk7cyB2ZW5kb3Itc3BlY2lmaWMsIGFuZCBpdCBjb25uZWN0cyB2aWEgTURJTy4gSG1tLCBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueSBRRU1VIGVtdWxhdGlvbiBmb3IgUUNBOEsuIEFuZCBjYW4gaXQgYmUgaW5zdGFudGlhdGVkIHZpYSBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZT8gVGhlIHByb21wdCBpcyBwcmV0dHkgc3RyaW5nZW50OiBubywgc2luY2UgSSBkb24mIzM5O3Qgc2VlIGFueSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1cyB0aGF0IGFsbG93cyBpbnN0YW50aWF0aW9uIG9mIGFyYml0cmFyeSBNRElPIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXBzLgoKV2FpdCwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2dlbmV0bGlua2AgYnV0IHRoYXQmIzM5O3MgZm9yIG5ldGxpbmssIGFuZCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHRoZSBzYW1lIHRoaW5nIGFzIERTQS4gSSBjYW4mIzM5O3QgZWFzaWx5IGNoZWNrIGZvciBzeXpib3QgcmVwb3J0cywgYnV0IGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGZ1enppbmcgZW50cnkgcG9pbnRzIGluIHRoZSBrZXJuZWwgZm9yIERTQSBpbiBnZW5lcmFsLiBBaGEsIHRoZSBgZHNhX2xvb3BgIGlzIGEgbW9jayBEU0EgZHJpdmVyLiBPa2F5LCBidXQgdGhhdCYjMzk7cyBub3QgYHFjYThrYDsgaXQmIzM5O3MgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuCgpJZiBgcWNhOGtgIHJlcXVpcmVzIGEgcGh5c2ljYWwgTURJTyBidXMgYW5kIGEgc3BlY2lmaWMgUEhZIElEIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgaXQmIzM5O3MganVzdCBub3QgZ29pbmcgdG8gd29yayBpbiBRRU1VLiBMb29rcyBsaWtlIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBxY2E4a19zd19wcm9iZWAuIFRoaXMgbG9va3MgbGlrZSBhIGRlYWQgZW5kIGZvciBmdXp6aW5nIHVubGVzcyB0aGVyZSBhcmUgc29tZSBzZXJpb3VzIGtlcm5lbCBlbXVsYXRpb25zIGF2YWlsYWJsZSB0aGF0IEkgaGF2ZW4mIzM5O3QgaGVhcmQgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTcwOlx0XHQuY29ubmVjdF90YWdfcHJvdG9jb2xcdD0gcWNhOGtfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4yMTcxOlx0fTtcbjIxNzI6XHRcbjIxNzM6XHRzdGF0aWMgaW50XG4yMTc0Olx0cWNhOGtfc3dfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuMjE3NTpcdHtcbjIxNzY6XHRcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2O1xuMjE3NzpcdFx0aW50IHJldDtcbjIxNzg6XHRcbjIxNzk6XHRcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xuMjE4MDpcdFx0ICogSUQgcmVnaXN0ZXJcbjIxODE6XHRcdCAqL1xuMjE4MjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4yMTgzOlx0XHRpZiAoIXByaXYpXG4yMTg0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjE4NTpcdFxuMjE4NjpcdFx0cHJpdi1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjIxODc6XHRcdHByaXYtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4yMTg4Olx0XHRwcml2LVx1MDAzZWluZm8gPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEocHJpdi1cdTAwM2VkZXYpO1xuMjE4OTpcdFxuMjE5MDpcdFx0cHJpdi1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHJpdi1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LFxuMjE5MTpcdFx0XHRcdFx0XHRcdCAgIEdQSU9EX09VVF9ISUdIKTtcbjIxOTI6XHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZXNldF9ncGlvKSlcbjIxOTM6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZXNldF9ncGlvKTtcbjIxOTQ6XHRcbjIxOTU6XHRcdGlmIChwcml2LVx1MDAzZXJlc2V0X2dwaW8pIHtcbjIxOTY6XHRcdFx0LyogVGhlIGFjdGl2ZSBsb3cgZHVyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMTAgbXNcbjIxOTc6XHRcdFx0ICogYW5kIGNoZWNrcGF0Y2gucGwgd2FudHMgMjAgbXMuXG4yMTk4Olx0XHRcdCAqL1xuMjE5OTpcdFx0XHRtc2xlZXAoMjApO1xuMjIwMDpcdFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocHJpdi1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbjIyMDE6XHRcdH1cbjIyMDI6XHRcbjIyMDM6XHRcdC8qIFN0YXJ0IGJ5IHNldHRpbmcgdXAgdGhlIHJlZ2lzdGVyIG1hcHBpbmcgKi9cbjIyMDQ6XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdChcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgTlVMTCwgcHJpdixcbjIyMDU6XHRcdFx0XHRcdFx0XHUwMDI2cWNhOGtfcmVnbWFwX2NvbmZpZyk7XG4yMjA2Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSkge1xuMjIwNzpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtyZWdtYXAgaW5pdGlhbGl6YXRpb24gZmFpbGVkXCYjMzQ7KTtcbjIyMDg6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuMjIwOTpcdFx0fVxuMjIxMDpcdFxuMjIxMTpcdFx0cHJpdi1cdTAwM2VtZGlvX2NhY2hlLnBhZ2UgPSAweGZmZmY7XG4yMjEyOlx0XG4yMjEzOlx0XHQvKiBDaGVjayB0aGUgZGV0ZWN0ZWQgc3dpdGNoIGlkICovXG4yMjE0Olx0XHRyZXQgPSBxY2E4a19yZWFkX3N3aXRjaF9pZChwcml2KTtcbjIyMTU6XHRcdGlmIChyZXQpXG4yMjE2Olx0XHRcdHJldHVybiByZXQ7XG4yMjE3Olx0XG4yMjE4Olx0XHRwcml2LVx1MDAzZWRzID0gZGV2bV9remFsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKnByaXYtXHUwMDNlZHMpLCBHRlBfS0VSTkVMKTtcbjIyMTk6XHRcdGlmICghcHJpdi1cdTAwM2VkcylcbjIyMjA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMjIxOlx0XG4yMjIyOlx0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlbWdtdF9ldGhfZGF0YS5tdXRleCk7XG4yMjIzOlx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2VtZ210X2V0aF9kYXRhLnJ3X2RvbmUpO1xuMjIyNDpcdFxuMjIyNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZW1pYl9ldGhfZGF0YS5tdXRleCk7XG4yMjI2Olx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2VtaWJfZXRoX2RhdGEucndfZG9uZSk7XG4yMjI3Olx0XG4yMjI4Olx0XHRwcml2LVx1MDAzZWRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuMjIyOTpcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VudW1fcG9ydHMgPSBRQ0E4S19OVU1fUE9SVFM7XG4yMjMwOlx0XHRwcml2LVx1MDAzZWRzLVx1MDAzZXByaXYgPSBwcml2O1xuMjIzMTpcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VvcHMgPSBcdTAwMjZxY2E4a19zd2l0Y2hfb3BzO1xuMjIzMjpcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZxY2E4a19waHlsaW5rX21hY19vcHM7XG4yMjMzOlx0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcmVnX211dGV4KTtcbjIyMzQ6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgcHJpdik7XG4yMjM1Olx0XG4yMjM2Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChwcml2LVx1MDAzZWRzKTtcbjIyMzc6XHR9XG4yMjM4Olx0XG4yMjM5Olx0c3RhdGljIHZvaWRcbjIyNDA6XHRxY2E4a19zd19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuMjI0MTpcdHtcbjIyNDI6XHRcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbjIyNDM6XHRcdGludCBpO1xuMjI0NDpcdFxuMjI0NTpcdFx0aWYgKCFwcml2KVxuMjI0NjpcdFx0XHRyZXR1cm47XG4yMjQ3Olx0XG4yMjQ4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBRQ0E4S19OVU1fUE9SVFM7IGkmIzQzOyYjNDM7KVxuMjI0OTpcdFx0XHRxY2E4a19wb3J0X3NldF9zdGF0dXMocHJpdiwgaSwgMCk7XG4yMjUwOlx0XG4yMjUxOlx0XHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4yMjUyOlx0fVxuMjI1MzpcdFxuMjI1NDpcdHN0YXRpYyB2b2lkIHFjYThrX3N3X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjIyNTU6XHR7XG4yMjU2Olx0XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4yMjU3Olx0XG4yMjU4Olx0XHRpZiAoIXByaXYpXG4yMjU5Olx0XHRcdHJldHVybjtcbjIyNjA6XHRcbjIyNjE6XHRcdGRzYV9zd2l0Y2hfc2h1dGRvd24ocHJpdi1cdTAwM2Vkcyk7XG4yMjYyOlx0XG4yMjYzOlx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIE5VTEwpO1xuMjI2NDpcdH1cbjIyNjU6XHRcbjIyNjY6XHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4yMjY3Olx0c3RhdGljIHZvaWRcbjIyNjg6XHRxY2E4a19zZXRfcG0oc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBlbmFibGUpXG4yMjY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyOQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgUUNBOEsgU3dpdGNoIFByb2JlIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBxY2E4a19zd19wcm9iZWAgaGFzIGJlZW4gY2FsbGVkLiBOYXR1cmFsbHksIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpcyB3aGF0IGl0JiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLCBzbyBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbCwgYHFjYThrX3JlYWRfc3dpdGNoX2lkKHByaXYpYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBiZWZvcmUgeW91IGNhbiBjb25maWd1cmUgb3IgbWFuYWdlIGEgc3dpdGNoLCB5b3UgKm5lZWQqIHRvIGlkZW50aWZ5IGl0LiBJdCYjMzk7cyB0aGUgYWJzb2x1dGUgZm91bmRhdGlvbmFsIHN0ZXAgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEtub3dpbmcgdGhlIHNwZWNpZmljIGNoaXAgcmV2aXNpb24sIHZlbmRvciBJRCwgYW5kIG1vZGVsIGhlbHBzIGRldGVybWluZSB0aGUgZXhhY3QgaGFyZHdhcmUgaW4gcGxheSBhbmQsIGJ5IGV4dGVuc2lvbiwgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWdpc3RlciBtYXBwaW5ncyBhcmUgYXBwbGljYWJsZS4gTXkgbmV4dCBxdWVzdGlvbiB3b3VsZCBiZSBob3cgdGhlIGBwcml2YCBhcmd1bWVudCBpcyBzdHJ1Y3R1cmVkIGFuZCB3aGljaCBkYXRhIG1lbWJlcnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyByZWFkaW5nIHRoZSBJRCBmcm9tIGEgcmVnaXN0ZXIsIGEgZmxhc2ggZGV2aWNlLCBvciBzb21ld2hlcmUgZWxzZSBlbnRpcmVseSBhbmQgaG93IHRoaXMgSUQgaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgYSBtZW50YWwgbWFwIG9mIHRoZSBwcm9iaW5nIHN0YWdlIGFuZCBob3cgdGhlIFFDQThLIGRyaXZlciBoYW5kbGVzIGJhc2ljIGRldmljZSBpZGVudGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWNhOGtfcmVhZF9zd2l0Y2hfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yMTc0PXFjYThrX3N3X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMjEzLVx0LyogQ2hlY2sgdGhlIGRldGVjdGVkIHN3aXRjaCBpZCAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjIxNDpcdHJldCA9IHFjYThrX3JlYWRfc3dpdGNoX2lkKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjIxNS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTMwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBMb2NhdGlvbiBvZiBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHRoZSBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZGluZyB0aGUgaWRlbnRpZmllciBmcm9tIGEgUUNBOEsgc3dpdGNoLiBCdXQgd2hlcmUgaXMgdGhhdCBkZWZpbmVkLCBzcGVjaWZpY2FsbHk/IEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gYHFjYThrLWNvbW1vbi5jYCBvciBhIHNpbWlsYXIgY29tbW9uIGZpbGUgd2l0aGluIHRoYXQgUUNBOEsgZHJpdmVyIHN1aXRlLiBUaW1lIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdHMgc291cmNlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIgd2l0aCB0aGlzIGN1cnJlbnQgdGFzay4gSnVzdCBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY2E4a19yZWFkX3N3aXRjaF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIxNzQ9cWNhOGtfc3dfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIyMTMtXHQvKiBDaGVjayB0aGUgZGV0ZWN0ZWQgc3dpdGNoIGlkICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyMjE0Olx0cmV0ID0gcWNhOGtfcmVhZF9zd2l0Y2hfaWQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMjE1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jPTEzNzk9aW50IHFjYThrX3BvcnRfbGFnX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYy0xMzg0LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYzoxMzg1OmludCBxY2E4a19yZWFkX3N3aXRjaF9pZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMtMTM4Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oPTUwNT12b2lkIHFjYThrX3BvcnRfc2V0X3N0YXR1cyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBlbmFibGUpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oOjUwNjppbnQgcWNhOGtfcmVhZF9zd2l0Y2hfaWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oLTUwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxOTgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBxY2E4a19yZWFkX3N3aXRjaF9pZGAgZnVuY3Rpb24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gYXBwcm9hY2hpbmcgaXQ6CgoqKkRpc3NlY3RpbmcgYHFjYThrX3JlYWRfc3dpdGNoX2lkYCoqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gQmFzZWQgb24gdGhlIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogaXQmIzM5O3MgZGVzaWduZWQgdG8gcmVhZCB0aGUgc3dpdGNoIElELCBsaWtlbHkgZnJvbSBhIFFDQThLLWJhc2VkIHN3aXRjaC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gV2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uIGxpdmU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgZHJpdmVyIG9yIFNESz8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnM/IFdoYXQgcGxhdGZvcm0gYW0gSSB3b3JraW5nIHdpdGg/IEtub3dpbmcgdGhlIGJyb2FkZXIgZW52aXJvbm1lbnQgaXMgY3J1Y2lhbCBmb3IgZWZmZWN0aXZlIGFuYWx5c2lzLgoKSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBXaGF0IGFyZSB0aGUgaW5wdXQgcGFyYW1ldGVycz8gQXJlIHRoZXJlIHBvaW50ZXJzLCBpbnRlZ2Vycywgb3Igc3RydWN0dXJlcyBpbnZvbHZlZD8gVGhlIHJldHVybiB2YWx1ZSBpcyBrZXksIGFzIGl0JiMzOTtsbCBsaWtlbHkgaW5kaWNhdGUgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgcGVyaGFwcyB0aGUgYWN0dWFsIHN3aXRjaCBJRCBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlcHJlc2VudGF0aW9uLgoKVGhlbiwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgbG9naWMuIEhvdyBkb2VzIGl0IGFjdHVhbGx5ICpyZWFkKiB0aGlzIElEPyBEb2VzIGl0IGludm9sdmUgcmVnaXN0ZXIgYWNjZXNzLCBwZXJoYXBzIHVzaW5nIEkyQyBvciBNRElPPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNlcXVlbmNlcyBvZiBvcGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IGVycm9yIGNoZWNrcyBpbiBwbGFjZT8gSSB3aWxsIGxpa2VseSBiZSBsb29raW5nIGZvciBiaXQgbWFuaXB1bGF0aW9uIGFuZCBhZGRyZXNzIGRlY29kaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgcmVsYXRlZCB0byBRQ0E4SyBjb21tdW5pY2F0aW9uLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGludGVycnVwdCBoYW5kbGluZyBpZiB0aGF0IGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uLgoKRnVydGhlcm1vcmUsIEkmIzM5O2xsIHRoaW5rIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIElEIHJlYWRpbmcgcHJvY2Vzcz8gQXJlIHRoZXJlIHRpbWVvdXRzPyBXaGF0IGVycm9yIGNvZGVzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCBkbyB0aGV5IHNpZ25pZnk/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBjb21tb24gcGl0ZmFsbHMgc3VjaCBhcyBpbnZhbGlkIHJlZ2lzdGVyIGFkZHJlc3NlcywgY29tbXVuaWNhdGlvbiBlcnJvcnMsIGFuZCBpbmNvcnJlY3QgZGF0YSBpbnRlcnByZXRhdGlvbi4KCkZpbmFsbHksIEkmIzM5O2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IERvZXMgdGhlIHN3aXRjaCBJRCBpbmZsdWVuY2UgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYmVoYXZpb3I/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmV2aXNpb25zIGFuZCB2YXJpYXRpb25zIG9mIHRoZSBRQ0E4SyBzaWxpY29uPyBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgcm9sZSBhbmQgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM4NTpcdGludCBxY2E4a19yZWFkX3N3aXRjaF9pZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbjEzODY6XHR7XG4xMzg3Olx0XHR1MzIgdmFsO1xuMTM4ODpcdFx0dTggaWQ7XG4xMzg5Olx0XHRpbnQgcmV0O1xuMTM5MDpcdFxuMTM5MTpcdFx0aWYgKCFwcml2LVx1MDAzZWluZm8pXG4xMzkyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMTM5MzpcdFxuMTM5NDpcdFx0cmV0ID0gcWNhOGtfcmVhZChwcml2LCBRQ0E4S19SRUdfTUFTS19DVFJMLCBcdTAwMjZ2YWwpO1xuMTM5NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzOTY6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMzk3Olx0XG4xMzk4Olx0XHRpZCA9IFFDQThLX01BU0tfQ1RSTF9ERVZJQ0VfSUQodmFsKTtcbjEzOTk6XHRcdGlmIChpZCAhPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlaWQpIHtcbjE0MDA6XHRcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldixcbjE0MDE6XHRcdFx0XHRcJiMzNDtTd2l0Y2ggaWQgZGV0ZWN0ZWQgJXggYnV0IGV4cGVjdGVkICV4XCYjMzQ7LFxuMTQwMjpcdFx0XHRcdGlkLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlaWQpO1xuMTQwMzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjE0MDQ6XHRcdH1cbjE0MDU6XHRcbjE0MDY6XHRcdHByaXYtXHUwMDNlc3dpdGNoX2lkID0gaWQ7XG4xNDA3Olx0XG4xNDA4Olx0XHQvKiBTYXZlIHJldmlzaW9uIHRvIGNvbW11bmljYXRlIHRvIHRoZSBpbnRlcm5hbCBQSFkgZHJpdmVyICovXG4xNDA5Olx0XHRwcml2LVx1MDAzZXN3aXRjaF9yZXZpc2lvbiA9IFFDQThLX01BU0tfQ1RSTF9SRVZfSUQodmFsKTtcbjE0MTA6XHRcbjE0MTE6XHRcdHJldHVybiAwO1xuMTQxMjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxMDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUUNBOEsgRHJpdmVyJiMzOTtzIEZ1enphYmlsaXR5KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBgcWNhOGtgIGRyaXZlciwgd2hpY2ggaXMgYSBRdWFsY29tbSBBdGhlcm9zIHN3aXRjaCBkcml2ZXIsIGlzIGxpa2VseSAqbm90KiBmdXp6YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjb2RlIHBlcmZvcm1zIGEgcmVnaXN0ZXIgcmVhZCB1c2luZyBgcWNhOGtfcmVhZGAsIGFuZCBpZiB0aGF0IGZhaWxzIG9yIHRoZSBkZXZpY2UgSUQgZG9lc24mIzM5O3QgbWF0Y2gsIGl0IHJldHVybnMgYC1FTk9ERVZgLiBTaW5jZSBpdCYjMzk7cyBhbiBNRElPIGRldmljZSwgYHFjYThrX3JlYWRgIHJlbGllcyBvbiBNRElPIHJlYWRzLCBhbmQgdGhvc2Ugd2lsbCBmYWlsIG9yIHJldHVybiAweGZmZmYgaW4gdGhlIGFic2VuY2Ugb2YgdGhlIGFjdHVhbCBoYXJkd2FyZSwgbGVhZGluZyB0byBhIGZhaWxlZCBwcm9iZS4KCkkgY29uc2lkZXJlZCB3aGV0aGVyIHN5emthbGxlciBtaWdodCBoYXZlIGEgd2F5IGFyb3VuZCB0aGlzLCBwZXJoYXBzIHRocm91Z2ggYHN5el9nZW5ldGxpbmtgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgdGhhdCB3b3VsZG4mIzM5O3QgbW9jayBNRElPIGRldmljZXMuIEkgYWxzbyB3b25kZXJlZCBpZiBpdCB3YXMgcmVsYXRlZCB0byB0aGUgcHJvbXB0IGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBidXQgYHFjYThrYCBpcyBNRElPLCBub3QgUENJZS4gSXQgYXBwZWFycyBRRU1VICpkb2VzbiYjMzk7dCogZW11bGF0ZSB0aGUgUUNBOEsgc3dpdGNoIGNoaXAsIHNvIGl0IHNlZW1zIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHNldHVwcy4KCkNvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSB1c2UgYSBgZHVtbXlgIG9yIGBkc2FfbG9vcGAgbW9jaz8gYGRzYV9sb29wYCBpcyBhIG1vY2sgRFNBIGRyaXZlciwgYnV0IGl0IGhhcyBpdHMgb3duIGRyaXZlciBjb2RlIChgZHNhX2xvb3AuY2ApIGFuZCBkb2VzbiYjMzk7dCB1dGlsaXplIGBxY2E4a2AuIFRoZXJlZm9yZSwgdGhhdCBgcWNhOGtgIGNvZGUgc2VlbXMgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIHNvbWUga2luZCBvZiBzcGVjaWZpYyBlbXVsYXRpb24uIEkgY2hlY2tlZCwgYW5kIHRoZXJlJiMzOTtzIG5vIGBxY2E4a2AgZW11bGF0aW9uIGluIFFFTVUuCgpUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbmluZyBhICYjMzQ7cGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgaW4gc3l6a2FsbGVyIGlzIGludGVyZXN0aW5nLCBidXQgaWYgdGhlIGNvZGUgaXMgZ2VudWluZWx5IHVucmVhY2hhYmxlLCB0aGVuIHN5emthbGxlciB3b24mIzM5O3QgYmUgYWJsZSB0byBmdXp6IGl0IGVmZmVjdGl2ZWx5LCBhbmQgd2Ugd2lsbCBnZXQgbm8gY292ZXJhZ2UuIFRoYXQgd291bGQgbWVhbiBpdCYjMzk7cyB1bmxpa2VseSB0aGUgcGF0Y2ggaXMgZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjb25jbHVkZSB0aGF0IHRoZSBgcWNhOGtgIGNvZGUgcGF0aHMgaW4gYHFjYThrLTh4eHguY2AgYW5kIGBxY2E4ay1jb21tb24uY2AgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyB0cnVseSB1bi1mdXp6YWJsZSBhbmQgdmVyaWZ5IG5vIG1vY2tpbmcgZXhpc3RzLiBJcyB0aGVyZSBhIGBxY2E4a2AgbW9jayBpbiB0aGUga2VybmVsLCBhbmQgaWYgc28sIGhvdyBkb2VzIHRoYXQgd29yaz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY2E4ayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMTAKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBxY2E4ayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgY2hlY2tlZCBgdG9vbHMvdGVzdGluZy9gIOKAkyBub3RoaW5nIHJlbGV2YW50IHRoZXJlLiBUaGVuLCBJIGxvb2tlZCBhdCBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmNgLiAgQSBoYXJkd2FyZSBkcml2ZXIsIHNwZWNpZmljYWxseS4gIFRoZSBxdWVzdGlvbiBpczogaXMgdGhlcmUgKmFueSogY2hhbmNlIHRoaXMgaXMgdXNlZCBpbiBhbiBlbXVsYXRpb24gY29udGV4dD8gVGhlIHByb21wdCBpcyBjbGVhcjogYW55IHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG1lYW5zIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKYHFjYThrYCBpcyBhIFF1YWxjb21tIEF0aGVyb3MgRFNBIGRyaXZlciB0YXJnZXRpbmcgdGhlIFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IGNoaXBzLiAgSXQgcmVsaWVzIG9uIGFuIE1ESU8gYnVzIGNvbm5lY3RlZCB0byAqdGhhdCogc3BlY2lmaWMgaGFyZHdhcmUuICBJbXBvc3NpYmxlIHRvIHByb2JlIGluIFFFTVUuICBUaGVyZWZvcmUsIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4KCkFscmlnaHQsIGxldCYjMzk7cyByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gaXQmIzM5O3MgKm9ubHkqIHRvdWNoaW5nIGBxY2E4a2AuICBUaGUgZGlmZiBsaXN0czoKCiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmNgCiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY2AKKiAgIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhgCgpQZXJmZWN0LiBTdHJpY3RseSB3aXRoaW4gdGhlIGBxY2E4a2AgZHJpdmVyIHN1aXRlLiBTaW5jZSB0aGlzIGRyaXZlciBuZWVkcyBhIHBoeXNpY2FsIGNoaXAsIG5vdCBhdmFpbGFibGUgaW4gYW55IFFFTVUgZW11bGF0aW9uLCBpdCYjMzk7cyBub3Qgd29ydGggdGhlIGVmZm9ydCBmb3IgZnV6emluZy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2FudGVkIHRvIGRvdWJsZS1jaGVjayBpZiBgcWNhOGtgIGlzIGVtdWxhdGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBkc2FfbG9vcGAuIE5vcGUuIGBkc2FfbG9vcGAgaXMgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIGRyaXZlciwgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgLiBJcyB0aGVyZSBhbnkgb3RoZXIgZW11bGF0aW9uIHRvIGNvbnNpZGVyPyBOb3BlLgoKU28sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nIEkmIzM5O2xsIHByb3ZpZGU6CgomIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBEU0Egc3dpdGNoIGRyaXZlciAoYHFjYThrYCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBvdGhlciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuJiMzNDsKCkkmIzM5O2xsIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWUgZm9yIGFueSBgcWNhOGtgIHJlZmVyZW5jZXMgaW4gYGFyY2gvdW1gIG9yIGFueXRoaW5nIHNpbWlsYXIuLi5Ob3BlLiBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgRFNBIHN3aXRjaCBkcml2ZXIgKHFjYThrKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChxY2E4aykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjI6NTEuMzY5MTk2MjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4MTM1OTc1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChxY2E4aykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMjo1MS4zNjkyMDQ0MTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjM0NTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwODY1ZWY0OTI2N2FjYTJhNmE5ZmZiM2RmYjIxMDg2YzA2YTgxZDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxNjoyMjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXFxuaW5kZXggNGM5Mjg5ODNiODYyMy4uNGFmOTJkNTFmMDQ2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXFxuQEAgLTEwODcsMjIgKzEwODcsNiBAQCBxY2E4a19zZXR1cF9tYWNfcHdyX3NlbChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBxY2E4a19maW5kX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4te1xcbi1cXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXG4tXFx0LyogRmluZCB0aGUgY29ubmVjdGVkIGNwdSBwb3J0LiBWYWxpZCBwb3J0IGFyZSAwIG9yIDYgKi9cXG4tXFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgMCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0ZGV2X2RiZyhwcml2LVxcdTAwM2VkZXYsIFxcXCJwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2XFxcIik7XFxuLVxcbi1cXHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCA2KSlcXG4tXFx0XFx0cmV0dXJuIDY7XFxuLVxcbi1cXHRyZXR1cm4gLUVJTlZBTDtcXG4tfVxcbi1cXG4gc3RhdGljIGludFxcbiBxY2E4a19zZXR1cF9vZl9wd3NfcmVnKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbiB7XFxuQEAgLTE3NTksNiArMTc0MywxMzkgQEAgcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gRFNBX1RBR19QUk9UT19RQ0E7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9nZXRfY29uZHVpdF9tZW1iZXJzaGlwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyICp1c2VyX21lbWJlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyICpjcHVfbWVtYmVycylcXG4re1xcbitcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqdXNlcl9tZW1iZXJzID0gdmFsIFxcdTAwMjYgZHNhX2NwdV9wb3J0cyhkcyk7XFxuK1xcdCpjcHVfbWVtYmVycyA9IDA7XFxuK1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHtcXG4rXFx0XFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLFxcbitcXHRcXHRcXHRcXHQgIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVxcdTAwM2VpbmRleCksIFxcdTAwMjZ2YWwpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IEJJVChwb3J0KSlcXG4rXFx0XFx0XFx0KmNwdV9tZW1iZXJzIHw9IEJJVChjcHVfZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyIHVzZXJfbWVtYmVycyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgY3B1X21lbWJlcnMpXFxuK3tcXG4rXFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLFxcbitcXHRcXHRcXHRcXHQgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcXG4rXFx0XFx0XFx0XFx0IGRzYV9jcHVfcG9ydHMoZHMpLCB1c2VyX21lbWJlcnMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XFxuK1xcdFxcdHUzMiBtZW1iZXIgPSBjcHVfbWVtYmVycyBcXHUwMDI2IEJJVChjcHVfZHAtXFx1MDAzZWluZGV4KSA/IEJJVChwb3J0KSA6IDA7XFxuK1xcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfZHAtXFx1MDAzZWluZGV4KSxcXG4rXFx0XFx0XFx0XFx0XFx0IEJJVChwb3J0KSwgbWVtYmVyKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHR1MzIgY3B1X3BvcnRfbWFzaywgb2xkX2NwdV9tZW1iZXJzLCBvbGRfdXNlcl9tZW1iZXJzO1xcbitcXHRpbnQgcmVzdG9yZV9yZXQsIHJldDtcXG4rXFxuK1xcdHJldCA9IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKGRzLCBjb25kdWl0LCBcXHUwMDI2Y3B1X3BvcnRfbWFzaywgZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHFjYThrX3BvcnRfZ2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgXFx1MDAyNm9sZF91c2VyX21lbWJlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZvbGRfY3B1X21lbWJlcnMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKGRzLCBwb3J0LCBjcHVfcG9ydF9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRjcHVfcG9ydF9tYXNrKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmVzdG9yZV9yZXQgPSBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG9sZF91c2VyX21lbWJlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG9sZF9jcHVfbWVtYmVycyk7XFxuK1xcdGlmIChyZXN0b3JlX3JldClcXG4rXFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdG8gcmVzdG9yZSBjb25kdWl0IG1lbWJlcnNoaXAgZm9yIHBvcnQgJWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgRVJSX1BUUihyZXN0b3JlX3JldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRzYV9sYWcgbGFnKVxcbit7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0aWYgKGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApICE9IGxhZy5kZXYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cmV0ID0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChkcywgZHAtXFx1MDAzZWluZGV4LCBsYWcuZGV2LCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRzYV9sYWcgbGFnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBxY2E4a19wb3J0X2xhZ19qb2luKGRzLCBwb3J0LCBsYWcsIGluZm8sIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcWNhOGtfbGFnX3JlZnJlc2hfY29uZHVpdF9wb3J0cyhkcywgbGFnKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBxY2E4a19wb3J0X2xhZ19sZWF2ZV93aXRoX2NvbmR1aXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkc2FfbGFnIGxhZylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcWNhOGtfcG9ydF9sYWdfbGVhdmUoZHMsIHBvcnQsIGxhZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcWNhOGtfbGFnX3JlZnJlc2hfY29uZHVpdF9wb3J0cyhkcywgbGFnKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gcWNhOGtfY29uZHVpdF9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4gXFx0XFx0ICAgICBib29sIG9wZXJhdGlvbmFsKVxcbkBAIC0xODQ0LDEzICsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4ge1xcbiBcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbi1cXHRpbnQgY3B1X3BvcnQsIHJldDtcXG4tXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiBjcHVfcG9ydHMsIG1hc2s7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRjcHVfcG9ydCA9IHFjYThrX2ZpbmRfY3B1X3BvcnQoZHMpO1xcbi1cXHRpZiAoY3B1X3BvcnQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiTm8gY3B1IHBvcnQgY29uZmlndXJlZCBpbiBib3RoIGNwdSBwb3J0MCBhbmQgcG9ydDZcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIGNwdV9wb3J0O1xcbitcXHRjcHVfcG9ydHMgPSBkc2FfY3B1X3BvcnRzKGRzKTtcXG4rXFx0aWYgKCFjcHVfcG9ydHMgfHwgY3B1X3BvcnRzIFxcdTAwMjYgfihCSVQoMCkgfCBCSVQoNikpKSB7XFxuK1xcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiQ1BVIHBvcnRzIG11c3QgYmUgcG9ydCAwIG9yIDZcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFBhcnNlIENQVSBwb3J0IGNvbmZpZyB0byBiZSBsYXRlciB1c2VkIGluIHBoeV9saW5rIG1hY19jb25maWcgKi9cXG5AQCAtMTkwMCw5ICsyMDE3LDEwIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIFxcdC8qIEluaXRpYWwgc2V0dXAgb2YgYWxsIHBvcnRzICovXFxuIFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4tXFx0XFx0LyogRGlzYWJsZSBmb3J3YXJkaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovXFxuK1xcdFxcdC8qIERpc2FibGUgZm9yd2FyZGluZyBhbmQgbGVhcm5pbmcgYnkgZGVmYXVsdCBvbiBhbGwgcG9ydHMgKi9cXG4gXFx0XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoZHAtXFx1MDAzZWluZGV4KSxcXG4tXFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCAwKTtcXG4rXFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSIHxcXG4rXFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTEVBUk4sIDApO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuQEAgLTE5MjIsMjggKzIwNDAsMjAgQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdC8qIEZvcndhcmQgYWxsIHVua25vd24gZnJhbWVzIHRvIENQVSBwb3J0IGZvciBMaW51eCBwcm9jZXNzaW5nXFxuLVxcdCAqIE5vdGljZSB0aGF0IGluIG11bHRpLWNwdSBjb25maWcgb25seSBvbmUgcG9ydCBzaG91bGQgYmUgc2V0XFxuLVxcdCAqIGZvciBpZ21wLCB1bmtub3duLCBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBwYWNrZXRcXG4rXFx0LyogRm9yd2FyZCB1bmtub3duIGZyYW1lcyB0byBldmVyeSBDUFUgcG9ydC4gVGhlIGluZ3Jlc3MgcG9ydCBsb29rdXBcXG4rXFx0ICogbWVtYmVyc2hpcCByZXN0cmljdHMgZWFjaCBmcmFtZSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSBxY2E4a193cml0ZShwcml2LCBRQ0E4S19SRUdfR0xPQkFMX0ZXX0NUUkwxLFxcbi1cXHRcXHRcXHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxcbi1cXHRcXHRcXHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0JDX0RQX01BU0ssIEJJVChjcHVfcG9ydCkpIHxcXG4tXFx0XFx0XFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XFxuLVxcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkpO1xcbitcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgY3B1X3BvcnRzKSB8XFxuK1xcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfQkNfRFBfTUFTSywgY3B1X3BvcnRzKSB8XFxuK1xcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfTUNfRFBfTUFTSywgY3B1X3BvcnRzKSB8XFxuK1xcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgY3B1X3BvcnRzKSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQvKiBDUFUgcG9ydCBnZXRzIGNvbm5lY3RlZCB0byBhbGwgdXNlciBwb3J0cyBvZiB0aGUgc3dpdGNoICovXFxuLVxcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9wb3J0KSxcXG4tXFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCBkc2FfdXNlcl9wb3J0cyhkcykpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0LyogU2V0dXAgY29ubmVjdGlvbiBiZXR3ZWVuIENQVSBwb3J0IFxcdTAwMjYgdXNlciBwb3J0c1xcbi1cXHQgKiBJbmRpdmlkdWFsIHVzZXIgcG9ydHMgZ2V0IGNvbm5lY3RlZCB0byBDUFUgcG9ydCBvbmx5XFxuLVxcdCAqL1xcbitcXHQvKiBDb25uZWN0IGVhY2ggdXNlciBwb3J0IGJpZGlyZWN0aW9uYWxseSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuICovXFxuIFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xcbitcXHRcXHR1OCBjcHVfcG9ydCA9IGRwLVxcdTAwM2VjcHVfZHAtXFx1MDAzZWluZGV4O1xcbiBcXHRcXHR1OCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbiBcXG4gXFx0XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksXFxuQEAgLTE5NTIsOCArMjA2Miw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdFxcdHJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcXG4tXFx0XFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTEVBUk4pO1xcbitcXHRcXHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXFxuK1xcdFxcdFxcdFxcdEJJVChwb3J0KSwgQklUKHBvcnQpKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIwMDgsNiArMjExOCw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0LyogU2V0IG1heCBudW1iZXIgb2YgTEFHcyBzdXBwb3J0ZWQgKi9cXG4gXFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gUUNBOEtfTlVNX0xBR1M7XFxuIFxcbitcXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTIwNDAsNiArMjE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcWNhOGtfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBvcnRfZmRiX2FkZFxcdFxcdD0gcWNhOGtfcG9ydF9mZGJfYWRkLFxcbiBcXHQucG9ydF9mZGJfZGVsXFx0XFx0PSBxY2E4a19wb3J0X2ZkYl9kZWwsXFxuIFxcdC5wb3J0X2ZkYl9kdW1wXFx0XFx0PSBxY2E4a19wb3J0X2ZkYl9kdW1wLFxcbitcXHQubGFnX2ZkYl9hZGRcXHRcXHQ9IHFjYThrX2xhZ19mZGJfYWRkLFxcbitcXHQubGFnX2ZkYl9kZWxcXHRcXHQ9IHFjYThrX2xhZ19mZGJfZGVsLFxcbiBcXHQucG9ydF9tZGJfYWRkXFx0XFx0PSBxY2E4a19wb3J0X21kYl9hZGQsXFxuIFxcdC5wb3J0X21kYl9kZWxcXHRcXHQ9IHFjYThrX3BvcnRfbWRiX2RlbCxcXG4gXFx0LnBvcnRfbWlycm9yX2FkZFxcdD0gcWNhOGtfcG9ydF9taXJyb3JfYWRkLFxcbkBAIC0yMDQ5LDggKzIxNjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHFjYThrX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBxY2E4a19wb3J0X3ZsYW5fZGVsLFxcbiBcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0gcWNhOGtfcGh5bGlua19nZXRfY2FwcyxcXG4gXFx0LmdldF9waHlfZmxhZ3NcXHRcXHQ9IHFjYThrX2dldF9waHlfZmxhZ3MsXFxuLVxcdC5wb3J0X2xhZ19qb2luXFx0XFx0PSBxY2E4a19wb3J0X2xhZ19qb2luLFxcbi1cXHQucG9ydF9sYWdfbGVhdmVcXHRcXHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlLFxcbitcXHQucG9ydF9sYWdfam9pblxcdFxcdD0gcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzLFxcbitcXHQucG9ydF9sYWdfbGVhdmVcXHRcXHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMsXFxuK1xcdC5wb3J0X2NoYW5nZV9jb25kdWl0XFx0PSBxY2E4a19wb3J0X2NoYW5nZV9jb25kdWl0LFxcbiBcXHQuY29uZHVpdF9zdGF0ZV9jaGFuZ2VcXHQ9IHFjYThrX2NvbmR1aXRfY2hhbmdlLFxcbiBcXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHQ9IHFjYThrX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xcbmluZGV4IDEzMDA1ZjEwZWRiN2QuLjczZTM2ZjVmYjM1ODUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmNcXG5AQCAtMzIyLDYgKzMyMiwzNiBAQCBzdGF0aWMgaW50IHFjYThrX2ZkYl9zZWFyY2hfYW5kX2RlbChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTggcG9ydF9tYXNrLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHFjYThrX2ZkYl9wdXJnZV9keW5hbWljKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBjb25zdCB1OCAqbWFjLFxcbitcXHRcXHRcXHRcXHQgICB1MTYgdmlkKVxcbit7XFxuK1xcdHN0cnVjdCBxY2E4a19mZGIgZmRiID0geyAwIH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbXV0ZXgpO1xcbitcXG4rXFx0cWNhOGtfZmRiX3dyaXRlKHByaXYsIHZpZCwgMCwgbWFjLCAwKTtcXG4rXFx0cmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfU0VBUkNILCAtMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsIFxcdTAwMjZmZGIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBLZWVwIGRlbGliZXJhdGVseSBjb25maWd1cmVkIHN0YXRpYyBlbnRyaWVzLiAqL1xcbitcXHRpZiAoIWZkYi5hZ2luZyB8fCBmZGIuYWdpbmcgPT0gUUNBOEtfQVRVX1NUQVRVU19TVEFUSUMpIHtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHFjYThrX2ZkYl9hY2Nlc3MocHJpdiwgUUNBOEtfRkRCX1BVUkdFLCAtMSk7XFxuK1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX211dGV4KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBxY2E4a192bGFuX2FjY2VzcyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICBlbnVtIHFjYThrX3ZsYW5fY21kIGNtZCwgdTE2IHZpZClcXG4ge1xcbkBAIC02MDcsMTUgKzYzNyw2MCBAQCB2b2lkIHFjYThrX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSlcXG4gXFx0cWNhOGtfcG9ydF9jb25maWd1cmVfbGVhcm5pbmcoZHMsIHBvcnQsIGxlYXJuaW5nKTtcXG4gfVxcbiBcXG4raW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxcbitcXHRcXHRcXHQgICAgdTMyICpwb3J0X21hc2ssXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtXFx1MDAzZWRzdDtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IGlkO1xcbitcXG4rXFx0KnBvcnRfbWFzayA9IDA7XFxuK1xcbitcXHRpZiAoIW5ldGlmX2lzX2xhZ19tYXN0ZXIoY29uZHVpdCkpIHtcXG4rXFx0XFx0ZHAgPSBjb25kdWl0LVxcdTAwM2Vkc2FfcHRyO1xcbitcXHRcXHRpZiAoIWRwIHx8IGRwLVxcdTAwM2VkcyAhPSBkcyB8fCAhZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ29uZHVpdCBpcyBub3QgYSBsb2NhbCBDUFUgcG9ydFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdCpwb3J0X21hc2sgPSBCSVQoZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlkID0gZHNhX2xhZ19pZChkc3QsIGNvbmR1aXQpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gaWQ7XFxuK1xcbitcXHRkc2FfbGFnX2ZvcmVhY2hfcG9ydChkcCwgZHN0LCBkc2FfbGFnX2J5X2lkKGRzdCwgaWQpKVxcbitcXHRcXHRpZiAoZHAtXFx1MDAzZWRzID09IGRzIFxcdTAwMjZcXHUwMDI2IGRzYV9wb3J0X2lzX2NwdShkcCkpXFxuK1xcdFxcdFxcdCpwb3J0X21hc2sgfD0gQklUKGRwLVxcdTAwM2VpbmRleCk7XFxuK1xcbitcXHRpZiAoISpwb3J0X21hc2spIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkNvbmR1aXQgTEFHIGhhcyBubyBsb2NhbCBDUFUgcG9ydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHFjYThrX3VwZGF0ZV9wb3J0X21lbWJlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldixcXG4gXFx0XFx0XFx0XFx0ICAgIGJvb2wgam9pbilcXG4ge1xcbiBcXHRib29sIGlzb2xhdGVkID0gISEocHJpdi1cXHUwMDNlcG9ydF9pc29sYXRlZF9tYXAgXFx1MDAyNiBCSVQocG9ydCkpLCBvdGhlcl9pc29sYXRlZDtcXG4gXFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KHByaXYtXFx1MDAzZWRzLCBwb3J0KSwgKm90aGVyX2RwO1xcbi1cXHR1MzIgcG9ydF9tYXNrID0gQklUKGRwLVxcdTAwM2VjcHVfZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0dTMyIHBvcnRfbWFzaztcXG4gXFx0aW50IGksIHJldDtcXG4gXFxuK1xcdHJldCA9IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHByaXYtXFx1MDAzZWRzLCBkc2FfcG9ydF90b19jb25kdWl0KGRwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBvcnRfbWFzaywgTlVMTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUUNBOEtfTlVNX1BPUlRTOyBpKyspIHtcXG4gXFx0XFx0aWYgKGkgPT0gcG9ydClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTgyOSw2ICs5MDQsMTQgQEAgaW50IHFjYThrX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHR1MTYgcG9ydF9tYXNrID0gQklUKHBvcnQpO1xcbiBcXG4rXFx0LyogVW5rbm93biB1bmljYXN0IGZsb29kaW5nIGRlbGl2ZXJzIGhvc3QgdHJhZmZpYyB0byB0aGUgY29uZHVpdC4gKi9cXG4rXFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcXG4rXFx0XFx0aWYgKCF2aWQpXFxuK1xcdFxcdFxcdHZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjtcXG4rXFxuK1xcdFxcdHJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gcWNhOGtfcG9ydF9mZGJfaW5zZXJ0KHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcXG4gfVxcbiBcXG5AQCAtODM5LDYgKzkyMiw5IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0dTE2IHBvcnRfbWFzayA9IEJJVChwb3J0KTtcXG4gXFxuK1xcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGlmICghdmlkKVxcbiBcXHRcXHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XFxuIFxcbkBAIC04NjgsNiArOTU0LDc1IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdTggcWNhOGtfbGFnX3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkc2FfbGFnICpsYWcpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTggcG9ydF9tYXNrID0gMDtcXG4rXFxuK1xcdGRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy1cXHUwMDNlZHN0LCBsYWcpXFxuK1xcdFxcdGlmIChkcC1cXHUwMDNlZHMgPT0gZHMpXFxuK1xcdFxcdFxcdHBvcnRfbWFzayB8PSBCSVQoZHAtXFx1MDAzZWluZGV4KTtcXG4rXFxuK1xcdHJldHVybiBwb3J0X21hc2s7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHFjYThrX2xhZ19pc19jcHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkc2FfbGFnICpsYWcpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0Ym9vbCBoYXNfY3B1ID0gZmFsc2U7XFxuK1xcbitcXHRkc2FfbGFnX2ZvcmVhY2hfcG9ydChkcCwgZHMtXFx1MDAzZWRzdCwgbGFnKSB7XFxuK1xcdFxcdGlmIChkcC1cXHUwMDNlZHMgIT0gZHMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFkc2FfcG9ydF9pc19jcHUoZHApKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRoYXNfY3B1ID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGhhc19jcHU7XFxuK31cXG4rXFxuK2ludCBxY2E4a19sYWdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZyxcXG4rXFx0XFx0ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYilcXG4re1xcbitcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHR1OCBwb3J0X21hc2s7XFxuK1xcbitcXHRwb3J0X21hc2sgPSBxY2E4a19sYWdfcG9ydF9tYXNrKGRzLCBcXHUwMDI2bGFnKTtcXG4rXFxuK1xcdGlmIChxY2E4a19sYWdfaXNfY3B1KGRzLCBcXHUwMDI2bGFnKSkge1xcbitcXHRcXHRpZiAoIXZpZClcXG4rXFx0XFx0XFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xcbitcXG4rXFx0XFx0cmV0dXJuIHFjYThrX2ZkYl9wdXJnZV9keW5hbWljKHByaXYsIGFkZHIsIHZpZCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpO1xcbit9XFxuK1xcbitpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXFxuK1xcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpXFxuK3tcXG4rXFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0dTggcG9ydF9tYXNrO1xcbitcXG4rXFx0aWYgKHFjYThrX2xhZ19pc19jcHUoZHMsIFxcdTAwMjZsYWcpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghdmlkKVxcbitcXHRcXHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XFxuK1xcbitcXHRwb3J0X21hc2sgPSBxY2E4a19sYWdfcG9ydF9tYXNrKGRzLCBcXHUwMDI2bGFnKTtcXG4rXFxuK1xcdHJldHVybiBxY2E4a19mZGJfZGVsKHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcXG4rfVxcbitcXG4gaW50IHFjYThrX3BvcnRfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaCBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaFxcbmluZGV4IDk1NjMzODg5MzAzMjUuLjMzM2IzNDM4ODZkZWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXFxuQEAgLTUyMyw2ICs1MjMsMTAgQEAgaW50IHFjYThrX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KTtcXG4gaW50IHFjYThrX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSk7XFxuIFxcbiAvKiBDb21tb24gYnJpZGdlIGZ1bmN0aW9uICovXFxuK2ludCBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4rXFx0XFx0XFx0ICAgIHUzMiAqcG9ydF9tYXNrLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpO1xcbiBpbnQgcWNhOGtfcG9ydF9wcmVfYnJpZGdlX2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBzd2l0Y2hkZXZfYnJwb3J0X2ZsYWdzIGZsYWdzLFxcbkBAIC01NjEsNiArNTY1LDEyIEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xcbiBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHRkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpO1xcbitpbnQgcWNhOGtfbGFnX2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXFxuK1xcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xcbitpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXFxuK1xcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xcbiBcXG4gLyogQ29tbW9uIE1EQiBmdW5jdGlvbiAqL1xcbiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIyOjUxLjkwMzU2MjY3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMjc5MjIxNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBEU0Egc3dpdGNoIGRyaXZlciAocWNhOGspLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoIGNoaXBzIGNvbm5lY3RlZCB2aWEgTURJTykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzA4NjVlZjQ5MjY3YWNhMmE2YTlmZmIzZGZiMjEwODZjMDZhODFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6MjI6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXG5pbmRleCA0YzkyODk4M2I4NjIzLi40YWY5MmQ1MWYwNDY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXG5AQCAtMTA4NywyMiArMTA4Nyw2IEBAIHFjYThrX3NldHVwX21hY19wd3Jfc2VsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBxY2E4a19maW5kX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi17XG4tXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4tXG4tXHQvKiBGaW5kIHRoZSBjb25uZWN0ZWQgY3B1IHBvcnQuIFZhbGlkIHBvcnQgYXJlIDAgb3IgNiAqL1xuLVx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZGV2X2RiZyhwcml2LVx1MDAzZWRldiwgXCJwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2XCIpO1xuLVxuLVx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgNikpXG4tXHRcdHJldHVybiA2O1xuLVxuLVx0cmV0dXJuIC1FSU5WQUw7XG4tfVxuLVxuIHN0YXRpYyBpbnRcbiBxY2E4a19zZXR1cF9vZl9wd3NfcmVnKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuIHtcbkBAIC0xNzU5LDYgKzE3NDMsMTM5IEBAIHFjYThrX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiBEU0FfVEFHX1BST1RPX1FDQTtcbiB9XG4gXG4rc3RhdGljIGludCBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0ICAgICB1MzIgKnVzZXJfbWVtYmVycyxcbitcdFx0XHRcdFx0ICAgICB1MzIgKmNwdV9tZW1iZXJzKVxuK3tcbitcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqdXNlcl9tZW1iZXJzID0gdmFsIFx1MDAyNiBkc2FfY3B1X3BvcnRzKGRzKTtcbitcdCpjcHVfbWVtYmVycyA9IDA7XG4rXG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHtcbitcdFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cdTAwM2VyZWdtYXAsXG4rXHRcdFx0XHQgIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVx1MDAzZWluZGV4KSwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRpZiAodmFsIFx1MDAyNiBCSVQocG9ydCkpXG4rXHRcdFx0KmNwdV9tZW1iZXJzIHw9IEJJVChjcHVfZHAtXHUwMDNlaW5kZXgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHRcdCAgICAgdTMyIHVzZXJfbWVtYmVycyxcbitcdFx0XHRcdFx0ICAgICB1MzIgY3B1X21lbWJlcnMpXG4re1xuK1x0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLFxuK1x0XHRcdFx0IFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksXG4rXHRcdFx0XHQgZHNhX2NwdV9wb3J0cyhkcyksIHVzZXJfbWVtYmVycyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XG4rXHRcdHUzMiBtZW1iZXIgPSBjcHVfbWVtYmVycyBcdTAwMjYgQklUKGNwdV9kcC1cdTAwM2VpbmRleCkgPyBCSVQocG9ydCkgOiAwO1xuK1xuK1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsXG4rXHRcdFx0XHRcdCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9kcC1cdTAwM2VpbmRleCksXG4rXHRcdFx0XHRcdCBCSVQocG9ydCksIG1lbWJlcik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHFjYThrX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXHR1MzIgY3B1X3BvcnRfbWFzaywgb2xkX2NwdV9tZW1iZXJzLCBvbGRfdXNlcl9tZW1iZXJzO1xuK1x0aW50IHJlc3RvcmVfcmV0LCByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhkcywgY29uZHVpdCwgXHUwMDI2Y3B1X3BvcnRfbWFzaywgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsIFx1MDAyNm9sZF91c2VyX21lbWJlcnMsXG4rXHRcdFx0XHRcdFx0XHUwMDI2b2xkX2NwdV9tZW1iZXJzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsIGNwdV9wb3J0X21hc2ssXG4rXHRcdFx0XHRcdFx0Y3B1X3BvcnRfbWFzayk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXN0b3JlX3JldCA9IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCxcbitcdFx0XHRcdFx0XHRcdG9sZF91c2VyX21lbWJlcnMsXG4rXHRcdFx0XHRcdFx0XHRvbGRfY3B1X21lbWJlcnMpO1xuK1x0aWYgKHJlc3RvcmVfcmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmFpbGVkIHRvIHJlc3RvcmUgY29uZHVpdCBtZW1iZXJzaGlwIGZvciBwb3J0ICVkOiAlcGVcXG5cIixcbitcdFx0XHRwb3J0LCBFUlJfUFRSKHJlc3RvcmVfcmV0KSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgZHNhX2xhZyBsYWcpXG4re1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXQ7XG4rXG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbitcdFx0aWYgKGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApICE9IGxhZy5kZXYpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHJldCA9IHFjYThrX3BvcnRfY2hhbmdlX2NvbmR1aXQoZHMsIGRwLVx1MDAzZWluZGV4LCBsYWcuZGV2LCBOVUxMKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGRzYV9sYWcgbGFnLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19wb3J0X2xhZ19qb2luKGRzLCBwb3J0LCBsYWcsIGluZm8sIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoZHMsIGxhZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfbGVhdmVfd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZHNhX2xhZyBsYWcpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHFjYThrX3BvcnRfbGFnX2xlYXZlKGRzLCBwb3J0LCBsYWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKGRzLCBsYWcpO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIHFjYThrX2NvbmR1aXRfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4gXHRcdCAgICAgYm9vbCBvcGVyYXRpb25hbClcbkBAIC0xODQ0LDEzICsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuLVx0aW50IGNwdV9wb3J0LCByZXQ7XG4tXHR1MzIgbWFzaztcbitcdHUzMiBjcHVfcG9ydHMsIG1hc2s7XG4rXHRpbnQgcmV0O1xuIFxuLVx0Y3B1X3BvcnQgPSBxY2E4a19maW5kX2NwdV9wb3J0KGRzKTtcbi1cdGlmIChjcHVfcG9ydCBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcIk5vIGNwdSBwb3J0IGNvbmZpZ3VyZWQgaW4gYm90aCBjcHUgcG9ydDAgYW5kIHBvcnQ2XCIpO1xuLVx0XHRyZXR1cm4gY3B1X3BvcnQ7XG4rXHRjcHVfcG9ydHMgPSBkc2FfY3B1X3BvcnRzKGRzKTtcbitcdGlmICghY3B1X3BvcnRzIHx8IGNwdV9wb3J0cyBcdTAwMjYgfihCSVQoMCkgfCBCSVQoNikpKSB7XG4rXHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwiQ1BVIHBvcnRzIG11c3QgYmUgcG9ydCAwIG9yIDZcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0LyogUGFyc2UgQ1BVIHBvcnQgY29uZmlnIHRvIGJlIGxhdGVyIHVzZWQgaW4gcGh5X2xpbmsgbWFjX2NvbmZpZyAqL1xuQEAgLTE5MDAsOSArMjAxNywxMCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXG4gXHQvKiBJbml0aWFsIHNldHVwIG9mIGFsbCBwb3J0cyAqL1xuIFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuLVx0XHQvKiBEaXNhYmxlIGZvcndhcmRpbmcgYnkgZGVmYXVsdCBvbiBhbGwgcG9ydHMgKi9cbitcdFx0LyogRGlzYWJsZSBmb3J3YXJkaW5nIGFuZCBsZWFybmluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuIFx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChkcC1cdTAwM2VpbmRleCksXG4tXHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9NRU1CRVIsIDApO1xuK1x0XHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSIHxcbitcdFx0XHRcdFFDQThLX1BPUlRfTE9PS1VQX0xFQVJOLCAwKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuQEAgLTE5MjIsMjggKzIwNDAsMjAgQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBGb3J3YXJkIGFsbCB1bmtub3duIGZyYW1lcyB0byBDUFUgcG9ydCBmb3IgTGludXggcHJvY2Vzc2luZ1xuLVx0ICogTm90aWNlIHRoYXQgaW4gbXVsdGktY3B1IGNvbmZpZyBvbmx5IG9uZSBwb3J0IHNob3VsZCBiZSBzZXRcbi1cdCAqIGZvciBpZ21wLCB1bmtub3duLCBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBwYWNrZXRcbitcdC8qIEZvcndhcmQgdW5rbm93biBmcmFtZXMgdG8gZXZlcnkgQ1BVIHBvcnQuIFRoZSBpbmdyZXNzIHBvcnQgbG9va3VwXG4rXHQgKiBtZW1iZXJzaGlwIHJlc3RyaWN0cyBlYWNoIGZyYW1lIHRvIGl0cyBhc3NpZ25lZCBDUFUgcG9ydC5cbiBcdCAqL1xuIFx0cmV0ID0gcWNhOGtfd3JpdGUocHJpdiwgUUNBOEtfUkVHX0dMT0JBTF9GV19DVFJMMSxcbi1cdFx0XHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfQkNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfTUNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkpO1xuK1x0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfSUdNUF9EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbitcdFx0XHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0JDX0RQX01BU0ssIGNwdV9wb3J0cykgfFxuK1x0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfTUNfRFBfTUFTSywgY3B1X3BvcnRzKSB8XG4rXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9VQ19EUF9NQVNLLCBjcHVfcG9ydHMpKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBDUFUgcG9ydCBnZXRzIGNvbm5lY3RlZCB0byBhbGwgdXNlciBwb3J0cyBvZiB0aGUgc3dpdGNoICovXG4tXHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXG4tXHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCBkc2FfdXNlcl9wb3J0cyhkcykpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIFNldHVwIGNvbm5lY3Rpb24gYmV0d2VlbiBDUFUgcG9ydCBcdTAwMjYgdXNlciBwb3J0c1xuLVx0ICogSW5kaXZpZHVhbCB1c2VyIHBvcnRzIGdldCBjb25uZWN0ZWQgdG8gQ1BVIHBvcnQgb25seVxuLVx0ICovXG4rXHQvKiBDb25uZWN0IGVhY2ggdXNlciBwb3J0IGJpZGlyZWN0aW9uYWxseSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuICovXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbitcdFx0dTggY3B1X3BvcnQgPSBkcC1cdTAwM2VjcHVfZHAtXHUwMDNlaW5kZXg7XG4gXHRcdHU4IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbiBcbiBcdFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksXG5AQCAtMTk1Miw4ICsyMDYyLDggQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4tXHRcdHJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLFxuLVx0XHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9MRUFSTik7XG4rXHRcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9wb3J0KSxcbitcdFx0XHRcdEJJVChwb3J0KSwgQklUKHBvcnQpKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIwMDgsNiArMjExOCw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdC8qIFNldCBtYXggbnVtYmVyIG9mIExBR3Mgc3VwcG9ydGVkICovXG4gXHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFFDQThLX05VTV9MQUdTO1xuIFxuK1x0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIwNDAsNiArMjE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcWNhOGtfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2ZkYl9hZGRcdFx0PSBxY2E4a19wb3J0X2ZkYl9hZGQsXG4gXHQucG9ydF9mZGJfZGVsXHRcdD0gcWNhOGtfcG9ydF9mZGJfZGVsLFxuIFx0LnBvcnRfZmRiX2R1bXBcdFx0PSBxY2E4a19wb3J0X2ZkYl9kdW1wLFxuK1x0LmxhZ19mZGJfYWRkXHRcdD0gcWNhOGtfbGFnX2ZkYl9hZGQsXG4rXHQubGFnX2ZkYl9kZWxcdFx0PSBxY2E4a19sYWdfZmRiX2RlbCxcbiBcdC5wb3J0X21kYl9hZGRcdFx0PSBxY2E4a19wb3J0X21kYl9hZGQsXG4gXHQucG9ydF9tZGJfZGVsXHRcdD0gcWNhOGtfcG9ydF9tZGJfZGVsLFxuIFx0LnBvcnRfbWlycm9yX2FkZFx0PSBxY2E4a19wb3J0X21pcnJvcl9hZGQsXG5AQCAtMjA0OSw4ICsyMTYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfdmxhbl9kZWxcdFx0PSBxY2E4a19wb3J0X3ZsYW5fZGVsLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0gcWNhOGtfcGh5bGlua19nZXRfY2FwcyxcbiBcdC5nZXRfcGh5X2ZsYWdzXHRcdD0gcWNhOGtfZ2V0X3BoeV9mbGFncyxcbi1cdC5wb3J0X2xhZ19qb2luXHRcdD0gcWNhOGtfcG9ydF9sYWdfam9pbixcbi1cdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlLFxuK1x0LnBvcnRfbGFnX2pvaW5cdFx0PSBxY2E4a19wb3J0X2xhZ19qb2luX3dpdGhfY29uZHVpdHMsXG4rXHQucG9ydF9sYWdfbGVhdmVcdFx0PSBxY2E4a19wb3J0X2xhZ19sZWF2ZV93aXRoX2NvbmR1aXRzLFxuK1x0LnBvcnRfY2hhbmdlX2NvbmR1aXRcdD0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdCxcbiBcdC5jb25kdWl0X3N0YXRlX2NoYW5nZVx0PSBxY2E4a19jb25kdWl0X2NoYW5nZSxcbiBcdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0PSBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jXG5pbmRleCAxMzAwNWYxMGVkYjdkLi43M2UzNmY1ZmIzNTg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuQEAgLTMyMiw2ICszMjIsMzYgQEAgc3RhdGljIGludCBxY2E4a19mZGJfc2VhcmNoX2FuZF9kZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIHU4IHBvcnRfbWFzayxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcWNhOGtfZmRiX3B1cmdlX2R5bmFtaWMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGNvbnN0IHU4ICptYWMsXG4rXHRcdFx0XHQgICB1MTYgdmlkKVxuK3tcbitcdHN0cnVjdCBxY2E4a19mZGIgZmRiID0geyAwIH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19tdXRleCk7XG4rXG4rXHRxY2E4a19mZGJfd3JpdGUocHJpdiwgdmlkLCAwLCBtYWMsIDApO1xuK1x0cmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfU0VBUkNILCAtMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsIFx1MDAyNmZkYik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEtlZXAgZGVsaWJlcmF0ZWx5IGNvbmZpZ3VyZWQgc3RhdGljIGVudHJpZXMuICovXG4rXHRpZiAoIWZkYi5hZ2luZyB8fCBmZGIuYWdpbmcgPT0gUUNBOEtfQVRVX1NUQVRVU19TVEFUSUMpIHtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBxY2E4a19mZGJfYWNjZXNzKHByaXYsIFFDQThLX0ZEQl9QVVJHRSwgLTEpO1xuK1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19tdXRleCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IHFjYThrX3ZsYW5fYWNjZXNzKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LFxuIFx0XHRcdCAgICAgZW51bSBxY2E4a192bGFuX2NtZCBjbWQsIHUxNiB2aWQpXG4ge1xuQEAgLTYwNywxNSArNjM3LDYwIEBAIHZvaWQgcWNhOGtfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKVxuIFx0cWNhOGtfcG9ydF9jb25maWd1cmVfbGVhcm5pbmcoZHMsIHBvcnQsIGxlYXJuaW5nKTtcbiB9XG4gXG4raW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4rXHRcdFx0ICAgIHUzMiAqcG9ydF9tYXNrLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtXHUwMDNlZHN0O1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCBpZDtcbitcbitcdCpwb3J0X21hc2sgPSAwO1xuK1xuK1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKGNvbmR1aXQpKSB7XG4rXHRcdGRwID0gY29uZHVpdC1cdTAwM2Vkc2FfcHRyO1xuK1x0XHRpZiAoIWRwIHx8IGRwLVx1MDAzZWRzICE9IGRzIHx8ICFkc2FfcG9ydF9pc19jcHUoZHApKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJDb25kdWl0IGlzIG5vdCBhIGxvY2FsIENQVSBwb3J0XCIpO1xuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0fVxuK1xuK1x0XHQqcG9ydF9tYXNrID0gQklUKGRwLVx1MDAzZWluZGV4KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZCA9IGRzYV9sYWdfaWQoZHN0LCBjb25kdWl0KTtcbitcdGlmIChpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGlkO1xuK1xuK1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzdCwgZHNhX2xhZ19ieV9pZChkc3QsIGlkKSlcbitcdFx0aWYgKGRwLVx1MDAzZWRzID09IGRzIFx1MDAyNlx1MDAyNiBkc2FfcG9ydF9pc19jcHUoZHApKVxuK1x0XHRcdCpwb3J0X21hc2sgfD0gQklUKGRwLVx1MDAzZWluZGV4KTtcbitcbitcdGlmICghKnBvcnRfbWFzaykge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDb25kdWl0IExBRyBoYXMgbm8gbG9jYWwgQ1BVIHBvcnRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHFjYThrX3VwZGF0ZV9wb3J0X21lbWJlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4gXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXYsXG4gXHRcdFx0XHQgICAgYm9vbCBqb2luKVxuIHtcbiBcdGJvb2wgaXNvbGF0ZWQgPSAhIShwcml2LVx1MDAzZXBvcnRfaXNvbGF0ZWRfbWFwIFx1MDAyNiBCSVQocG9ydCkpLCBvdGhlcl9pc29sYXRlZDtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChwcml2LVx1MDAzZWRzLCBwb3J0KSwgKm90aGVyX2RwO1xuLVx0dTMyIHBvcnRfbWFzayA9IEJJVChkcC1cdTAwM2VjcHVfZHAtXHUwMDNlaW5kZXgpO1xuK1x0dTMyIHBvcnRfbWFzaztcbiBcdGludCBpLCByZXQ7XG4gXG4rXHRyZXQgPSBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhwcml2LVx1MDAzZWRzLCBkc2FfcG9ydF90b19jb25kdWl0KGRwKSxcbitcdFx0XHRcdCAgICAgIFx1MDAyNnBvcnRfbWFzaywgTlVMTCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUUNBOEtfTlVNX1BPUlRTOyBpKyspIHtcbiBcdFx0aWYgKGkgPT0gcG9ydClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC04MjksNiArOTA0LDE0IEBAIGludCBxY2E4a19wb3J0X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdHUxNiBwb3J0X21hc2sgPSBCSVQocG9ydCk7XG4gXG4rXHQvKiBVbmtub3duIHVuaWNhc3QgZmxvb2RpbmcgZGVsaXZlcnMgaG9zdCB0cmFmZmljIHRvIHRoZSBjb25kdWl0LiAqL1xuK1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcbitcdFx0aWYgKCF2aWQpXG4rXHRcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuK1xuK1x0XHRyZXR1cm4gcWNhOGtfZmRiX3B1cmdlX2R5bmFtaWMocHJpdiwgYWRkciwgdmlkKTtcbitcdH1cbitcbiBcdHJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpO1xuIH1cbiBcbkBAIC04MzksNiArOTIyLDkgQEAgaW50IHFjYThrX3BvcnRfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTE2IHBvcnRfbWFzayA9IEJJVChwb3J0KTtcbiBcbitcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghdmlkKVxuIFx0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4gXG5AQCAtODY4LDYgKzk1NCw3NSBAQCBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB1OCBxY2E4a19sYWdfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHNhX2xhZyAqbGFnKVxuK3tcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1OCBwb3J0X21hc2sgPSAwO1xuK1xuK1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzLVx1MDAzZWRzdCwgbGFnKVxuK1x0XHRpZiAoZHAtXHUwMDNlZHMgPT0gZHMpXG4rXHRcdFx0cG9ydF9tYXNrIHw9IEJJVChkcC1cdTAwM2VpbmRleCk7XG4rXG4rXHRyZXR1cm4gcG9ydF9tYXNrO1xuK31cbitcbitzdGF0aWMgYm9vbCBxY2E4a19sYWdfaXNfY3B1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc2FfbGFnICpsYWcpXG4re1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGJvb2wgaGFzX2NwdSA9IGZhbHNlO1xuK1xuK1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzLVx1MDAzZWRzdCwgbGFnKSB7XG4rXHRcdGlmIChkcC1cdTAwM2VkcyAhPSBkcylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFkc2FfcG9ydF9pc19jcHUoZHApKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aGFzX2NwdSA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaGFzX2NwdTtcbit9XG4rXG4raW50IHFjYThrX2xhZ19mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLFxuK1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuK1x0XHQgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKVxuK3tcbitcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHU4IHBvcnRfbWFzaztcbitcbitcdHBvcnRfbWFzayA9IHFjYThrX2xhZ19wb3J0X21hc2soZHMsIFx1MDAyNmxhZyk7XG4rXG4rXHRpZiAocWNhOGtfbGFnX2lzX2NwdShkcywgXHUwMDI2bGFnKSkge1xuK1x0XHRpZiAoIXZpZClcbitcdFx0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4rXG4rXHRcdHJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHFjYThrX3BvcnRfZmRiX2luc2VydChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7XG4rfVxuK1xuK2ludCBxY2E4a19sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZyxcbitcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCxcbitcdFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYilcbit7XG4rXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXHR1OCBwb3J0X21hc2s7XG4rXG4rXHRpZiAocWNhOGtfbGFnX2lzX2NwdShkcywgXHUwMDI2bGFnKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXZpZClcbitcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuK1xuK1x0cG9ydF9tYXNrID0gcWNhOGtfbGFnX3BvcnRfbWFzayhkcywgXHUwMDI2bGFnKTtcbitcbitcdHJldHVybiBxY2E4a19mZGJfZGVsKHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcbit9XG4rXG4gaW50IHFjYThrX3BvcnRfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcbiBcdFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXG5pbmRleCA5NTYzMzg4OTMwMzI1Li4zMzNiMzQzODg2ZGVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhcbkBAIC01MjMsNiArNTIzLDEwIEBAIGludCBxY2E4a19nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCk7XG4gaW50IHFjYThrX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSk7XG4gXG4gLyogQ29tbW9uIGJyaWRnZSBmdW5jdGlvbiAqL1xuK2ludCBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuK1x0XHRcdCAgICB1MzIgKnBvcnRfbWFzayxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIHFjYThrX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSk7XG4gaW50IHFjYThrX3BvcnRfcHJlX2JyaWRnZV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0c3RydWN0IHN3aXRjaGRldl9icnBvcnRfZmxhZ3MgZmxhZ3MsXG5AQCAtNTYxLDYgKzU2NSwxMiBAQCBpbnQgcWNhOGtfcG9ydF9mZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKTtcbiBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSk7XG4raW50IHFjYThrX2xhZ19mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLFxuK1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuK1x0XHQgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKTtcbitpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4rXHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXG4rXHRcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xuIFxuIC8qIENvbW1vbiBNREIgZnVuY3Rpb24gKi9cbiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMjo1MS45MDM1NjM5NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDM3NjczNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgcWNhOGsgRFNBIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIHRoZSBgcWNhOGtgIERTQSBkcml2ZXIuIEl0J3MgYSBzaWduaWZpY2FudCBvbmUsIGFkZGluZyBtdWx0aS1DUFUgcG9ydCBzdXBwb3J0IGFuZCBMQUcgRkRCIG9wZXJhdGlvbnMsIGFtb25nIG90aGVyIHRoaW5ncy4gSXQgdG91Y2hlcyBgcWNhOGstOHh4eC5jYCwgYHFjYThrLWNvbW1vbi5jYCwgYW5kIHRoZSBoZWFkZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBEU0EgZHJpdmVycyBhcmUgbm90b3Jpb3VzbHkgaGFyZHdhcmUtZGVwZW5kZW50LiBUaGV5IHR5cGljYWxseSByZWx5IG9uIGEgcGh5c2ljYWwgRXRoZXJuZXQgc3dpdGNoIGNoaXAgY29ubmVjdGVkIHZpYSBNRElPIG9yIFNQSSwgdGhhdCBzb3J0IG9mIHRoaW5nLlxuXG5IbW0sIGNhbiBJIGluc3RhbnRpYXRlIGEgRFNBIGRyaXZlciBsaWtlIGBxY2E4a2AgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cyBpbiBRRU1VLCBvciBldmVuIHdpdGggc29tZSBzb3J0IG9mIGR1bW15IGRldmljZT8gVGhpcyBpcyB1c3VhbGx5IGhvdyB0aGV5IGNvbWUgdXAgLSBJIG1lYW4sIGBxY2E4a2AgaXMgKnNwZWNpZmljYWxseSogZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IFFDQThLIGVtdWxhdGlvbiBpbiBRRU1VLCBvciBhdCBsZWFzdCBhIGZ1enppbmcgdGFyZ2V0LlxuXG5XYWl0LCBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZW11bGF0ZSAqc3BlY2lmaWMqIERTQSBzd2l0Y2ggY2hpcHMgdW5sZXNzIHRoZXJlJ3MgYSBtb3JlIGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIHRoZW0sIG9yIGlmIGl0J3MgYSBzb2Z0d2FyZSBzd2l0Y2guIEkndmUgYmVlbiB0aHJvdWdoIHRoaXMgYmVmb3JlLCBidXQgZG9lcyBzeXprYWxsZXIgaGF2ZSAqYW55KiBidWlsdC1pbiBzdXBwb3J0IGZvciBpbmplY3RpbmcgZGV2aWNlIHRyZWUgbm9kZXMgb3IgdXNpbmcgbmV0bGluayB0byBjb25maWd1cmUgYSBEU0Egc2V0dXA/IE5vLCB0aGF0J3Mgbm90IHJpZ2h0LiBEU0Egc3dpdGNoZXMgYXJlIHVzdWFsbHkgZGVmaW5lZCB0aHJvdWdoIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEuXG5cbk9rYXksIEknbSBnZXR0aW5nIGJhY2sgdG8gc3l6a2FsbGVyJ3MgbGltaXRzLiBJIGtub3cgaXQgY2FuIHVzZSBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIG5ldHdvcmsgZnV6emluZyB0ZWNobmlxdWVzLCBidXQgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgd2l0aG91dCBwcm9wZXIgUUVNVSBlbXVsYXRpb24sIGFyZSBnZW5lcmFsbHkgdW5yZWFjaGFibGUuIE15IHF1ZXN0aW9uIHJlbWFpbnM6IGNhbiBJIHByb2JlIGBxY2E4a2AgaW5zaWRlIFFFTVU/IExldCdzIGdvIHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIGBxY2E4a2AgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIyOjU5LjM0MTI0MDcwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUyMDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY2E4a1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE5NTEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfTkVUX0RTQV9BUjkzMzEpXFx0Kz0gYXI5MzMxLm9cXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX05FVF9EU0FfUUNBOEspXFx0Kz0gcWNhOGsub1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGU6NDpxY2E4ay15IFxcdFxcdFxcdCs9IHFjYThrLWNvbW1vbi5vIHFjYThrLTh4eHgub1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGUtNS1pZmRlZiBDT05GSUdfTkVUX0RTQV9RQ0E4S19MRURTX1NVUFBPUlRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlOjY6cWNhOGsteVxcdFxcdFxcdFxcdCs9IHFjYThrLWxlZHMub1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGUtNy1lbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjMtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjQ6I2luY2x1ZGUgXFxcInFjYThrLmhcXFwiXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjU6I2luY2x1ZGUgXFxcInFjYThrX2xlZHMuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yNi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yNz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjI4OnFjYThrX3NwbGl0X2FkZHIodTMyIHJlZ2FkZHIsIHUxNiAqcjEsIHUxNiAqcjIsIHUxNiAqcGFnZSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz00MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDE6cWNhOGtfbWlpX3dyaXRlX2xvKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDktXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2YnVzLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gd3JpdGUgcWNhOGsgMzJiaXQgbG8gcmVnaXN0ZXJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU2OnFjYThrX21paV93cml0ZV9oaShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY0LVxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjY1OlxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHdyaXRlIHFjYThrIDMyYml0IGhpIHJlZ2lzdGVyXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTcwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3MTpxY2E4a19taWlfcmVhZF9sbyhzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04My1cXHRkZXZfZXJyX3JhdGVsaW1pdGVkKFxcdTAwMjZidXMtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NDpcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWFkIHFjYThrIDMyYml0IGxvIHJlZ2lzdGVyXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NS1cXHQqdmFsID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTkwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MTpxY2E4a19taWlfcmVhZF9oaShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDMtXFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2YnVzLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTA0OlxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlYWQgcWNhOGsgMzJiaXQgaGkgcmVnaXN0ZXJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNS1cXHQqdmFsID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTExMD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTExOnFjYThrX21paV9yZWFkMzIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExNy1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTg6XFx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfbG8oYnVzLCBwaHlfaWQsIHJlZ251bSwgXFx1MDAyNmxvKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTIyOlxcdHJldCA9IHFjYThrX21paV9yZWFkX2hpKGJ1cywgcGh5X2lkLCByZWdudW0gKyAxLCBcXHUwMDI2aGkpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEyMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEzMj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzMzpxY2E4a19taWlfd3JpdGUzMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNC17XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1OlxcdGlmIChxY2E4a19taWlfd3JpdGVfbG8oYnVzLCBwaHlfaWQsIHJlZ251bSwgdmFsKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzctXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM4OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIHBoeV9pZCwgcmVnbnVtICsgMSwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzktfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTQxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNDI6cWNhOGtfc2V0X3BhZ2Uoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIHUxNiBwYWdlKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE0My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNTMtXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2YnVzLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTU0OlxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHNldCBxY2E4ayBwYWdlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNTUtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE2Mi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjM6c3RhdGljIHZvaWQgcWNhOGtfcndfcmVnX2Fja19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNjQte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE2NTpcXHRzdHJ1Y3QgcWNhOGtfbWdtdF9ldGhfZGF0YSAqbWdtdF9ldGhfZGF0YTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjY6XFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNjctXFx0c3RydWN0IHFjYV9tZ210X2V0aGhkciAqbWdtdF9ldGhoZHI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMTctXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjE4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoZW51bSBtZGlvX2NtZCBjbWQsIHUzMiByZWcsIHUzMiAqdmFsLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxOS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IHByaW9yaXR5LCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzAxLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjMwMjpzdGF0aWMgdm9pZCBxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHNlcV9udW0pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTMxMS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTI6c3RhdGljIGludCBxY2E4a19yZWFkX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTQ6XFx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcXHUwMDI2cHJpdi1cXHUwMDNlbWdtdF9ldGhfZGF0YTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTUtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTMxOC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTk6XFx0c2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19SRUFELCByZWcsIE5VTEwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzIwLVxcdFxcdFxcdFxcdCAgICAgIFFDQThLX0VUSEVSTkVUX01ESU9fUFJJT1JJVFksIGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMzgtXFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzM5OlxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShza2IsIG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzQwLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZWFjayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzYzLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjM2NDpzdGF0aWMgaW50IHFjYThrX3dyaXRlX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzY1LXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozNjY6XFx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcXHUwMDI2cHJpdi1cXHUwMDNlbWdtdF9ldGhfZGF0YTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNjctXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTM3MC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozNzE6XFx0c2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19XUklURSwgcmVnLCB2YWwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzcyLVxcdFxcdFxcdFxcdCAgICAgIFFDQThLX0VUSEVSTkVUX01ESU9fUFJJT1JJVFksIGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zOTAtXFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzkxOlxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShza2IsIG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzkyLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZWFjayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDEyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MTM6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZV92YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQxNy1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MTg6XFx0cmV0ID0gcWNhOGtfcmVhZF9ldGgocHJpdiwgcmVnLCBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDI1OlxcdHJldHVybiBxY2E4a193cml0ZV9ldGgocHJpdiwgcmVnLCBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDI2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQyOD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDI5OnFjYThrX3JlYWRfbWlpKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90ICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQzNC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MzU6XFx0cWNhOGtfc3BsaXRfYWRkcihyZWcsIFxcdTAwMjZyMSwgXFx1MDAyNnIyLCBcXHUwMDI2cGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDM2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDM4LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQzOTpcXHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NDAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NDItXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDQzOlxcdHJldCA9IHFjYThrX21paV9yZWFkMzIoYnVzLCAweDEwIHwgcjIsIHIxLCB2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ0NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQ1MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDUxOnFjYThrX3dyaXRlX21paShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ1Ni1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NTc6XFx0cWNhOGtfc3BsaXRfYWRkcihyZWcsIFxcdTAwMjZyMSwgXFx1MDAyNnIyLCBcXHUwMDI2cGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDU4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDYwLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ2MTpcXHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDY1OlxcdHFjYThrX21paV93cml0ZTMyKGJ1cywgMHgxMCB8IHIyLCByMSwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz00NzI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ3MzpxY2E4a19yZWdtYXBfdXBkYXRlX2JpdHNfbWlpKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1aW50MzJfdCByZWcsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDc0LVxcdFxcdFxcdCAgICAgdWludDMyX3QgbWFzaywgdWludDMyX3Qgd3JpdGVfdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDgwLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ4MTpcXHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXFx1MDAyNnIxLCBcXHUwMDI2cjIsIFxcdTAwMjZwYWdlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00ODItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00ODQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDg1OlxcdHJldCA9IHFjYThrX3NldF9wYWdlKHByaXYsIHBhZ2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4Ni1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4OC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0ODk6XFx0cmV0ID0gcWNhOGtfbWlpX3JlYWQzMihidXMsIDB4MTAgfCByMiwgcjEsIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5NC1cXHR2YWwgfD0gd3JpdGVfdmFsO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ5NTpcXHRxY2E4a19taWlfd3JpdGUzMihidXMsIDB4MTAgfCByMiwgcjEsIHZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDk2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTAzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1MDQ6cWNhOGtfYnVsa19yZWFkKHZvaWQgKmN0eCwgY29uc3Qgdm9pZCAqcmVnX2J1Ziwgc2l6ZV90IHJlZ19sZW4sXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA1LVxcdFxcdHZvaWQgKnZhbF9idWYsIHNpemVfdCB2YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA3LVxcdGludCBpLCBjb3VudCA9IHZhbF9sZW4gLyBzaXplb2YodTMyKSwgcmV0O1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUwODpcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGN0eDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MDktXFx0dTMyIHJlZyA9ICoodTE2ICopcmVnX2J1ZjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUxMS1cXHRpZiAocHJpdi1cXHUwMDNlbWdtdF9jb25kdWl0IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTEyOlxcdCAgICAhcWNhOGtfcmVhZF9ldGgocHJpdiwgcmVnLCB2YWxfYnVmLCB2YWxfbGVuKSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyssIHJlZyArPSBzaXplb2YodTMyKSkge1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUxNzpcXHRcXHRyZXQgPSBxY2E4a19yZWFkX21paShwcml2LCByZWcsIHZhbF9idWYgKyBpKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01MjU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUyNjpxY2E4a19idWxrX2dhdGhlcl93cml0ZSh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfbGVuLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUyNy1cXHRcXHRcXHRjb25zdCB2b2lkICp2YWxfYnVmLCBzaXplX3QgdmFsX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUyOS1cXHRpbnQgaSwgY291bnQgPSB2YWxfbGVuIC8gc2l6ZW9mKHUzMiksIHJldDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1MzA6XFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBjdHg7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTMxLVxcdHUzMiByZWcgPSAqKHUxNiAqKXJlZ19idWY7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MzQtXFx0aWYgKHByaXYtXFx1MDAzZW1nbXRfY29uZHVpdCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUzNTpcXHQgICAgIXFjYThrX3dyaXRlX2V0aChwcml2LCByZWcsIHZhbCwgdmFsX2xlbikpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTM2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTQxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrLCByZWcgKz0gc2l6ZW9mKHUzMiksIHZhbCsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTQyOlxcdFxcdHJldCA9IHFjYThrX3dyaXRlX21paShwcml2LCByZWcsICp2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU0My1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTU1MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTUxOnFjYThrX2J1bGtfd3JpdGUodm9pZCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgYnl0ZXMpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTUyLXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTM6XFx0cmV0dXJuIHFjYThrX2J1bGtfZ2F0aGVyX3dyaXRlKGN0eCwgZGF0YSwgc2l6ZW9mKHUxNiksIGRhdGEgKyBzaXplb2YodTE2KSxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NTQtXFx0XFx0XFx0XFx0ICAgICAgIGJ5dGVzIC0gc2l6ZW9mKHUxNikpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTU3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTg6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzKHZvaWQgKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCB3cml0ZV92YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTU5LXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NjA6XFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBjdHg7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTYxLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU2MjpcXHRpZiAoIXFjYThrX3JlZ21hcF91cGRhdGVfYml0c19ldGgocHJpdiwgcmVnLCBtYXNrLCB3cml0ZV92YWwpKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU2My1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTY1OlxcdHJldHVybiBxY2E4a19yZWdtYXBfdXBkYXRlX2JpdHNfbWlpKHByaXYsIHJlZywgbWFzaywgd3JpdGVfdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjYtfVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU2Ny1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1Njg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHFjYThrX3JlZ21hcF9jb25maWcgPSB7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTY5LVxcdC5yZWdfYml0cyA9IDE2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTcyLVxcdC5tYXhfcmVnaXN0ZXIgPSAweDE2YWMsIC8qIGVuZCBNSUIgLSBQb3J0NiByYW5nZSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU3MzpcXHQucmVhZCA9IHFjYThrX2J1bGtfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzQ6XFx0LndyaXRlID0gcWNhOGtfYnVsa193cml0ZSxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzU6XFx0LnJlZ191cGRhdGVfYml0cyA9IHFjYThrX3JlZ21hcF91cGRhdGVfYml0cyxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzY6XFx0LnJkX3RhYmxlID0gXFx1MDAyNnFjYThrX3JlYWRhYmxlX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU3NzpcXHQuZGlzYWJsZV9sb2NraW5nID0gdHJ1ZSwgLyogTG9ja2luZyBpcyBoYW5kbGVkIGJ5IHFjYThrIHJlYWQvd3JpdGUgKi9cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NzgtXFx0LmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLCAvKiBFeHBsaWNpdGx5IGRpc2FibGUgQ0FDSEUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTU4Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTg3OnFjYThrX3BoeV9ldGhfYnVzeV93YWl0KHN0cnVjdCBxY2E4a19tZ210X2V0aF9kYXRhICptZ210X2V0aF9kYXRhLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU4OC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVhZF9za2IsIHUzMiAqdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjAwLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSsrO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjYwMTpcXHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc2tiLCBtZ210X2V0aF9kYXRhLVxcdTAwM2VzZXEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYwMi1cXHRtZ210X2V0aF9kYXRhLVxcdTAwM2VhY2sgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTYyMj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjIzOnFjYThrX3BoeV9ldGhfY29tbWFuZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgYm9vbCByZWFkLCBpbnQgcGh5LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyNC1cXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyNi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqd3JpdGVfc2tiLCAqY2xlYXJfc2tiLCAqcmVhZF9za2I7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjI3OlxcdHN0cnVjdCBxY2E4a19tZ210X2V0aF9kYXRhICptZ210X2V0aF9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyOC1cXHR1MzIgd3JpdGVfdmFsLCBjbGVhcl92YWwgPSAwLCB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02NDktXFx0LyogUHJlYWxsb2MgYWxsIHRoZSBuZWVkZWQgc2tiIGJlZm9yZSB0aGUgbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjY1MDpcXHR3cml0ZV9za2IgPSBxY2E4a19hbGxvY19tZGlvX2hlYWRlcihNRElPX1dSSVRFLCBRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcXHUwMDI2d3JpdGVfdmFsLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY1MS1cXHRcXHRcXHRcXHRcXHQgICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2Yod3JpdGVfdmFsKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02NTQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjU1OlxcdGNsZWFyX3NrYiA9IHFjYThrX2FsbG9jX21kaW9faGVhZGVyKE1ESU9fV1JJVEUsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsIFxcdTAwMjZjbGVhcl92YWwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjU2LVxcdFxcdFxcdFxcdFxcdCAgICBRQ0E4S19FVEhFUk5FVF9QSFlfUFJJT1JJVFksIHNpemVvZihjbGVhcl92YWwpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY2MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo2NjI6XFx0cmVhZF9za2IgPSBxY2E4a19hbGxvY19tZGlvX2hlYWRlcihNRElPX1JFQUQsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsIFxcdTAwMjZjbGVhcl92YWwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjYzLVxcdFxcdFxcdFxcdFxcdCAgIFFDQThLX0VUSEVSTkVUX1BIWV9QUklPUklUWSwgc2l6ZW9mKGNsZWFyX3ZhbCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzAyLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSsrO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjcwMzpcXHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0od3JpdGVfc2tiLCBtZ210X2V0aF9kYXRhLVxcdTAwM2VzZXEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTcwNC1cXHRtZ210X2V0aF9kYXRhLVxcdTAwM2VhY2sgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTcyNC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3MjU6XFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQocWNhOGtfcGh5X2V0aF9idXN5X3dhaXQsIHJldDEsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzI2LVxcdFxcdFxcdFxcdCEodmFsIFxcdTAwMjYgUUNBOEtfTURJT19NQVNURVJfQlVTWSksIDAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03MzktXFx0XFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzQwOlxcdFxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShyZWFkX3NrYiwgbWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03NDEtXFx0XFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlYWNrID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03NjgtXFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzY5OlxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShjbGVhcl9za2IsIG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzcwLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZWFjayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NzkzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3OTQ6cWNhOGtfbWRpb19idXN5X3dhaXQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIHJlZywgdTMyIG1hc2spXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTc5OS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MDA6XFx0cWNhOGtfc3BsaXRfYWRkcihyZWcsIFxcdTAwMjZyMSwgXFx1MDAyNnIyLCBcXHUwMDI2cGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODAxLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgwMjpcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChxY2E4a19taWlfcmVhZF9oaSwgcmV0MSwgISh2YWwgXFx1MDAyNiBtYXNrKSwgMCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDMtXFx0XFx0XFx0XFx0UUNBOEtfQlVTWV9XQUlUX1RJTUVPVVQgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgwNS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MDY6XFx0LyogQ2hlY2sgaWYgcWNhOGtfcmVhZCBoYXMgZmFpbGVkIGZvciBhIGRpZmZlcmVudCByZWFzb25cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDctXFx0ICogYmVmb3JlIHJldHVybnRpbmcgLUVUSU1FRE9VVFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9ODE1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MTY6cWNhOGtfbWRpb193cml0ZShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBoeSwgaW50IHJlZ251bSwgdTE2IGRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzMC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MzE6XFx0cWNhOGtfc3BsaXRfYWRkcihRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcXHUwMDI2cjEsIFxcdTAwMjZyMiwgXFx1MDAyNnBhZ2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzMi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzNC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MzU6XFx0cmV0ID0gcWNhOGtfc2V0X3BhZ2UocHJpdiwgcGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODM2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MzgtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODM5OlxcdHFjYThrX21paV93cml0ZTMyKGJ1cywgMHgxMCB8IHIyLCByMSwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDAtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODQxOlxcdHJldCA9IHFjYThrX21kaW9fYnVzeV93YWl0KGJ1cywgUUNBOEtfTURJT19NQVNURVJfQ1RSTCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDItXFx0XFx0XFx0XFx0ICAgUUNBOEtfTURJT19NQVNURVJfQlVTWSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDUtXFx0LyogZXZlbiBpZiB0aGUgYnVzeV93YWl0IHRpbWVvdXRzIHRyeSB0byBjbGVhciB0aGUgTUFTVEVSX0VOICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODQ2OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgKyAxLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDctXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz04NTM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg1NDpxY2E4a19tZGlvX3JlYWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwaHksIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2Ny1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4Njg6XFx0cWNhOGtfc3BsaXRfYWRkcihRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcXHUwMDI2cjEsIFxcdTAwMjZyMiwgXFx1MDAyNnBhZ2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NzI6XFx0cmV0ID0gcWNhOGtfc2V0X3BhZ2UocHJpdiwgcGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODczLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NzUtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODc2OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgKyAxLCB2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3Ny1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4Nzg6XFx0cmV0ID0gcWNhOGtfbWRpb19idXN5X3dhaXQoYnVzLCBRQ0E4S19NRElPX01BU1RFUl9DVFJMLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3OS1cXHRcXHRcXHRcXHQgICBRQ0E4S19NRElPX01BU1RFUl9CVVNZKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg4Mi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4ODM6XFx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfbG8oYnVzLCAweDEwIHwgcjIsIHIxLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04ODQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04ODYtXFx0LyogZXZlbiBpZiB0aGUgYnVzeV93YWl0IHRpbWVvdXRzIHRyeSB0byBjbGVhciB0aGUgTUFTVEVSX0VOICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODg3OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgKyAxLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04ODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz04OTc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg5ODpxY2E4a19pbnRlcm5hbF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpzbGF2ZV9idXMsIGludCBwaHksIGludCByZWdudW0sIHUxNiBkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg5OS17XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTAwOlxcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gc2xhdmVfYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwMS1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTAzLVxcdC8qIFVzZSBtZGlvIEV0aGVybmV0IHdoZW4gYXZhaWxhYmxlLCBmYWxsYmFjayB0byBsZWdhY3kgb25lIG9uIGVycm9yICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTA0OlxcdHJldCA9IHFjYThrX3BoeV9ldGhfY29tbWFuZChwcml2LCBmYWxzZSwgcGh5LCByZWdudW0sIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwNS1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwNy1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MDg6XFx0cmV0dXJuIHFjYThrX21kaW9fd3JpdGUocHJpdiwgcGh5LCByZWdudW0sIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwOS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05MTE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxMjpxY2E4a19pbnRlcm5hbF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKnNsYXZlX2J1cywgaW50IHBoeSwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MTMte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxNDpcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IHNsYXZlX2J1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MTUtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkxNy1cXHQvKiBVc2UgbWRpbyBFdGhlcm5ldCB3aGVuIGF2YWlsYWJsZSwgZmFsbGJhY2sgdG8gbGVnYWN5IG9uZSBvbiBlcnJvciAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxODpcXHRyZXQgPSBxY2E4a19waHlfZXRoX2NvbW1hbmQocHJpdiwgdHJ1ZSwgcGh5LCByZWdudW0sIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkxOS1cXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MjEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTIyOlxcdHJldCA9IHFjYThrX21kaW9fcmVhZChwcml2LCBwaHksIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTMwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MzE6cWNhOGtfbGVnYWN5X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKnNsYXZlX2J1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiBkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkzMi17XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTMzOlxcdHBvcnQgPSBxY2E4a19wb3J0X3RvX3BoeShwb3J0KSAlIFBIWV9NQVhfQUREUjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTM1OlxcdHJldHVybiBxY2E4a19pbnRlcm5hbF9tZGlvX3dyaXRlKHNsYXZlX2J1cywgcG9ydCwgcmVnbnVtLCBkYXRhKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTM4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Mzk6cWNhOGtfbGVnYWN5X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqc2xhdmVfYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDAte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk0MTpcXHRwb3J0ID0gcWNhOGtfcG9ydF90b19waHkocG9ydCkgJSBQSFlfTUFYX0FERFI7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTQyLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk0MzpcXHRyZXR1cm4gcWNhOGtfaW50ZXJuYWxfbWRpb19yZWFkKHNsYXZlX2J1cywgcG9ydCwgcmVnbnVtKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NDc6cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTY2LVxcdGJ1cy1cXHUwMDNlcHJpdiA9ICh2b2lkICopcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Njc6XFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwicWNhOGstJWQuJWRcXFwiLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk2OC1cXHRcXHQgZHMtXFx1MDAzZWRzdC1cXHUwMDNlaW5kZXgsIGRzLVxcdTAwM2VpbmRleCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NzItXFx0XFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSB0cmVlIGRlY2xhcmVzIHRoZSBwb3J0OnBoeSBtYXBwaW5nICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTczOlxcdFxcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJxY2E4ayB1c2VyIG1paVxcXCI7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTc0OlxcdFxcdGJ1cy1cXHUwMDNlcmVhZCA9IHFjYThrX2ludGVybmFsX21kaW9fcmVhZDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NzU6XFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IHFjYThrX2ludGVybmFsX21kaW9fd3JpdGU7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTc2LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTc3LVxcdFxcdC8qIElmIGEgbWFwcGluZyBjYW4ndCBiZSBmb3VuZCwgdGhlIGxlZ2FjeSBtYXBwaW5nIGlzIHVzZWQsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTc4OlxcdFxcdCAqIHVzaW5nIHFjYThrX3BvcnRfdG9fcGh5KClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NzktXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODEtXFx0XFx0YnVzLVxcdTAwM2VwaHlfbWFzayA9IH5kcy1cXHUwMDNlcGh5c19taWlfbWFzaztcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODI6XFx0XFx0YnVzLVxcdTAwM2VuYW1lID0gXFxcInFjYThrLWxlZ2FjeSB1c2VyIG1paVxcXCI7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTgzOlxcdFxcdGJ1cy1cXHUwMDNlcmVhZCA9IHFjYThrX2xlZ2FjeV9tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg0OlxcdFxcdGJ1cy1cXHUwMDNld3JpdGUgPSBxY2E4a19sZWdhY3lfbWRpb193cml0ZTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTk0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5OTU6cWNhOGtfc2V0dXBfbWRpb19idXMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNDEtXFx0ICogSWYgdGhlIGV4dGVybmFsIG1kaW8tYnVzIGRyaXZlciBpcyBjYXBhYmxlIG1hZ2ljYWxseSBkaXNhYmxpbmdcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDQyOlxcdCAqIHRoZSBRQ0E4S19NRElPX01BU1RFUl9FTiBhbmQgbXV0ZXgvc3Bpbi1sb2NraW5nIG91dCB0aGUgcWNhOGsnc1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNDMtXFx0ICogYWNjZXNzb3JzIGZvciB0aGUgdGltZSBiZWluZywgaXQgd291bGQgYmUgcG9zc2libGUgdG8gcHVsbCB0aGlzXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDU5LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwNjA6XFx0cmV0dXJuIHFjYThrX21kaW9fcmVnaXN0ZXIocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA2MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMDYzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDY0OnFjYThrX3NldHVwX21hY19wd3Jfc2VsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA4MC1cXHRpZiAobWFzaykge1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwODE6XFx0XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1JFR19NQUNfUFdSX1NFTCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDgyLVxcdFxcdFxcdFxcdFFDQThLX01BQ19QV1JfUkdNSUkwXzFfOFYgfFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTA5MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTA5MTpxY2E4a19zZXR1cF9vZl9wd3NfcmVnKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwOTIte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwOTM6XFx0Y29uc3Qgc3RydWN0IHFjYThrX21hdGNoX2RhdGEgKmRhdGEgPSBwcml2LVxcdTAwM2VpbmZvO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwOTQtXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEwNi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTA3OlxcdFxcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19SRUdfUFdTLCBRQ0E4MzI3X1BXU19QQUNLQUdFMTQ4X0VOLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMDgtXFx0XFx0XFx0XFx0dmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTEyNTpcXHRyZXR1cm4gcWNhOGtfcm13KHByaXYsIFFDQThLX1JFR19QV1MsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEyNi1cXHRcXHRcXHRRQ0E4S19QV1NfTEVEX09QRU5fRU5fQ1NSIHwgUUNBOEtfUFdTX1BPV0VSX09OX1NFTCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTExMzA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjExMzE6cWNhOGtfcGFyc2VfcG9ydF9jb25maWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEzMi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMjI4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTIyOTpxY2E4a19tYWNfY29uZmlnX3NldHVwX2ludGVybmFsX2RlbGF5KHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgY3B1X3BvcnRfaW5kZXgsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTIzMC1cXHRcXHRcXHRcXHQgICAgICB1MzIgcmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTI1Ny1cXHQvKiBTZXQgUkdNSUkgZGVsYXkgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHZhbHVlcyAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEyNTg6XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIHJlZyxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjU5LVxcdFxcdFxcdFFDQThLX1BPUlRfUEFEX1JHTUlJX1RYX0RFTEFZX01BU0sgfFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTI2OT1zdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMjcwOnFjYThrX3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTI3MS1cXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjczLVxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTI3NDpcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRwLVxcdTAwM2Vkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjc1LVxcdHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEyOTk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzAwOnFjYThrX3BoeWxpbmtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTMwMS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzA0LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzA1OlxcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDYtXFx0aW50IHBvcnQgPSBkcC1cXHUwMDNlaW5kZXg7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzU4LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1OTpcXHRcXHRxY2E4a193cml0ZShwcml2LCByZWcsIFFDQThLX1BPUlRfUEFEX1JHTUlJX0VOKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzYwLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNjEtXFx0XFx0LyogQ29uZmlndXJlIHJnbWlpIGRlbGF5ICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM2MjpcXHRcXHRxY2E4a19tYWNfY29uZmlnX3NldHVwX2ludGVybmFsX2RlbGF5KHByaXYsIGNwdV9wb3J0X2luZGV4LCByZWcpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzY4LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vzd2l0Y2hfaWQgPT0gUUNBOEtfSURfUUNBODMzNylcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzY5OlxcdFxcdFxcdHFjYThrX3dyaXRlKHByaXYsIFFDQThLX1JFR19QT1JUNV9QQURfQ1RSTCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzcwLVxcdFxcdFxcdFxcdCAgICBRQ0E4S19QT1JUX1BBRF9SR01JSV9SWF9ERUxBWV9FTik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzc0LVxcdFxcdC8qIEVuYWJsZSBTR01JSSBvbiB0aGUgcG9ydCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzNzU6XFx0XFx0cWNhOGtfd3JpdGUocHJpdiwgcmVnLCBRQ0E4S19QT1JUX1BBRF9TR01JSV9FTik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM3Ni1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzODMtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM4NDpzdGF0aWMgdm9pZCBxY2E4a19waHlsaW5rX2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM4NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE0MTk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNDIwOnFjYThrX3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTQyMS1cXHRcXHRcXHQgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjI6NTkuNDExNzY4NjYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4OTQ4MDM1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIFFDQThLIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IHRvdWNoZXMgdGhlIGBxY2E4a2AgZHJpdmVyLCB3aGljaCBmcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCByZWdpc3RlcnMgYSBEU0Egc3dpdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBldmVuIGZ1enogZWZmZWN0aXZlbHksIGFuZCB0aGF0IG1lYW5zIGRldGVybWluaW5nIGlmIHdlIGNhbiBpbnN0YW50aWF0ZSBpdCB3aXRob3V0IHJlbHlpbmcgb24gYWN0dWFsIGhhcmR3YXJlLiBEU0EgZHJpdmVycyB0eXBpY2FsbHkgdXNlIHRoZSBkZXZpY2UgdHJlZSwgc28gbXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgZ29pbmcgZG93biB0aGF0IHBhdGguIENhbiB3ZSBpbmplY3QgYSBkZXZpY2UgdHJlZSBvdmVybGF5IHRvIGJyaW5nIHRoZSBkcml2ZXIgdXA/XG5cblN5emthbGxlciwgb2YgY291cnNlLCBjb21lcyB0byBtaW5kLiBJdCBoYXMgd2F5cyB0byBpbmplY3QgdGhpbmdzICh0aG91Z2ggSSdtIHN0aWxsIHRyeWluZyB0byByZW1lbWJlciBleGFjdGx5IHdoYXQgaXQgY2FuIGRvKS4gSSBrbm93IGl0IGhhcyBgc3l6X21vdW50X2ltYWdlYCBhbmQgYHN5el9yZWFkX3BhcnRfc2VjdG9yYCDigJMgYnV0IGZvciBEVCBpbmplY3Rpb24gc3BlY2lmaWNhbGx5LCBpdCdzIG5vdCBjbGVhci4gRG9lcyBpdCB1c2UgYHN5el9nZW5ldGxpbmtgPyBObywgd2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBgc3l6X2Rldl9kdF9vdmVybGF5YCBvciBzb21ldGhpbmc/IEhvbGQgb24sIG5vLCBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgKmdlbmVyaWMqIERUIG92ZXJsYXkgaW5qZWN0b3IgaW4gdXBzdHJlYW0gTGludXggdW5sZXNzIGl0J3MgdmlhIGNvbmZpZ2ZzLlxuXG5BIHJlbGF0ZWQgcXVlc3Rpb24gaXM6IGRvZXMgU3l6a2FsbGVyICpldmVuKiB0ZXN0IERTQSBkcml2ZXJzPyBMZXQgbWUgc2VlIGlmIGBDT05GSUdfTkVUX0RTQV9RQ0E4S2AgaXMgZW5hYmxlZCBpbiBzeXpib3QuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyByZWxhdGVkIHRvIGBxY2E4a2AuIE9oLCBpbnRlcmVzdGluZyAtIHRoZSBjb21taXQgYXV0aG9yIGlzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAuIFNvLCB0aGlzIGxpa2VseSBtZWFucyB0aGUgcGF0Y2ggd2FzIHN1Ym1pdHRlZCB0byBzeXotY2x1c3RlciBmb3IgdGVzdGluZywgb3IgaXQncyBhIHBhdGNoIHVuZGVyIHJldmlldyB0aGF0IHN5ei1jbHVzdGVyIGlzIHRlc3RpbmcuXG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29uY2VybnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0J3Mga2V5OiBjYW4gd2UgcmVhY2ggYHFjYThrYCBjb2RlIGluIFFFTVU/IE5vdywgdGhpbmtpbmcgYWJvdXQgaXQsIGBxY2E4a2AgaXMgYW4gTURJTyBkZXZpY2UuIEFyZSB0aGVyZSB3YXlzIHRvIGVtdWxhdGUgTURJTyBidXNlcyBpbiBRRU1VLCBtYXliZSB0aHJvdWdoIGBtZGlvLWJjbS11bmltYWNgIG9yIHNpbWlsYXI/IE5vLCBRRU1VIGRvZXNuJ3Qgc2VlbSB0byBlbXVsYXRlIGEgYHFjYThrYCBzcGVjaWZpY2FsbHkuXG5cbkJ1dCB3YWl0LCBjYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5zdGFudGlhdGUgTURJTyBkZXZpY2VzIHVzaW5nIGEgbmV0bGluayBBUEkgb3Igc3lzZnM/IExpa2UgaXQgaGFzIGBzeXpfZ2VuZXRsaW5rYCBhbmQgYHN5el84MDIxMV8uLi5gLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpc24ndCBhIGdlbmVyaWMgc29mdHdhcmUgZW11bGF0b3IgaW4gdGhlIGtlcm5lbCBmb3IgTURJTyBkZXZpY2VzLCBsaWtlIHRoZXJlIGlzIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZoY2lgIGZvciBVU0IuXG5cbldhaXQsIHRoZXJlJ3MgYGRzYV9sb29wYCwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBEU0Egc3dpdGNoLCBidXQgYHFjYThrYCBpcyBhIGRyaXZlciBmb3IgKnNwZWNpZmljKiBoYXJkd2FyZS4gVGhpcyBicmluZ3MgbWUgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogSXMgaXQgcG9zc2libGUgdG8gcmVhY2ggdGhlIGBxY2E4a2AgY29kZSBpbiBRRU1VPyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZeKAmXMgYW55IFFFTVUgZW11bGF0aW9uIGZvciBpdC5cblxuT2theSwgSSdsbCBzZWFyY2ggZm9yIGBxY2E4a2Agd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2AgdG8gc2VlIGhvdyBpdCdzIHByb2JlZCBhbmQgdHJ5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCBmb3IgZW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzoxMS4zMDY1NzUxMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwOTI3MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIxNzM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIxNzQ6cWNhOGtfc3dfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjE3OC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyMTc5OlxcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxODAtXFx0ICogSUQgcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIzMzY9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBxY2E4a21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIzMzc6XFx0LnByb2JlICA9IHFjYThrX3N3X3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIzMzgtXFx0LnJlbW92ZSA9IHFjYThrX3N3X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MTEuNDA3NTExMDM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNDcxNDMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIERldmljZSBJbnN0YW50aWF0aW9uOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1kaW9fZHJpdmVyYCBhbmQgaW1tZWRpYXRlbHkgSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgbWVjaGFuaWNzIG9mIGRldmljZSBjcmVhdGlvbi4gQ2FuIEkgY29uanVyZSBhbiBgbWRpb19kZXZpY2VgIGZyb20gdXNlcnNwYWNlLCBvciBkb2VzIHRoZSBrZXJuZWwgb2ZmZXIgc29tZSBjbGV2ZXIgc29mdHdhcmUgZW11bGF0aW9uIHBhdGh3YXk/IEkgcmVjYWxsIHRoZXJlIGJlaW5nIHNvbWV0aGluZyBsaWtlIGBtZGlvLW1vY2t1cGAsIGJ1dCB0aGF0J3Mgbm90IHF1aXRlIGl0LiBBaGEhIGBtZGlvLWdwaW9gIHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgc28gdGhhdCdzIGEgZGVhZCBlbmQuXG5cbldhaXQgYSBtaW51dGUsIHdhc24ndCB0aGVyZSBgZHNhX2xvb3BgPyBZZXMhIEl0ICppcyogYW4gTURJTyBkZXZpY2UuIEFuZCBpdCBjbGV2ZXJseSB1dGlsaXplcyBgZml4ZWQtbGlua2AgYW5kIGEgbW9jayBNRElPIGJ1cy4gSW50ZXJlc3RpbmcuLi4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSBpbnN0YW50aWF0ZSBhIGBxY2E4a2AgZGV2aWNlIG9uIGEgKm1vY2sqIE1ESU8gYnVzIHVzaW5nIGEgdXNlcnNwYWNlIGFwcHJvYWNoP1xuXG5UeXBpY2FsbHksIE1ESU8gZGV2aWNlcyBhcmUgYm9ybiB0aHJvdWdoIHRoZSBEZXZpY2UgVHJlZSwgcmlnaHQ/IElmIHRoZSBrZXJuZWwgZG9lc24ndCBvZmZlciBhIGJhY2tkb29yIHRvIGluamVjdCBEVCBub2RlcyAtIGFuZCBzeXprYWxsZXIsIG15IGdvLXRvIGZ1enppbmcgdG9vbCwgdHlwaWNhbGx5IGNhbid0IGRvIHRoYXQgdW5sZXNzIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX09GX09WRVJMQVlgIGFuZCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgKHdoaWNoIGlzIG5vdCBzdGFuZGFyZCBmb3IgZnV6emluZynigJMgdGhlbiBpdCdzIGEgbm9uLXN0YXJ0ZXIuIFRoaXMgaXMgdXN1YWxseSB3aGF0IGhhcHBlbnMuXG5cbkhvbGQgb24uLi4gZGlkbid0IEkgcmVhZCBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGFjdHVhbGx5ICpiZWluZyogYWJsZSB0byBpbmplY3QgRFQgb3ZlcmxheXM/IEl0IGhpdCBtZSEgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgYHN5el9kZXZfZHRfb3ZlcmxheWAgcHNldWRvLXN5c2NhbGwuIFRoYXQncyB0aGUga2V5ISBOb3cgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCBzZWUgaWYgdGhpcyBzb2x2ZXMgbXkgcHJvYmxlbS4gVGhpcyBjb3VsZCBiZSBhIGdhbWUtY2hhbmdlciBmb3IgbXkgZnV6emluZyBzdHJhdGVneSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MTcuNDIyMjI4MzUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzE5NzIzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL2lvYXMuYz0yODM9aW50IGlvbW11ZmRfaW9hc19jb3B5KHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5Mi1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jOjI5MzpcXHRpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZCh1Y21kLCBjbWQtXFx1MDAzZXNyY19pb2FzX2lkLCBcXHUwMDI2Y21kLVxcdTAwM2VzcmNfaW92YSxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5NC1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y21kLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg9NzEyPWV4dGVybiBzaXplX3QgaW9tbXVmZF90ZXN0X21lbW9yeV9saW1pdDtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzEzOnZvaWQgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmgtNzE0LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2FzX2lkLCB1NjQgKmlvdmEsIHUzMiAqZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvbW11ZmRfcHJpdmF0ZS5oPTcxOT1pbnQgaW9tbXVmZF90ZXN0X2RtYV9idWZfaW9tbXVmZF9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjEtI2Vsc2VcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzIyOnN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZChzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjMtXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBpb2FzX2lkLFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9NTE9c3RhdGljIHZvaWQgbW9ja19kZXZfZGlzYWJsZV9pb3BmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTU4LSAqL1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjU5OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RydWN0IGlvX3BhZ2V0YWJsZSAqaW9wdCxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MC1cXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCAqaW92YSlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MS17XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NjI6XFx0c3RydWN0IHN5el9sYXlvdXQge1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTYzLVxcdFxcdF9fdTMyIG50aF9hcmVhO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNjUtXFx0fTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2NjpcXHRzdHJ1Y3Qgc3l6X2xheW91dCAqc3l6ID0gKHZvaWQgKilpb3ZhO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTY3LVxcdHVuc2lnbmVkIGludCBudGggPSBzeXotXFx1MDAzZW50aF9hcmVhO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODMtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6ODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RydWN0IGlvbW11ZmRfYWNjZXNzICphY2Nlc3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODUtXFx0XFx0XFx0XFx0XFx0XFx0dTY0ICppb3ZhKVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtOTMtXFx0fVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjk0OlxcdHJldCA9IF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoXFx1MDAyNmFjY2Vzcy1cXHUwMDNlaW9hcy1cXHUwMDNlaW9wdCwgaW92YSk7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtOTUtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhY2Nlc3MtXFx1MDAzZWlvYXNfbG9jayk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy05OC1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo5OTp2b2lkIGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhX2lkKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTAwLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2FzX2lkLCB1NjQgKmlvdmEsIHUzMiAqZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xMTAtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjExMTpcXHQqaW92YSA9IF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoXFx1MDAyNmlvYXMtXFx1MDAzZWlvcHQsIGlvdmEpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTExMi1cXHRpb21tdWZkX3B1dF9vYmplY3QodWNtZC1cXHUwMDNlaWN0eCwgXFx1MDAyNmlvYXMtXFx1MDAzZW9iaik7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz0xNTI5PXN0YXRpYyBpbnQgaW9tbXVmZF90ZXN0X2FjY2Vzc19wYWdlcyhzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTU1Ny1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBNT0NLX0ZMQUdTX0FDQ0VTU19TWVopXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTU1ODpcXHRcXHRpb3ZhID0gaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RhY2Nlc3MtXFx1MDAzZWFjY2VzcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xNTU5LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNtZC1cXHUwMDNlYWNjZXNzX3BhZ2VzLmlvdmEpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9MTYyND1zdGF0aWMgaW50IGlvbW11ZmRfdGVzdF9hY2Nlc3Nfcncoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE2NTktXFx0aWYgKGZsYWdzIFxcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjE2NjA6XFx0XFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVxcdTAwM2VhY2Nlc3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTY2MS1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjbWQtXFx1MDAzZWFjY2Vzc19ydy5pb3ZhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MjAuMDk0MjA1NDM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA1MDI1NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSBvZiB0aGUgYHFjYThrYCBEcml2ZXIqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgSSAqY2Fubm90KiBzZWFyY2ggZm9yIGFueSBgc3l6X2AgcHJlZml4ZXMgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0b2xkIG1lIHRoYXQuIEkgc2hvdWxkIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGZvciB0aGF0LCBidXQgSSBkb24ndCBzZWUgdGhvc2UgaW4gbXkgYXZhaWxhYmxlIHRvb2xzIGFjY29yZGluZyB0byB0aGUgYGRlY2xhcmF0aW9uYCBsaXN0OiBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAsIGBkZWZhdWx0X2FwaTpjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgLCBgZGVmYXVsdF9hcGk6c2V0LXJlc3VsdHNgLiBTbywgc2NyYXRjaCB0aGF0LlxuXG5Ob3csIG15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGBxY2E4a2AgZHJpdmVyIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyIHRoYXQgaWYgc29tZXRoaW5nIHJlbGllcyBvbiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoZW4gaXQncyBhIG5vLWdvIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBJdCBmbGFncyBQQ0llIHN3aXRjaCBkcml2ZXJzIGFuZCBTbWFydE5JQyBkcml2ZXJzIGFzIGltbWVkaWF0ZSByZWQgZmxhZ3MgaWYgdGhleSBuZWVkIGEgcGh5c2ljYWwgUENJZSBjYXJkLlxuXG5MZXQncyBicmVhayBkb3duIGBxY2E4a2AuIEl0J3MgYSBRdWFsY29tbSBBdGhlcm9zIERTQSBzd2l0Y2ggZHJpdmVyLCBzbyBpdCdzIHZlbmRvci1zcGVjaWZpYywgYW5kIGl0IGNvbm5lY3RzIHZpYSBNRElPLiBIbW0sIEkgZG9uJ3QgcmVjYWxsIHNlZWluZyBhbnkgUUVNVSBlbXVsYXRpb24gZm9yIFFDQThLLiBBbmQgY2FuIGl0IGJlIGluc3RhbnRpYXRlZCB2aWEgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmU/IFRoZSBwcm9tcHQgaXMgcHJldHR5IHN0cmluZ2VudDogbm8sIHNpbmNlIEkgZG9uJ3Qgc2VlIGFueSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1cyB0aGF0IGFsbG93cyBpbnN0YW50aWF0aW9uIG9mIGFyYml0cmFyeSBNRElPIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXBzLlxuXG5XYWl0LCBzeXprYWxsZXIgZG9lcyBoYXZlIGBzeXpfZ2VuZXRsaW5rYCBidXQgdGhhdCdzIGZvciBuZXRsaW5rLCBhbmQgSSBkb24ndCB0aGluayB0aGF0J3MgdGhlIHNhbWUgdGhpbmcgYXMgRFNBLiBJIGNhbid0IGVhc2lseSBjaGVjayBmb3Igc3l6Ym90IHJlcG9ydHMsIGJ1dCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGZ1enppbmcgZW50cnkgcG9pbnRzIGluIHRoZSBrZXJuZWwgZm9yIERTQSBpbiBnZW5lcmFsLiBBaGEsIHRoZSBgZHNhX2xvb3BgIGlzIGEgbW9jayBEU0EgZHJpdmVyLiBPa2F5LCBidXQgdGhhdCdzIG5vdCBgcWNhOGtgOyBpdCdzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLlxuXG5JZiBgcWNhOGtgIHJlcXVpcmVzIGEgcGh5c2ljYWwgTURJTyBidXMgYW5kIGEgc3BlY2lmaWMgUEhZIElEIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgaXQncyBqdXN0IG5vdCBnb2luZyB0byB3b3JrIGluIFFFTVUuIExvb2tzIGxpa2UgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYHFjYThrX3N3X3Byb2JlYC4gVGhpcyBsb29rcyBsaWtlIGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgdW5sZXNzIHRoZXJlIGFyZSBzb21lIHNlcmlvdXMga2VybmVsIGVtdWxhdGlvbnMgYXZhaWxhYmxlIHRoYXQgSSBoYXZlbid0IGhlYXJkIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMyMCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzoyOS4xNDQ0NjM1NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTcwOlxcdFxcdC5jb25uZWN0X3RhZ19wcm90b2NvbFxcdD0gcWNhOGtfY29ubmVjdF90YWdfcHJvdG9jb2wsXFxuMjE3MTpcXHR9O1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRzdGF0aWMgaW50XFxuMjE3NDpcXHRxY2E4a19zd19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuMjE3NTpcXHR7XFxuMjE3NjpcXHRcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdjtcXG4yMTc3OlxcdFxcdGludCByZXQ7XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xcbjIxODA6XFx0XFx0ICogSUQgcmVnaXN0ZXJcXG4yMTgxOlxcdFxcdCAqL1xcbjIxODI6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4yMTgzOlxcdFxcdGlmICghcHJpdilcXG4yMTg0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHRwcml2LVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuMjE4NzpcXHRcXHRwcml2LVxcdTAwM2VkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjIxODg6XFx0XFx0cHJpdi1cXHUwMDNlaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShwcml2LVxcdTAwM2VkZXYpO1xcbjIxODk6XFx0XFxuMjE5MDpcXHRcXHRwcml2LVxcdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHJpdi1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLFxcbjIxOTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgR1BJT0RfT1VUX0hJR0gpO1xcbjIxOTI6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZXNldF9ncGlvKSlcXG4yMTkzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZXJlc2V0X2dwaW8pO1xcbjIxOTQ6XFx0XFxuMjE5NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzZXRfZ3Bpbykge1xcbjIxOTY6XFx0XFx0XFx0LyogVGhlIGFjdGl2ZSBsb3cgZHVyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMTAgbXNcXG4yMTk3OlxcdFxcdFxcdCAqIGFuZCBjaGVja3BhdGNoLnBsIHdhbnRzIDIwIG1zLlxcbjIxOTg6XFx0XFx0XFx0ICovXFxuMjE5OTpcXHRcXHRcXHRtc2xlZXAoMjApO1xcbjIyMDA6XFx0XFx0XFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHByaXYtXFx1MDAzZXJlc2V0X2dwaW8sIDApO1xcbjIyMDE6XFx0XFx0fVxcbjIyMDI6XFx0XFxuMjIwMzpcXHRcXHQvKiBTdGFydCBieSBzZXR0aW5nIHVwIHRoZSByZWdpc3RlciBtYXBwaW5nICovXFxuMjIwNDpcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIE5VTEwsIHByaXYsXFxuMjIwNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cWNhOGtfcmVnbWFwX2NvbmZpZyk7XFxuMjIwNjpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCkpIHtcXG4yMjA3OlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwicmVnbWFwIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcXCIpO1xcbjIyMDg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4yMjA5OlxcdFxcdH1cXG4yMjEwOlxcdFxcbjIyMTE6XFx0XFx0cHJpdi1cXHUwMDNlbWRpb19jYWNoZS5wYWdlID0gMHhmZmZmO1xcbjIyMTI6XFx0XFxuMjIxMzpcXHRcXHQvKiBDaGVjayB0aGUgZGV0ZWN0ZWQgc3dpdGNoIGlkICovXFxuMjIxNDpcXHRcXHRyZXQgPSBxY2E4a19yZWFkX3N3aXRjaF9pZChwcml2KTtcXG4yMjE1OlxcdFxcdGlmIChyZXQpXFxuMjIxNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMTc6XFx0XFxuMjIxODpcXHRcXHRwcml2LVxcdTAwM2VkcyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBzaXplb2YoKnByaXYtXFx1MDAzZWRzKSwgR0ZQX0tFUk5FTCk7XFxuMjIxOTpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWRzKVxcbjIyMjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjIyMTpcXHRcXG4yMjIyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZW1nbXRfZXRoX2RhdGEubXV0ZXgpO1xcbjIyMjM6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2VtZ210X2V0aF9kYXRhLnJ3X2RvbmUpO1xcbjIyMjQ6XFx0XFxuMjIyNTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VtaWJfZXRoX2RhdGEubXV0ZXgpO1xcbjIyMjY6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2VtaWJfZXRoX2RhdGEucndfZG9uZSk7XFxuMjIyNzpcXHRcXG4yMjI4OlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjIyMjk6XFx0XFx0cHJpdi1cXHUwMDNlZHMtXFx1MDAzZW51bV9wb3J0cyA9IFFDQThLX05VTV9QT1JUUztcXG4yMjMwOlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4yMjMxOlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2cWNhOGtfc3dpdGNoX29wcztcXG4yMjMyOlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2cWNhOGtfcGh5bGlua19tYWNfb3BzO1xcbjIyMzM6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX211dGV4KTtcXG4yMjM0OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBwcml2KTtcXG4yMjM1OlxcdFxcbjIyMzY6XFx0XFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cXHUwMDNlZHMpO1xcbjIyMzc6XFx0fVxcbjIyMzg6XFx0XFxuMjIzOTpcXHRzdGF0aWMgdm9pZFxcbjIyNDA6XFx0cWNhOGtfc3dfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4yMjQxOlxcdHtcXG4yMjQyOlxcdFxcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbjIyNDM6XFx0XFx0aW50IGk7XFxuMjI0NDpcXHRcXG4yMjQ1OlxcdFxcdGlmICghcHJpdilcXG4yMjQ2OlxcdFxcdFxcdHJldHVybjtcXG4yMjQ3OlxcdFxcbjIyNDg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFFDQThLX05VTV9QT1JUUzsgaSsrKVxcbjIyNDk6XFx0XFx0XFx0cWNhOGtfcG9ydF9zZXRfc3RhdHVzKHByaXYsIGksIDApO1xcbjIyNTA6XFx0XFxuMjI1MTpcXHRcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cXHUwMDNlZHMpO1xcbjIyNTI6XFx0fVxcbjIyNTM6XFx0XFxuMjI1NDpcXHRzdGF0aWMgdm9pZCBxY2E4a19zd19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuMjI1NTpcXHR7XFxuMjI1NjpcXHRcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4yMjU3OlxcdFxcbjIyNTg6XFx0XFx0aWYgKCFwcml2KVxcbjIyNTk6XFx0XFx0XFx0cmV0dXJuO1xcbjIyNjA6XFx0XFxuMjI2MTpcXHRcXHRkc2Ffc3dpdGNoX3NodXRkb3duKHByaXYtXFx1MDAzZWRzKTtcXG4yMjYyOlxcdFxcbjIyNjM6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbjIyNjQ6XFx0fVxcbjIyNjU6XFx0XFxuMjI2NjpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuMjI2NzpcXHRzdGF0aWMgdm9pZFxcbjIyNjg6XFx0cWNhOGtfc2V0X3BtKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgZW5hYmxlKVxcbjIyNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzoyOS4xNDQ2ODM5OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MTc2Mzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBRQ0E4SyBTd2l0Y2ggUHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgcWNhOGtfc3dfcHJvYmVgIGhhcyBiZWVuIGNhbGxlZC4gTmF0dXJhbGx5LCB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgd2hhdCBpdCdzIGRvaW5nIHVuZGVyIHRoZSBob29kLCBzbyBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbCwgYHFjYThrX3JlYWRfc3dpdGNoX2lkKHByaXYpYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBiZWZvcmUgeW91IGNhbiBjb25maWd1cmUgb3IgbWFuYWdlIGEgc3dpdGNoLCB5b3UgKm5lZWQqIHRvIGlkZW50aWZ5IGl0LiBJdCdzIHRoZSBhYnNvbHV0ZSBmb3VuZGF0aW9uYWwgc3RlcCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgc3BlY2lmaWMgY2hpcCByZXZpc2lvbiwgdmVuZG9yIElELCBhbmQgbW9kZWwgaGVscHMgZGV0ZXJtaW5lIHRoZSBleGFjdCBoYXJkd2FyZSBpbiBwbGF5IGFuZCwgYnkgZXh0ZW5zaW9uLCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlZ2lzdGVyIG1hcHBpbmdzIGFyZSBhcHBsaWNhYmxlLiBNeSBuZXh0IHF1ZXN0aW9uIHdvdWxkIGJlIGhvdyB0aGUgYHByaXZgIGFyZ3VtZW50IGlzIHN0cnVjdHVyZWQgYW5kIHdoaWNoIGRhdGEgbWVtYmVycyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyByZWFkaW5nIHRoZSBJRCBmcm9tIGEgcmVnaXN0ZXIsIGEgZmxhc2ggZGV2aWNlLCBvciBzb21ld2hlcmUgZWxzZSBlbnRpcmVseSBhbmQgaG93IHRoaXMgSUQgaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgYSBtZW50YWwgbWFwIG9mIHRoZSBwcm9iaW5nIHN0YWdlIGFuZCBob3cgdGhlIFFDQThLIGRyaXZlciBoYW5kbGVzIGJhc2ljIGRldmljZSBpZGVudGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMjksIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIzOjMyLjg4NjQ1MDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQyODIyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY2E4a19yZWFkX3N3aXRjaF9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yMTc0PXFjYThrX3N3X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIyMTMtXFx0LyogQ2hlY2sgdGhlIGRldGVjdGVkIHN3aXRjaCBpZCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIyMTQ6XFx0cmV0ID0gcWNhOGtfcmVhZF9zd2l0Y2hfaWQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjIxNS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzozMi45OTU4ODI2ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNTExODMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMb2NhdGlvbiBvZiBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgYHFjYThrX3JlYWRfc3dpdGNoX2lkYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZGluZyB0aGUgaWRlbnRpZmllciBmcm9tIGEgUUNBOEsgc3dpdGNoLiBCdXQgd2hlcmUgaXMgdGhhdCBkZWZpbmVkLCBzcGVjaWZpY2FsbHk/IEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gYHFjYThrLWNvbW1vbi5jYCBvciBhIHNpbWlsYXIgY29tbW9uIGZpbGUgd2l0aGluIHRoYXQgUUNBOEsgZHJpdmVyIHN1aXRlLiBUaW1lIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdHMgc291cmNlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIgd2l0aCB0aGlzIGN1cnJlbnQgdGFzay4gSnVzdCBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGVyZSBpdCdzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTMwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MzYuNTMxMDA1NTA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY3MjI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY2E4a19yZWFkX3N3aXRjaF9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yMTc0PXFjYThrX3N3X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIyMTMtXFx0LyogQ2hlY2sgdGhlIGRldGVjdGVkIHN3aXRjaCBpZCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIyMTQ6XFx0cmV0ID0gcWNhOGtfcmVhZF9zd2l0Y2hfaWQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjIxNS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYz0xMzc5PWludCBxY2E4a19wb3J0X2xhZ19sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYy0xMzg0LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmM6MTM4NTppbnQgcWNhOGtfcmVhZF9zd2l0Y2hfaWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYy0xMzg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaD01MDU9dm9pZCBxY2E4a19wb3J0X3NldF9zdGF0dXMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZW5hYmxlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmg6NTA2OmludCBxY2E4a19yZWFkX3N3aXRjaF9pZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oLTUwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MzYuNjAyNjg0NTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyMzYzMTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHFjYThrX3JlYWRfc3dpdGNoX2lkYCBmdW5jdGlvbi4gSGVyZSdzIGhvdyBJJ20gYXBwcm9hY2hpbmcgaXQ6XG5cbioqRGlzc2VjdGluZyBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhcjogaXQncyBkZXNpZ25lZCB0byByZWFkIHRoZSBzd2l0Y2ggSUQsIGxpa2VseSBmcm9tIGEgUUNBOEstYmFzZWQgc3dpdGNoLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gbGl2ZT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBkcml2ZXIgb3IgU0RLPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwbGF0Zm9ybSBhbSBJIHdvcmtpbmcgd2l0aD8gS25vd2luZyB0aGUgYnJvYWRlciBlbnZpcm9ubWVudCBpcyBjcnVjaWFsIGZvciBlZmZlY3RpdmUgYW5hbHlzaXMuXG5cbkknbGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBXaGF0IGFyZSB0aGUgaW5wdXQgcGFyYW1ldGVycz8gQXJlIHRoZXJlIHBvaW50ZXJzLCBpbnRlZ2Vycywgb3Igc3RydWN0dXJlcyBpbnZvbHZlZD8gVGhlIHJldHVybiB2YWx1ZSBpcyBrZXksIGFzIGl0J2xsIGxpa2VseSBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBwZXJoYXBzIHRoZSBhY3R1YWwgc3dpdGNoIElEIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgdHlwZXMgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByZXByZXNlbnRhdGlvbi5cblxuVGhlbiwgSSdsbCBleGFtaW5lIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljLiBIb3cgZG9lcyBpdCBhY3R1YWxseSAqcmVhZCogdGhpcyBJRD8gRG9lcyBpdCBpbnZvbHZlIHJlZ2lzdGVyIGFjY2VzcywgcGVyaGFwcyB1c2luZyBJMkMgb3IgTURJTz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzZXF1ZW5jZXMgb2Ygb3BlcmF0aW9ucz8gQXJlIHRoZXJlIGFueSBlcnJvciBjaGVja3MgaW4gcGxhY2U/IEkgd2lsbCBsaWtlbHkgYmUgbG9va2luZyBmb3IgYml0IG1hbmlwdWxhdGlvbiBhbmQgYWRkcmVzcyBkZWNvZGluZy4gSSdsbCBiZSBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgcmVsYXRlZCB0byBRQ0E4SyBjb21tdW5pY2F0aW9uLiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaW50ZXJydXB0IGhhbmRsaW5nIGlmIHRoYXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIHRoaW5rIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIElEIHJlYWRpbmcgcHJvY2Vzcz8gQXJlIHRoZXJlIHRpbWVvdXRzPyBXaGF0IGVycm9yIGNvZGVzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCBkbyB0aGV5IHNpZ25pZnk/IEknbGwgcHJvYmFibHkgYmUgY2hlY2tpbmcgZm9yIGNvbW1vbiBwaXRmYWxscyBzdWNoIGFzIGludmFsaWQgcmVnaXN0ZXIgYWRkcmVzc2VzLCBjb21tdW5pY2F0aW9uIGVycm9ycywgYW5kIGluY29ycmVjdCBkYXRhIGludGVycHJldGF0aW9uLlxuXG5GaW5hbGx5LCBJJ2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IERvZXMgdGhlIHN3aXRjaCBJRCBpbmZsdWVuY2UgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYmVoYXZpb3I/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmV2aXNpb25zIGFuZCB2YXJpYXRpb25zIG9mIHRoZSBRQ0E4SyBzaWxpY29uPyBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgcm9sZSBhbmQgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTk4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6NDEuODI2MzE5MTU1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODU6XFx0aW50IHFjYThrX3JlYWRfc3dpdGNoX2lkKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbjEzODY6XFx0e1xcbjEzODc6XFx0XFx0dTMyIHZhbDtcXG4xMzg4OlxcdFxcdHU4IGlkO1xcbjEzODk6XFx0XFx0aW50IHJldDtcXG4xMzkwOlxcdFxcbjEzOTE6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2VpbmZvKVxcbjEzOTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM5MzpcXHRcXG4xMzk0OlxcdFxcdHJldCA9IHFjYThrX3JlYWQocHJpdiwgUUNBOEtfUkVHX01BU0tfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuMTM5NTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzk2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjEzOTc6XFx0XFxuMTM5ODpcXHRcXHRpZCA9IFFDQThLX01BU0tfQ1RSTF9ERVZJQ0VfSUQodmFsKTtcXG4xMzk5OlxcdFxcdGlmIChpZCAhPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VpZCkge1xcbjE0MDA6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuMTQwMTpcXHRcXHRcXHRcXHRcXFwiU3dpdGNoIGlkIGRldGVjdGVkICV4IGJ1dCBleHBlY3RlZCAleFxcXCIsXFxuMTQwMjpcXHRcXHRcXHRcXHRpZCwgcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlaWQpO1xcbjE0MDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQwNDpcXHRcXHR9XFxuMTQwNTpcXHRcXG4xNDA2OlxcdFxcdHByaXYtXFx1MDAzZXN3aXRjaF9pZCA9IGlkO1xcbjE0MDc6XFx0XFxuMTQwODpcXHRcXHQvKiBTYXZlIHJldmlzaW9uIHRvIGNvbW11bmljYXRlIHRvIHRoZSBpbnRlcm5hbCBQSFkgZHJpdmVyICovXFxuMTQwOTpcXHRcXHRwcml2LVxcdTAwM2Vzd2l0Y2hfcmV2aXNpb24gPSBRQ0E4S19NQVNLX0NUUkxfUkVWX0lEKHZhbCk7XFxuMTQxMDpcXHRcXG4xNDExOlxcdFxcdHJldHVybiAwO1xcbjE0MTI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzo0MS44MjY1MTUwMjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMjY0MzI1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUUNBOEsgRHJpdmVyJ3MgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYHFjYThrYCBkcml2ZXIsIHdoaWNoIGlzIGEgUXVhbGNvbW0gQXRoZXJvcyBzd2l0Y2ggZHJpdmVyLCBpcyBsaWtlbHkgKm5vdCogZnV6emFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgY29kZSBwZXJmb3JtcyBhIHJlZ2lzdGVyIHJlYWQgdXNpbmcgYHFjYThrX3JlYWRgLCBhbmQgaWYgdGhhdCBmYWlscyBvciB0aGUgZGV2aWNlIElEIGRvZXNuJ3QgbWF0Y2gsIGl0IHJldHVybnMgYC1FTk9ERVZgLiBTaW5jZSBpdCdzIGFuIE1ESU8gZGV2aWNlLCBgcWNhOGtfcmVhZGAgcmVsaWVzIG9uIE1ESU8gcmVhZHMsIGFuZCB0aG9zZSB3aWxsIGZhaWwgb3IgcmV0dXJuIDB4ZmZmZiBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgYWN0dWFsIGhhcmR3YXJlLCBsZWFkaW5nIHRvIGEgZmFpbGVkIHByb2JlLlxuXG5JIGNvbnNpZGVyZWQgd2hldGhlciBzeXprYWxsZXIgbWlnaHQgaGF2ZSBhIHdheSBhcm91bmQgdGhpcywgcGVyaGFwcyB0aHJvdWdoIGBzeXpfZ2VuZXRsaW5rYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IHRoYXQgd291bGRuJ3QgbW9jayBNRElPIGRldmljZXMuIEkgYWxzbyB3b25kZXJlZCBpZiBpdCB3YXMgcmVsYXRlZCB0byB0aGUgcHJvbXB0IGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBidXQgYHFjYThrYCBpcyBNRElPLCBub3QgUENJZS4gSXQgYXBwZWFycyBRRU1VICpkb2Vzbid0KiBlbXVsYXRlIHRoZSBRQ0E4SyBzd2l0Y2ggY2hpcCwgc28gaXQgc2VlbXMgaXQncyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMuXG5cbkNvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSB1c2UgYSBgZHVtbXlgIG9yIGBkc2FfbG9vcGAgbW9jaz8gYGRzYV9sb29wYCBpcyBhIG1vY2sgRFNBIGRyaXZlciwgYnV0IGl0IGhhcyBpdHMgb3duIGRyaXZlciBjb2RlIChgZHNhX2xvb3AuY2ApIGFuZCBkb2Vzbid0IHV0aWxpemUgYHFjYThrYC4gVGhlcmVmb3JlLCB0aGF0IGBxY2E4a2AgY29kZSBzZWVtcyB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3Igc29tZSBraW5kIG9mIHNwZWNpZmljIGVtdWxhdGlvbi4gSSBjaGVja2VkLCBhbmQgdGhlcmUncyBubyBgcWNhOGtgIGVtdWxhdGlvbiBpbiBRRU1VLlxuXG5UaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbmluZyBhIFwicGF0Y2ggdW5kZXIgcmV2aWV3XCIgaW4gc3l6a2FsbGVyIGlzIGludGVyZXN0aW5nLCBidXQgaWYgdGhlIGNvZGUgaXMgZ2VudWluZWx5IHVucmVhY2hhYmxlLCB0aGVuIHN5emthbGxlciB3b24ndCBiZSBhYmxlIHRvIGZ1enogaXQgZWZmZWN0aXZlbHksIGFuZCB3ZSB3aWxsIGdldCBubyBjb3ZlcmFnZS4gVGhhdCB3b3VsZCBtZWFuIGl0J3MgdW5saWtlbHkgdGhlIHBhdGNoIGlzIGZ1enppbmcgdGhpcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY29uY2x1ZGUgdGhhdCB0aGUgYHFjYThrYCBjb2RlIHBhdGhzIGluIGBxY2E4ay04eHh4LmNgIGFuZCBgcWNhOGstY29tbW9uLmNgIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyB0cnVseSB1bi1mdXp6YWJsZSBhbmQgdmVyaWZ5IG5vIG1vY2tpbmcgZXhpc3RzLiBJcyB0aGVyZSBhIGBxY2E4a2AgbW9jayBpbiB0aGUga2VybmVsLCBhbmQgaWYgc28sIGhvdyBkb2VzIHRoYXQgd29yaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzo1Mi4xNTI5NTIyMzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDM5NzkxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNhOGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvdGVzdGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIzOjUyLjQwNzM1ODg3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc3NTM1NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogcWNhOGsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjaGVja2VkIGB0b29scy90ZXN0aW5nL2Ag4oCTIG5vdGhpbmcgcmVsZXZhbnQgdGhlcmUuIFRoZW4sIEkgbG9va2VkIGF0IGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2AuICBBIGhhcmR3YXJlIGRyaXZlciwgc3BlY2lmaWNhbGx5LiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSAqYW55KiBjaGFuY2UgdGhpcyBpcyB1c2VkIGluIGFuIGVtdWxhdGlvbiBjb250ZXh0PyBUaGUgcHJvbXB0IGlzIGNsZWFyOiBhbnkgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWVhbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbmBxY2E4a2AgaXMgYSBRdWFsY29tbSBBdGhlcm9zIERTQSBkcml2ZXIgdGFyZ2V0aW5nIHRoZSBRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBjaGlwcy4gIEl0IHJlbGllcyBvbiBhbiBNRElPIGJ1cyBjb25uZWN0ZWQgdG8gKnRoYXQqIHNwZWNpZmljIGhhcmR3YXJlLiAgSW1wb3NzaWJsZSB0byBwcm9iZSBpbiBRRU1VLiAgVGhlcmVmb3JlLCBpdCdzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgbGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGl0J3MgKm9ubHkqIHRvdWNoaW5nIGBxY2E4a2AuICBUaGUgZGlmZiBsaXN0czpcblxuKiAgIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2BcbiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY2BcbiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oYFxuXG5QZXJmZWN0LiBTdHJpY3RseSB3aXRoaW4gdGhlIGBxY2E4a2AgZHJpdmVyIHN1aXRlLiBTaW5jZSB0aGlzIGRyaXZlciBuZWVkcyBhIHBoeXNpY2FsIGNoaXAsIG5vdCBhdmFpbGFibGUgaW4gYW55IFFFTVUgZW11bGF0aW9uLCBpdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGZvciBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgaWYgYHFjYThrYCBpcyBlbXVsYXRlZCBieSBzb21ldGhpbmcgbGlrZSBgZHNhX2xvb3BgLiBOb3BlLiBgZHNhX2xvb3BgIGlzIGEgY29tcGxldGVseSBzZXBhcmF0ZSBkcml2ZXIsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYC4gSXMgdGhlcmUgYW55IG90aGVyIGVtdWxhdGlvbiB0byBjb25zaWRlcj8gTm9wZS5cblxuU28sIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBIZXJlJ3MgdGhlIHJlYXNvbmluZyBJJ2xsIHByb3ZpZGU6XG5cblwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChgcWNhOGtgKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBkdXJpbmcgZnV6emluZy5cIlxuXG5JJ2xsIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWUgZm9yIGFueSBgcWNhOGtgIHJlZmVyZW5jZXMgaW4gYGFyY2gvdW1gIG9yIGFueXRoaW5nIHNpbWlsYXIuLi5Ob3BlLiBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjEwLCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyNDowMy4xODI3MjA4NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBEU0Egc3dpdGNoIGRyaXZlciAocWNhOGspLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoIGNoaXBzIGNvbm5lY3RlZCB2aWEgTURJTykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgRFNBIHN3aXRjaCBkcml2ZXIgKHFjYThrKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb7wch[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 16:20:27 +0000 UTC FinishedAt: 2026-08-02 16:24:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChxY2E4aykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzA4NjVlZjQ5MjY3YWNhMmE2YTlmZmIzZGZiMjEwODZjMDZhODFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6MjI6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1xuaW5kZXggNGM5Mjg5ODNiODYyMy4uNGFmOTJkNTFmMDQ2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1xuQEAgLTEwODcsMjIgJiM0MzsxMDg3LDYgQEAgcWNhOGtfc2V0dXBfbWFjX3B3cl9zZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHFjYThrX2ZpbmRfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLXtcbi1cdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbi1cbi1cdC8qIEZpbmQgdGhlIGNvbm5lY3RlZCBjcHUgcG9ydC4gVmFsaWQgcG9ydCBhcmUgMCBvciA2ICovXG4tXHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRkZXZfZGJnKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2XCYjMzQ7KTtcbi1cbi1cdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIDYpKVxuLVx0XHRyZXR1cm4gNjtcbi1cbi1cdHJldHVybiAtRUlOVkFMO1xuLX1cbi1cbiBzdGF0aWMgaW50XG4gcWNhOGtfc2V0dXBfb2ZfcHdzX3JlZyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbiB7XG5AQCAtMTc1OSw2ICYjNDM7MTc0MywxMzkgQEAgcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fUUNBO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdTMyICp1c2VyX21lbWJlcnMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiAqY3B1X21lbWJlcnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KnVzZXJfbWVtYmVycyA9IHZhbCBcdTAwMjYgZHNhX2NwdV9wb3J0cyhkcyk7XG4mIzQzO1x0KmNwdV9tZW1iZXJzID0gMDtcbiYjNDM7XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCxcbiYjNDM7XHRcdFx0XHQgIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVx1MDAzZWluZGV4KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHZhbCBcdTAwMjYgQklUKHBvcnQpKVxuJiM0MztcdFx0XHQqY3B1X21lbWJlcnMgfD0gQklUKGNwdV9kcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdTMyIHVzZXJfbWVtYmVycyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdTMyIGNwdV9tZW1iZXJzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCxcbiYjNDM7XHRcdFx0XHQgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcbiYjNDM7XHRcdFx0XHQgZHNhX2NwdV9wb3J0cyhkcyksIHVzZXJfbWVtYmVycyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoY3B1X2RwLCBkcykge1xuJiM0MztcdFx0dTMyIG1lbWJlciA9IGNwdV9tZW1iZXJzIFx1MDAyNiBCSVQoY3B1X2RwLVx1MDAzZWluZGV4KSA/IEJJVChwb3J0KSA6IDA7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLFxuJiM0MztcdFx0XHRcdFx0IFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVx1MDAzZWluZGV4KSxcbiYjNDM7XHRcdFx0XHRcdCBCSVQocG9ydCksIG1lbWJlcik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0dTMyIGNwdV9wb3J0X21hc2ssIG9sZF9jcHVfbWVtYmVycywgb2xkX3VzZXJfbWVtYmVycztcbiYjNDM7XHRpbnQgcmVzdG9yZV9yZXQsIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfY29uZHVpdF9wb3J0X21hc2soZHMsIGNvbmR1aXQsIFx1MDAyNmNwdV9wb3J0X21hc2ssIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjYThrX3BvcnRfZ2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgXHUwMDI2b2xkX3VzZXJfbWVtYmVycyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2b2xkX2NwdV9tZW1iZXJzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKGRzLCBwb3J0LCBjcHVfcG9ydF9tYXNrLFxuJiM0MztcdFx0XHRcdFx0XHRjcHVfcG9ydF9tYXNrKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX3JldCA9IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRvbGRfdXNlcl9tZW1iZXJzLFxuJiM0MztcdFx0XHRcdFx0XHRcdG9sZF9jcHVfbWVtYmVycyk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfcmV0KVxuJiM0MztcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgY29uZHVpdCBtZW1iZXJzaGlwIGZvciBwb3J0ICVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIEVSUl9QVFIocmVzdG9yZV9yZXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBkc2FfbGFnIGxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHRpZiAoZHNhX3BvcnRfdG9fY29uZHVpdChkcCkgIT0gbGFnLmRldilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChkcywgZHAtXHUwMDNlaW5kZXgsIGxhZy5kZXYsIE5VTEwpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfbGFnX2pvaW5fd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjYThrX3BvcnRfbGFnX2pvaW4oZHMsIHBvcnQsIGxhZywgaW5mbywgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoZHMsIGxhZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfbGVhdmVfd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc3RydWN0IGRzYV9sYWcgbGFnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfcG9ydF9sYWdfbGVhdmUoZHMsIHBvcnQsIGxhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKGRzLCBsYWcpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gcWNhOGtfY29uZHVpdF9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcbiBcdFx0ICAgICBib29sIG9wZXJhdGlvbmFsKVxuQEAgLTE4NDQsMTMgJiM0MzsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuLVx0aW50IGNwdV9wb3J0LCByZXQ7XG4tXHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgY3B1X3BvcnRzLCBtYXNrO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRjcHVfcG9ydCA9IHFjYThrX2ZpbmRfY3B1X3BvcnQoZHMpO1xuLVx0aWYgKGNwdV9wb3J0IFx1MDAzYyAwKSB7XG4tXHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O05vIGNwdSBwb3J0IGNvbmZpZ3VyZWQgaW4gYm90aCBjcHUgcG9ydDAgYW5kIHBvcnQ2XCYjMzQ7KTtcbi1cdFx0cmV0dXJuIGNwdV9wb3J0O1xuJiM0MztcdGNwdV9wb3J0cyA9IGRzYV9jcHVfcG9ydHMoZHMpO1xuJiM0MztcdGlmICghY3B1X3BvcnRzIHx8IGNwdV9wb3J0cyBcdTAwMjYgfihCSVQoMCkgfCBCSVQoNikpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtDUFUgcG9ydHMgbXVzdCBiZSBwb3J0IDAgb3IgNlwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdC8qIFBhcnNlIENQVSBwb3J0IGNvbmZpZyB0byBiZSBsYXRlciB1c2VkIGluIHBoeV9saW5rIG1hY19jb25maWcgKi9cbkBAIC0xOTAwLDkgJiM0MzsyMDE3LDEwIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdC8qIEluaXRpYWwgc2V0dXAgb2YgYWxsIHBvcnRzICovXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4tXHRcdC8qIERpc2FibGUgZm9yd2FyZGluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuJiM0MztcdFx0LyogRGlzYWJsZSBmb3J3YXJkaW5nIGFuZCBsZWFybmluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuIFx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChkcC1cdTAwM2VpbmRleCksXG4tXHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9NRU1CRVIsIDApO1xuJiM0MztcdFx0XHRcdFFDQThLX1BPUlRfTE9PS1VQX01FTUJFUiB8XG4mIzQzO1x0XHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTEVBUk4sIDApO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMTkyMiwyOCAmIzQzOzIwNDAsMjAgQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBGb3J3YXJkIGFsbCB1bmtub3duIGZyYW1lcyB0byBDUFUgcG9ydCBmb3IgTGludXggcHJvY2Vzc2luZ1xuLVx0ICogTm90aWNlIHRoYXQgaW4gbXVsdGktY3B1IGNvbmZpZyBvbmx5IG9uZSBwb3J0IHNob3VsZCBiZSBzZXRcbi1cdCAqIGZvciBpZ21wLCB1bmtub3duLCBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBwYWNrZXRcbiYjNDM7XHQvKiBGb3J3YXJkIHVua25vd24gZnJhbWVzIHRvIGV2ZXJ5IENQVSBwb3J0LiBUaGUgaW5ncmVzcyBwb3J0IGxvb2t1cFxuJiM0MztcdCAqIG1lbWJlcnNoaXAgcmVzdHJpY3RzIGVhY2ggZnJhbWUgdG8gaXRzIGFzc2lnbmVkIENQVSBwb3J0LlxuIFx0ICovXG4gXHRyZXQgPSBxY2E4a193cml0ZShwcml2LCBRQ0E4S19SRUdfR0xPQkFMX0ZXX0NUUkwxLFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfSUdNUF9EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XG4tXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9CQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XG4tXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XG4tXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9VQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSk7XG4mIzQzO1x0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfSUdNUF9EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbiYjNDM7XHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9CQ19EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbiYjNDM7XHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbiYjNDM7XHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9VQ19EUF9NQVNLLCBjcHVfcG9ydHMpKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBDUFUgcG9ydCBnZXRzIGNvbm5lY3RlZCB0byBhbGwgdXNlciBwb3J0cyBvZiB0aGUgc3dpdGNoICovXG4tXHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXG4tXHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCBkc2FfdXNlcl9wb3J0cyhkcykpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIFNldHVwIGNvbm5lY3Rpb24gYmV0d2VlbiBDUFUgcG9ydCBcdTAwMjYgdXNlciBwb3J0c1xuLVx0ICogSW5kaXZpZHVhbCB1c2VyIHBvcnRzIGdldCBjb25uZWN0ZWQgdG8gQ1BVIHBvcnQgb25seVxuLVx0ICovXG4mIzQzO1x0LyogQ29ubmVjdCBlYWNoIHVzZXIgcG9ydCBiaWRpcmVjdGlvbmFsbHkgdG8gaXRzIGFzc2lnbmVkIENQVSBwb3J0LiAqL1xuIFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XG4mIzQzO1x0XHR1OCBjcHVfcG9ydCA9IGRwLVx1MDAzZWNwdV9kcC1cdTAwM2VpbmRleDtcbiBcdFx0dTggcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuIFxuIFx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcbkBAIC0xOTUyLDggJiM0MzsyMDYyLDggQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4tXHRcdHJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLFxuLVx0XHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9MRUFSTik7XG4mIzQzO1x0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXG4mIzQzO1x0XHRcdFx0QklUKHBvcnQpLCBCSVQocG9ydCkpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjAwOCw2ICYjNDM7MjExOCw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdC8qIFNldCBtYXggbnVtYmVyIG9mIExBR3Mgc3VwcG9ydGVkICovXG4gXHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFFDQThLX05VTV9MQUdTO1xuIFxuJiM0MztcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjA0MCw2ICYjNDM7MjE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcWNhOGtfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2ZkYl9hZGRcdFx0PSBxY2E4a19wb3J0X2ZkYl9hZGQsXG4gXHQucG9ydF9mZGJfZGVsXHRcdD0gcWNhOGtfcG9ydF9mZGJfZGVsLFxuIFx0LnBvcnRfZmRiX2R1bXBcdFx0PSBxY2E4a19wb3J0X2ZkYl9kdW1wLFxuJiM0MztcdC5sYWdfZmRiX2FkZFx0XHQ9IHFjYThrX2xhZ19mZGJfYWRkLFxuJiM0MztcdC5sYWdfZmRiX2RlbFx0XHQ9IHFjYThrX2xhZ19mZGJfZGVsLFxuIFx0LnBvcnRfbWRiX2FkZFx0XHQ9IHFjYThrX3BvcnRfbWRiX2FkZCxcbiBcdC5wb3J0X21kYl9kZWxcdFx0PSBxY2E4a19wb3J0X21kYl9kZWwsXG4gXHQucG9ydF9taXJyb3JfYWRkXHQ9IHFjYThrX3BvcnRfbWlycm9yX2FkZCxcbkBAIC0yMDQ5LDggJiM0MzsyMTYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfdmxhbl9kZWxcdFx0PSBxY2E4a19wb3J0X3ZsYW5fZGVsLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0gcWNhOGtfcGh5bGlua19nZXRfY2FwcyxcbiBcdC5nZXRfcGh5X2ZsYWdzXHRcdD0gcWNhOGtfZ2V0X3BoeV9mbGFncyxcbi1cdC5wb3J0X2xhZ19qb2luXHRcdD0gcWNhOGtfcG9ydF9sYWdfam9pbixcbi1cdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlLFxuJiM0MztcdC5wb3J0X2xhZ19qb2luXHRcdD0gcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzLFxuJiM0MztcdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMsXG4mIzQzO1x0LnBvcnRfY2hhbmdlX2NvbmR1aXRcdD0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdCxcbiBcdC5jb25kdWl0X3N0YXRlX2NoYW5nZVx0PSBxY2E4a19jb25kdWl0X2NoYW5nZSxcbiBcdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0PSBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jXG5pbmRleCAxMzAwNWYxMGVkYjdkLi43M2UzNmY1ZmIzNTg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuQEAgLTMyMiw2ICYjNDM7MzIyLDM2IEBAIHN0YXRpYyBpbnQgcWNhOGtfZmRiX3NlYXJjaF9hbmRfZGVsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1OCBwb3J0X21hc2ssXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hYyxcbiYjNDM7XHRcdFx0XHQgICB1MTYgdmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjYThrX2ZkYiBmZGIgPSB7IDAgfTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cWNhOGtfZmRiX3dyaXRlKHByaXYsIHZpZCwgMCwgbWFjLCAwKTtcbiYjNDM7XHRyZXQgPSBxY2E4a19mZGJfYWNjZXNzKHByaXYsIFFDQThLX0ZEQl9TRUFSQ0gsIC0xKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsIFx1MDAyNmZkYik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIGRlbGliZXJhdGVseSBjb25maWd1cmVkIHN0YXRpYyBlbnRyaWVzLiAqL1xuJiM0MztcdGlmICghZmRiLmFnaW5nIHx8IGZkYi5hZ2luZyA9PSBRQ0E4S19BVFVfU1RBVFVTX1NUQVRJQykge1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfUFVSR0UsIC0xKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBxY2E4a192bGFuX2FjY2VzcyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdixcbiBcdFx0XHQgICAgIGVudW0gcWNhOGtfdmxhbl9jbWQgY21kLCB1MTYgdmlkKVxuIHtcbkBAIC02MDcsMTUgJiM0Mzs2MzcsNjAgQEAgdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXG4gXHRxY2E4a19wb3J0X2NvbmZpZ3VyZV9sZWFybmluZyhkcywgcG9ydCwgbGVhcm5pbmcpO1xuIH1cbiBcbiYjNDM7aW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuJiM0MztcdFx0XHQgICAgdTMyICpwb3J0X21hc2ssXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy1cdTAwM2Vkc3Q7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHRpbnQgaWQ7XG4mIzQzO1xuJiM0MztcdCpwb3J0X21hc2sgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5ldGlmX2lzX2xhZ19tYXN0ZXIoY29uZHVpdCkpIHtcbiYjNDM7XHRcdGRwID0gY29uZHVpdC1cdTAwM2Vkc2FfcHRyO1xuJiM0MztcdFx0aWYgKCFkcCB8fCBkcC1cdTAwM2VkcyAhPSBkcyB8fCAhZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7Q29uZHVpdCBpcyBub3QgYSBsb2NhbCBDUFUgcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQqcG9ydF9tYXNrID0gQklUKGRwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBkc2FfbGFnX2lkKGRzdCwgY29uZHVpdCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGlkO1xuJiM0MztcbiYjNDM7XHRkc2FfbGFnX2ZvcmVhY2hfcG9ydChkcCwgZHN0LCBkc2FfbGFnX2J5X2lkKGRzdCwgaWQpKVxuJiM0MztcdFx0aWYgKGRwLVx1MDAzZWRzID09IGRzIFx1MDAyNlx1MDAyNiBkc2FfcG9ydF9pc19jcHUoZHApKVxuJiM0MztcdFx0XHQqcG9ydF9tYXNrIHw9IEJJVChkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1xuJiM0MztcdGlmICghKnBvcnRfbWFzaykge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDb25kdWl0IExBRyBoYXMgbm8gbG9jYWwgQ1BVIHBvcnRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBxY2E4a191cGRhdGVfcG9ydF9tZW1iZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwb3J0LFxuIFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmlkZ2VfZGV2LFxuIFx0XHRcdFx0ICAgIGJvb2wgam9pbilcbiB7XG4gXHRib29sIGlzb2xhdGVkID0gISEocHJpdi1cdTAwM2Vwb3J0X2lzb2xhdGVkX21hcCBcdTAwMjYgQklUKHBvcnQpKSwgb3RoZXJfaXNvbGF0ZWQ7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQocHJpdi1cdTAwM2VkcywgcG9ydCksICpvdGhlcl9kcDtcbi1cdHUzMiBwb3J0X21hc2sgPSBCSVQoZHAtXHUwMDNlY3B1X2RwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHR1MzIgcG9ydF9tYXNrO1xuIFx0aW50IGksIHJldDtcbiBcbiYjNDM7XHRyZXQgPSBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhwcml2LVx1MDAzZWRzLCBkc2FfcG9ydF90b19jb25kdWl0KGRwKSxcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZwb3J0X21hc2ssIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFFDQThLX05VTV9QT1JUUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGkgPT0gcG9ydClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC04MjksNiAmIzQzOzkwNCwxNCBAQCBpbnQgcWNhOGtfcG9ydF9mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHR1MTYgcG9ydF9tYXNrID0gQklUKHBvcnQpO1xuIFxuJiM0MztcdC8qIFVua25vd24gdW5pY2FzdCBmbG9vZGluZyBkZWxpdmVycyBob3N0IHRyYWZmaWMgdG8gdGhlIGNvbmR1aXQuICovXG4mIzQzO1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcbiYjNDM7XHRcdGlmICghdmlkKVxuJiM0MztcdFx0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIHFjYThrX2ZkYl9wdXJnZV9keW5hbWljKHByaXYsIGFkZHIsIHZpZCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpO1xuIH1cbiBcbkBAIC04MzksNiAmIzQzOzkyMiw5IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdHUxNiBwb3J0X21hc2sgPSBCSVQocG9ydCk7XG4gXG4mIzQzO1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRpZiAoIXZpZClcbiBcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuIFxuQEAgLTg2OCw2ICYjNDM7OTU0LDc1IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1OCBxY2E4a19sYWdfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRzYV9sYWcgKmxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTggcG9ydF9tYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzLVx1MDAzZWRzdCwgbGFnKVxuJiM0MztcdFx0aWYgKGRwLVx1MDAzZWRzID09IGRzKVxuJiM0MztcdFx0XHRwb3J0X21hc2sgfD0gQklUKGRwLVx1MDAzZWluZGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBvcnRfbWFzaztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcWNhOGtfbGFnX2lzX2NwdShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzYV9sYWcgKmxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0Ym9vbCBoYXNfY3B1ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy1cdTAwM2Vkc3QsIGxhZykge1xuJiM0MztcdFx0aWYgKGRwLVx1MDAzZWRzICE9IGRzKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRzYV9wb3J0X2lzX2NwdShkcCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRoYXNfY3B1ID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBoYXNfY3B1O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4mIzQzO1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHR1OCBwb3J0X21hc2s7XG4mIzQzO1xuJiM0MztcdHBvcnRfbWFzayA9IHFjYThrX2xhZ19wb3J0X21hc2soZHMsIFx1MDAyNmxhZyk7XG4mIzQzO1xuJiM0MztcdGlmIChxY2E4a19sYWdfaXNfY3B1KGRzLCBcdTAwMjZsYWcpKSB7XG4mIzQzO1x0XHRpZiAoIXZpZClcbiYjNDM7XHRcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHFjYThrX3BvcnRfZmRiX2luc2VydChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBxY2E4a19sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZyxcbiYjNDM7XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHU4IHBvcnRfbWFzaztcbiYjNDM7XG4mIzQzO1x0aWYgKHFjYThrX2xhZ19pc19jcHUoZHMsIFx1MDAyNmxhZykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2aWQpXG4mIzQzO1x0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4mIzQzO1xuJiM0MztcdHBvcnRfbWFzayA9IHFjYThrX2xhZ19wb3J0X21hc2soZHMsIFx1MDAyNmxhZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBxY2E4a19mZGJfZGVsKHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiLFxuIFx0XHQgICAgICAgc3RydWN0IGRzYV9kYiBkYilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmggYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhcbmluZGV4IDk1NjMzODg5MzAzMjUuLjMzM2IzNDM4ODZkZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaFxuQEAgLTUyMyw2ICYjNDM7NTIzLDEwIEBAIGludCBxY2E4a19nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCk7XG4gaW50IHFjYThrX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSk7XG4gXG4gLyogQ29tbW9uIGJyaWRnZSBmdW5jdGlvbiAqL1xuJiM0MztpbnQgcWNhOGtfY29uZHVpdF9wb3J0X21hc2soc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4mIzQzO1x0XHRcdCAgICB1MzIgKnBvcnRfbWFzayxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpO1xuIGludCBxY2E4a19wb3J0X3ByZV9icmlkZ2VfZmxhZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBzd2l0Y2hkZXZfYnJwb3J0X2ZsYWdzIGZsYWdzLFxuQEAgLTU2MSw2ICYjNDM7NTY1LDEyIEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xuIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTtcbiYjNDM7aW50IHFjYThrX2xhZ19mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLFxuJiM0MztcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCxcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xuJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4mIzQzO1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYik7XG4gXG4gLyogQ29tbW9uIE1EQiBmdW5jdGlvbiAqL1xuIGludCBxY2E4a19wb3J0X21kYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgRFNBIHN3aXRjaCBkcml2ZXIgKHFjYThrKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDg2NWVmNDkyNjdhY2EyYTZhOWZmYjNkZmIyMTA4NmMwNmE4MWQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxNjoyMjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMKaW5kZXggNGM5Mjg5ODNiODYyMy4uNGFmOTJkNTFmMDQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMKQEAgLTEwODcsMjIgJiM0MzsxMDg3LDYgQEAgcWNhOGtfc2V0dXBfbWFjX3B3cl9zZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBxY2E4a19maW5kX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKLXsKLQlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwotCi0JLyogRmluZCB0aGUgY29ubmVjdGVkIGNwdSBwb3J0LiBWYWxpZCBwb3J0IGFyZSAwIG9yIDYgKi8KLQlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCAwKSkKLQkJcmV0dXJuIDA7Ci0KLQlkZXZfZGJnKHByaXYtJmd0O2RldiwgJiMzNDtwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2JiMzNDspOwotCi0JaWYgKGRzYV9pc19jcHVfcG9ydChkcywgNikpCi0JCXJldHVybiA2OwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIHN0YXRpYyBpbnQKIHFjYThrX3NldHVwX29mX3B3c19yZWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpCiB7CkBAIC0xNzU5LDYgJiM0MzsxNzQzLDEzOSBAQCBxY2E4a19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJcmV0dXJuIERTQV9UQUdfUFJPVE9fUUNBOwogfQogCiYjNDM7c3RhdGljIGludCBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCSAgICAgdTMyICp1c2VyX21lbWJlcnMsCiYjNDM7CQkJCQkgICAgIHUzMiAqY3B1X21lbWJlcnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3JlYWQocHJpdi0mZ3Q7cmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqdXNlcl9tZW1iZXJzID0gdmFsICZhbXA7IGRzYV9jcHVfcG9ydHMoZHMpOwomIzQzOwkqY3B1X21lbWJlcnMgPSAwOwomIzQzOwomIzQzOwlkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHsKJiM0MzsJCXJldCA9IHJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwKJiM0MzsJCQkJICBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9kcC0mZ3Q7aW5kZXgpLCAmYW1wO3ZhbCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAodmFsICZhbXA7IEJJVChwb3J0KSkKJiM0MzsJCQkqY3B1X21lbWJlcnMgfD0gQklUKGNwdV9kcC0mZ3Q7aW5kZXgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkJICAgICB1MzIgdXNlcl9tZW1iZXJzLAomIzQzOwkJCQkJICAgICB1MzIgY3B1X21lbWJlcnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtJmd0O3JlZ21hcCwKJiM0MzsJCQkJIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksCiYjNDM7CQkJCSBkc2FfY3B1X3BvcnRzKGRzKSwgdXNlcl9tZW1iZXJzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoY3B1X2RwLCBkcykgewomIzQzOwkJdTMyIG1lbWJlciA9IGNwdV9tZW1iZXJzICZhbXA7IEJJVChjcHVfZHAtJmd0O2luZGV4KSA/IEJJVChwb3J0KSA6IDA7CiYjNDM7CiYjNDM7CQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLAomIzQzOwkJCQkJIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLSZndDtpbmRleCksCiYjNDM7CQkJCQkgQklUKHBvcnQpLCBtZW1iZXIpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwl1MzIgY3B1X3BvcnRfbWFzaywgb2xkX2NwdV9tZW1iZXJzLCBvbGRfdXNlcl9tZW1iZXJzOwomIzQzOwlpbnQgcmVzdG9yZV9yZXQsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcWNhOGtfY29uZHVpdF9wb3J0X21hc2soZHMsIGNvbmR1aXQsICZhbXA7Y3B1X3BvcnRfbWFzaywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfZ2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgJmFtcDtvbGRfdXNlcl9tZW1iZXJzLAomIzQzOwkJCQkJCSZhbXA7b2xkX2NwdV9tZW1iZXJzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgY3B1X3BvcnRfbWFzaywKJiM0MzsJCQkJCQljcHVfcG9ydF9tYXNrKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmVzdG9yZV9yZXQgPSBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsCiYjNDM7CQkJCQkJCW9sZF91c2VyX21lbWJlcnMsCiYjNDM7CQkJCQkJCW9sZF9jcHVfbWVtYmVycyk7CiYjNDM7CWlmIChyZXN0b3JlX3JldCkKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIHJlc3RvcmUgY29uZHVpdCBtZW1iZXJzaGlwIGZvciBwb3J0ICVkOiAlcGVcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIEVSUl9QVFIocmVzdG9yZV9yZXQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJCSAgIHN0cnVjdCBkc2FfbGFnIGxhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykgewomIzQzOwkJaWYgKGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApICE9IGxhZy5kZXYpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlyZXQgPSBxY2E4a19wb3J0X2NoYW5nZV9jb25kdWl0KGRzLCBkcC0mZ3Q7aW5kZXgsIGxhZy5kZXYsIE5VTEwpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfbGFnX2pvaW5fd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZHNhX2xhZyBsYWcsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfbGFnX2pvaW4oZHMsIHBvcnQsIGxhZywgaW5mbywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKGRzLCBsYWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCBkc2FfbGFnIGxhZykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX3BvcnRfbGFnX2xlYXZlKGRzLCBwb3J0LCBsYWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoZHMsIGxhZyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIHFjYThrX2NvbmR1aXRfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsCiAJCSAgICAgYm9vbCBvcGVyYXRpb25hbCkKQEAgLTE4NDQsMTMgJiM0MzsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwogCXN0cnVjdCBkc2FfcG9ydCAqZHA7Ci0JaW50IGNwdV9wb3J0LCByZXQ7Ci0JdTMyIG1hc2s7CiYjNDM7CXUzMiBjcHVfcG9ydHMsIG1hc2s7CiYjNDM7CWludCByZXQ7CiAKLQljcHVfcG9ydCA9IHFjYThrX2ZpbmRfY3B1X3BvcnQoZHMpOwotCWlmIChjcHVfcG9ydCAmbHQ7IDApIHsKLQkJZGV2X2Vycihwcml2LSZndDtkZXYsICYjMzQ7Tm8gY3B1IHBvcnQgY29uZmlndXJlZCBpbiBib3RoIGNwdSBwb3J0MCBhbmQgcG9ydDYmIzM0Oyk7Ci0JCXJldHVybiBjcHVfcG9ydDsKJiM0MzsJY3B1X3BvcnRzID0gZHNhX2NwdV9wb3J0cyhkcyk7CiYjNDM7CWlmICghY3B1X3BvcnRzIHx8IGNwdV9wb3J0cyAmYW1wOyB+KEJJVCgwKSB8IEJJVCg2KSkpIHsKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O0NQVSBwb3J0cyBtdXN0IGJlIHBvcnQgMCBvciA2JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogUGFyc2UgQ1BVIHBvcnQgY29uZmlnIHRvIGJlIGxhdGVyIHVzZWQgaW4gcGh5X2xpbmsgbWFjX2NvbmZpZyAqLwpAQCAtMTkwMCw5ICYjNDM7MjAxNywxMCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAKIAkvKiBJbml0aWFsIHNldHVwIG9mIGFsbCBwb3J0cyAqLwogCWRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHsKLQkJLyogRGlzYWJsZSBmb3J3YXJkaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovCiYjNDM7CQkvKiBEaXNhYmxlIGZvcndhcmRpbmcgYW5kIGxlYXJuaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovCiAJCXJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGRwLSZndDtpbmRleCksCi0JCQkJUUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCAwKTsKJiM0MzsJCQkJUUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSIHwKJiM0MzsJCQkJUUNBOEtfUE9SVF9MT09LVVBfTEVBUk4sIDApOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC0xOTIyLDI4ICYjNDM7MjA0MCwyMCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCX0KIAl9CiAKLQkvKiBGb3J3YXJkIGFsbCB1bmtub3duIGZyYW1lcyB0byBDUFUgcG9ydCBmb3IgTGludXggcHJvY2Vzc2luZwotCSAqIE5vdGljZSB0aGF0IGluIG11bHRpLWNwdSBjb25maWcgb25seSBvbmUgcG9ydCBzaG91bGQgYmUgc2V0Ci0JICogZm9yIGlnbXAsIHVua25vd24sIG11bHRpY2FzdCBhbmQgYnJvYWRjYXN0IHBhY2tldAomIzQzOwkvKiBGb3J3YXJkIHVua25vd24gZnJhbWVzIHRvIGV2ZXJ5IENQVSBwb3J0LiBUaGUgaW5ncmVzcyBwb3J0IGxvb2t1cAomIzQzOwkgKiBtZW1iZXJzaGlwIHJlc3RyaWN0cyBlYWNoIGZyYW1lIHRvIGl0cyBhc3NpZ25lZCBDUFUgcG9ydC4KIAkgKi8KIAlyZXQgPSBxY2E4a193cml0ZShwcml2LCBRQ0E4S19SRUdfR0xPQkFMX0ZXX0NUUkwxLAotCQkJICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9JR01QX0RQX01BU0ssIEJJVChjcHVfcG9ydCkpIHwKLQkJCSAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfQkNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfAotCQkJICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8Ci0JCQkgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX1VDX0RQX01BU0ssIEJJVChjcHVfcG9ydCkpKTsKJiM0MzsJCQkgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgY3B1X3BvcnRzKSB8CiYjNDM7CQkJICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9CQ19EUF9NQVNLLCBjcHVfcG9ydHMpIHwKJiM0MzsJCQkgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX01DX0RQX01BU0ssIGNwdV9wb3J0cykgfAomIzQzOwkJCSAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgY3B1X3BvcnRzKSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIENQVSBwb3J0IGdldHMgY29ubmVjdGVkIHRvIGFsbCB1c2VyIHBvcnRzIG9mIHRoZSBzd2l0Y2ggKi8KLQlyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksCi0JCQlRQ0E4S19QT1JUX0xPT0tVUF9NRU1CRVIsIGRzYV91c2VyX3BvcnRzKGRzKSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFNldHVwIGNvbm5lY3Rpb24gYmV0d2VlbiBDUFUgcG9ydCAmYW1wOyB1c2VyIHBvcnRzCi0JICogSW5kaXZpZHVhbCB1c2VyIHBvcnRzIGdldCBjb25uZWN0ZWQgdG8gQ1BVIHBvcnQgb25seQotCSAqLwomIzQzOwkvKiBDb25uZWN0IGVhY2ggdXNlciBwb3J0IGJpZGlyZWN0aW9uYWxseSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuICovCiAJZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7CiYjNDM7CQl1OCBjcHVfcG9ydCA9IGRwLSZndDtjcHVfZHAtJmd0O2luZGV4OwogCQl1OCBwb3J0ID0gZHAtJmd0O2luZGV4OwogCiAJCXJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLApAQCAtMTk1Miw4ICYjNDM7MjA2Miw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0ID0gcmVnbWFwX2NsZWFyX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLAotCQkJCQlRQ0E4S19QT1JUX0xPT0tVUF9MRUFSTik7CiYjNDM7CQlyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksCiYjNDM7CQkJCUJJVChwb3J0KSwgQklUKHBvcnQpKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTIwMDgsNiAmIzQzOzIxMTgsOCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJLyogU2V0IG1heCBudW1iZXIgb2YgTEFHcyBzdXBwb3J0ZWQgKi8KIAlkcy0mZ3Q7bnVtX2xhZ19pZHMgPSBRQ0E4S19OVU1fTEFHUzsKIAomIzQzOwlkcy0mZ3Q7YXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQwLDYgJiM0MzsyMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0gewogCS5wb3J0X2ZkYl9hZGQJCT0gcWNhOGtfcG9ydF9mZGJfYWRkLAogCS5wb3J0X2ZkYl9kZWwJCT0gcWNhOGtfcG9ydF9mZGJfZGVsLAogCS5wb3J0X2ZkYl9kdW1wCQk9IHFjYThrX3BvcnRfZmRiX2R1bXAsCiYjNDM7CS5sYWdfZmRiX2FkZAkJPSBxY2E4a19sYWdfZmRiX2FkZCwKJiM0MzsJLmxhZ19mZGJfZGVsCQk9IHFjYThrX2xhZ19mZGJfZGVsLAogCS5wb3J0X21kYl9hZGQJCT0gcWNhOGtfcG9ydF9tZGJfYWRkLAogCS5wb3J0X21kYl9kZWwJCT0gcWNhOGtfcG9ydF9tZGJfZGVsLAogCS5wb3J0X21pcnJvcl9hZGQJPSBxY2E4a19wb3J0X21pcnJvcl9hZGQsCkBAIC0yMDQ5LDggJiM0MzsyMTYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0gewogCS5wb3J0X3ZsYW5fZGVsCQk9IHFjYThrX3BvcnRfdmxhbl9kZWwsCiAJLnBoeWxpbmtfZ2V0X2NhcHMJPSBxY2E4a19waHlsaW5rX2dldF9jYXBzLAogCS5nZXRfcGh5X2ZsYWdzCQk9IHFjYThrX2dldF9waHlfZmxhZ3MsCi0JLnBvcnRfbGFnX2pvaW4JCT0gcWNhOGtfcG9ydF9sYWdfam9pbiwKLQkucG9ydF9sYWdfbGVhdmUJCT0gcWNhOGtfcG9ydF9sYWdfbGVhdmUsCiYjNDM7CS5wb3J0X2xhZ19qb2luCQk9IHFjYThrX3BvcnRfbGFnX2pvaW5fd2l0aF9jb25kdWl0cywKJiM0MzsJLnBvcnRfbGFnX2xlYXZlCQk9IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMsCiYjNDM7CS5wb3J0X2NoYW5nZV9jb25kdWl0CT0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdCwKIAkuY29uZHVpdF9zdGF0ZV9jaGFuZ2UJPSBxY2E4a19jb25kdWl0X2NoYW5nZSwKIAkuY29ubmVjdF90YWdfcHJvdG9jb2wJPSBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYwppbmRleCAxMzAwNWYxMGVkYjdkLi43M2UzNmY1ZmIzNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMKQEAgLTMyMiw2ICYjNDM7MzIyLDM2IEBAIHN0YXRpYyBpbnQgcWNhOGtfZmRiX3NlYXJjaF9hbmRfZGVsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1OCBwb3J0X21hc2ssCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcWNhOGtfZmRiX3B1cmdlX2R5bmFtaWMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGNvbnN0IHU4ICptYWMsCiYjNDM7CQkJCSAgIHUxNiB2aWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcWNhOGtfZmRiIGZkYiA9IHsgMCB9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX211dGV4KTsKJiM0MzsKJiM0MzsJcWNhOGtfZmRiX3dyaXRlKHByaXYsIHZpZCwgMCwgbWFjLCAwKTsKJiM0MzsJcmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfU0VBUkNILCAtMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsICZhbXA7ZmRiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogS2VlcCBkZWxpYmVyYXRlbHkgY29uZmlndXJlZCBzdGF0aWMgZW50cmllcy4gKi8KJiM0MzsJaWYgKCFmZGIuYWdpbmcgfHwgZmRiLmFnaW5nID09IFFDQThLX0FUVV9TVEFUVVNfU1RBVElDKSB7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfUFVSR0UsIC0xKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19tdXRleCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBxY2E4a192bGFuX2FjY2VzcyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwKIAkJCSAgICAgZW51bSBxY2E4a192bGFuX2NtZCBjbWQsIHUxNiB2aWQpCiB7CkBAIC02MDcsMTUgJiM0Mzs2MzcsNjAgQEAgdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpCiAJcWNhOGtfcG9ydF9jb25maWd1cmVfbGVhcm5pbmcoZHMsIHBvcnQsIGxlYXJuaW5nKTsKIH0KIAomIzQzO2ludCBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LAomIzQzOwkJCSAgICB1MzIgKnBvcnRfbWFzaywKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtJmd0O2RzdDsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJaW50IGlkOwomIzQzOwomIzQzOwkqcG9ydF9tYXNrID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKGNvbmR1aXQpKSB7CiYjNDM7CQlkcCA9IGNvbmR1aXQtJmd0O2RzYV9wdHI7CiYjNDM7CQlpZiAoIWRwIHx8IGRwLSZndDtkcyAhPSBkcyB8fCAhZHNhX3BvcnRfaXNfY3B1KGRwKSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O0NvbmR1aXQgaXMgbm90IGEgbG9jYWwgQ1BVIHBvcnQmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwomIzQzOwkJKnBvcnRfbWFzayA9IEJJVChkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWQgPSBkc2FfbGFnX2lkKGRzdCwgY29uZHVpdCk7CiYjNDM7CWlmIChpZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gaWQ7CiYjNDM7CiYjNDM7CWRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkc3QsIGRzYV9sYWdfYnlfaWQoZHN0LCBpZCkpCiYjNDM7CQlpZiAoZHAtJmd0O2RzID09IGRzICZhbXA7JmFtcDsgZHNhX3BvcnRfaXNfY3B1KGRwKSkKJiM0MzsJCQkqcG9ydF9tYXNrIHw9IEJJVChkcC0mZ3Q7aW5kZXgpOwomIzQzOwomIzQzOwlpZiAoISpwb3J0X21hc2spIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7Q29uZHVpdCBMQUcgaGFzIG5vIGxvY2FsIENQVSBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcWNhOGtfdXBkYXRlX3BvcnRfbWVtYmVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgcG9ydCwKIAkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXYsCiAJCQkJICAgIGJvb2wgam9pbikKIHsKIAlib29sIGlzb2xhdGVkID0gISEocHJpdi0mZ3Q7cG9ydF9pc29sYXRlZF9tYXAgJmFtcDsgQklUKHBvcnQpKSwgb3RoZXJfaXNvbGF0ZWQ7CiAJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KHByaXYtJmd0O2RzLCBwb3J0KSwgKm90aGVyX2RwOwotCXUzMiBwb3J0X21hc2sgPSBCSVQoZHAtJmd0O2NwdV9kcC0mZ3Q7aW5kZXgpOwomIzQzOwl1MzIgcG9ydF9tYXNrOwogCWludCBpLCByZXQ7CiAKJiM0MzsJcmV0ID0gcWNhOGtfY29uZHVpdF9wb3J0X21hc2socHJpdi0mZ3Q7ZHMsIGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApLAomIzQzOwkJCQkgICAgICAmYW1wO3BvcnRfbWFzaywgTlVMTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBRQ0E4S19OVU1fUE9SVFM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChpID09IHBvcnQpCiAJCQljb250aW51ZTsKQEAgLTgyOSw2ICYjNDM7OTA0LDE0IEBAIGludCBxY2E4a19wb3J0X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwogCXUxNiBwb3J0X21hc2sgPSBCSVQocG9ydCk7CiAKJiM0MzsJLyogVW5rbm93biB1bmljYXN0IGZsb29kaW5nIGRlbGl2ZXJzIGhvc3QgdHJhZmZpYyB0byB0aGUgY29uZHVpdC4gKi8KJiM0MzsJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHsKJiM0MzsJCWlmICghdmlkKQomIzQzOwkJCXZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjsKJiM0MzsKJiM0MzsJCXJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHFjYThrX3BvcnRfZmRiX2luc2VydChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7CiB9CiAKQEAgLTgzOSw2ICYjNDM7OTIyLDkgQEAgaW50IHFjYThrX3BvcnRfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCXN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiAJdTE2IHBvcnRfbWFzayA9IEJJVChwb3J0KTsKIAomIzQzOwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCWlmICghdmlkKQogCQl2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7CiAKQEAgLTg2OCw2ICYjNDM7OTU0LDc1IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdTggcWNhOGtfbGFnX3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGRzYV9sYWcgKmxhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXU4IHBvcnRfbWFzayA9IDA7CiYjNDM7CiYjNDM7CWRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy0mZ3Q7ZHN0LCBsYWcpCiYjNDM7CQlpZiAoZHAtJmd0O2RzID09IGRzKQomIzQzOwkJCXBvcnRfbWFzayB8PSBCSVQoZHAtJmd0O2luZGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBvcnRfbWFzazsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcWNhOGtfbGFnX2lzX2NwdShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgZHNhX2xhZyAqbGFnKQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJYm9vbCBoYXNfY3B1ID0gZmFsc2U7CiYjNDM7CiYjNDM7CWRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy0mZ3Q7ZHN0LCBsYWcpIHsKJiM0MzsJCWlmIChkcC0mZ3Q7ZHMgIT0gZHMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWRzYV9wb3J0X2lzX2NwdShkcCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJaGFzX2NwdSA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGhhc19jcHU7CiYjNDM7fQomIzQzOwomIzQzO2ludCBxY2E4a19sYWdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZywKJiM0MzsJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsCiYjNDM7CQkgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKQomIzQzO3sKJiM0MzsJc3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJdTggcG9ydF9tYXNrOwomIzQzOwomIzQzOwlwb3J0X21hc2sgPSBxY2E4a19sYWdfcG9ydF9tYXNrKGRzLCAmYW1wO2xhZyk7CiYjNDM7CiYjNDM7CWlmIChxY2E4a19sYWdfaXNfY3B1KGRzLCAmYW1wO2xhZykpIHsKJiM0MzsJCWlmICghdmlkKQomIzQzOwkJCXZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjsKJiM0MzsKJiM0MzsJCXJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsCiYjNDM7CQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLAomIzQzOwkJICAgICAgc3RydWN0IGRzYV9kYiBkYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CXU4IHBvcnRfbWFzazsKJiM0MzsKJiM0MzsJaWYgKHFjYThrX2xhZ19pc19jcHUoZHMsICZhbXA7bGFnKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIXZpZCkKJiM0MzsJCXZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjsKJiM0MzsKJiM0MzsJcG9ydF9tYXNrID0gcWNhOGtfbGFnX3BvcnRfbWFzayhkcywgJmFtcDtsYWcpOwomIzQzOwomIzQzOwlyZXR1cm4gcWNhOGtfZmRiX2RlbChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7CiYjNDM7fQomIzQzOwogaW50IHFjYThrX3BvcnRfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYiwKIAkJICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmggYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmgKaW5kZXggOTU2MzM4ODkzMDMyNS4uMzMzYjM0Mzg4NmRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaApAQCAtNTIzLDYgJiM0Mzs1MjMsMTAgQEAgaW50IHFjYThrX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KTsKIGludCBxY2E4a19zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplZWUpOwogCiAvKiBDb21tb24gYnJpZGdlIGZ1bmN0aW9uICovCiYjNDM7aW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsCiYjNDM7CQkJICAgIHUzMiAqcG9ydF9tYXNrLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpOwogaW50IHFjYThrX3BvcnRfcHJlX2JyaWRnZV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJCXN0cnVjdCBzd2l0Y2hkZXZfYnJwb3J0X2ZsYWdzIGZsYWdzLApAQCAtNTYxLDYgJiM0Mzs1NjUsMTIgQEAgaW50IHFjYThrX3BvcnRfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkgICAgICAgc3RydWN0IGRzYV9kYiBkYik7CiBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTsKJiM0MztpbnQgcWNhOGtfbGFnX2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsCiYjNDM7CQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLAomIzQzOwkJICAgICAgc3RydWN0IGRzYV9kYiBkYik7CiYjNDM7aW50IHFjYThrX2xhZ19mZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLAomIzQzOwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCwKJiM0MzsJCSAgICAgIHN0cnVjdCBkc2FfZGIgZGIpOwogCiAvKiBDb21tb24gTURCIGZ1bmN0aW9uICovCiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBxY2E4ayBEU0EgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYHFjYThrYCBEU0EgZHJpdmVyLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IG9uZSwgYWRkaW5nIG11bHRpLUNQVSBwb3J0IHN1cHBvcnQgYW5kIExBRyBGREIgb3BlcmF0aW9ucywgYW1vbmcgb3RoZXIgdGhpbmdzLiBJdCB0b3VjaGVzIGBxY2E4ay04eHh4LmNgLCBgcWNhOGstY29tbW9uLmNgLCBhbmQgdGhlIGhlYWRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERTQSBkcml2ZXJzIGFyZSBub3RvcmlvdXNseSBoYXJkd2FyZS1kZXBlbmRlbnQuIFRoZXkgdHlwaWNhbGx5IHJlbHkgb24gYSBwaHlzaWNhbCBFdGhlcm5ldCBzd2l0Y2ggY2hpcCBjb25uZWN0ZWQgdmlhIE1ESU8gb3IgU1BJLCB0aGF0IHNvcnQgb2YgdGhpbmcuCgpIbW0sIGNhbiBJIGluc3RhbnRpYXRlIGEgRFNBIGRyaXZlciBsaWtlIGBxY2E4a2AgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cyBpbiBRRU1VLCBvciBldmVuIHdpdGggc29tZSBzb3J0IG9mIGR1bW15IGRldmljZT8gVGhpcyBpcyB1c3VhbGx5IGhvdyB0aGV5IGNvbWUgdXAgLSBJIG1lYW4sIGBxY2E4a2AgaXMgKnNwZWNpZmljYWxseSogZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBRQ0E4SyBlbXVsYXRpb24gaW4gUUVNVSwgb3IgYXQgbGVhc3QgYSBmdXp6aW5nIHRhcmdldC4KCldhaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgZW11bGF0ZSAqc3BlY2lmaWMqIERTQSBzd2l0Y2ggY2hpcHMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgbW9yZSBnZW5lcmljIHdheSB0byBpbnN0YW50aWF0ZSB0aGVtLCBvciBpZiBpdCYjMzk7cyBhIHNvZnR3YXJlIHN3aXRjaC4gSSYjMzk7dmUgYmVlbiB0aHJvdWdoIHRoaXMgYmVmb3JlLCBidXQgZG9lcyBzeXprYWxsZXIgaGF2ZSAqYW55KiBidWlsdC1pbiBzdXBwb3J0IGZvciBpbmplY3RpbmcgZGV2aWNlIHRyZWUgbm9kZXMgb3IgdXNpbmcgbmV0bGluayB0byBjb25maWd1cmUgYSBEU0Egc2V0dXA/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gRFNBIHN3aXRjaGVzIGFyZSB1c3VhbGx5IGRlZmluZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvciBwbGF0Zm9ybSBkYXRhLgoKT2theSwgSSYjMzk7bSBnZXR0aW5nIGJhY2sgdG8gc3l6a2FsbGVyJiMzOTtzIGxpbWl0cy4gSSBrbm93IGl0IGNhbiB1c2UgYHN5el9nZW5ldGxpbmtgIGFuZCBvdGhlciBuZXR3b3JrIGZ1enppbmcgdGVjaG5pcXVlcywgYnV0IHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMsIHdpdGhvdXQgcHJvcGVyIFFFTVUgZW11bGF0aW9uLCBhcmUgZ2VuZXJhbGx5IHVucmVhY2hhYmxlLiBNeSBxdWVzdGlvbiByZW1haW5zOiBjYW4gSSBwcm9iZSBgcWNhOGtgIGluc2lkZSBRRU1VPyBMZXQmIzM5O3MgZ28gc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSBmb3IgYHFjYThrYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY2E4ayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxOTUxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX05FVF9EU0FfQVI5MzMxKVx0JiM0Mzs9IGFyOTMzMS5vXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX05FVF9EU0FfUUNBOEspXHQmIzQzOz0gcWNhOGsub1xuZHJpdmVycy9uZXQvZHNhL3FjYS9NYWtlZmlsZTo0OnFjYThrLXkgXHRcdFx0JiM0Mzs9IHFjYThrLWNvbW1vbi5vIHFjYThrLTh4eHgub1xuZHJpdmVycy9uZXQvZHNhL3FjYS9NYWtlZmlsZS01LWlmZGVmIENPTkZJR19ORVRfRFNBX1FDQThLX0xFRFNfU1VQUE9SVFxuZHJpdmVycy9uZXQvZHNhL3FjYS9NYWtlZmlsZTo2OnFjYThrLXlcdFx0XHRcdCYjNDM7PSBxY2E4ay1sZWRzLm9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGUtNy1lbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIzLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjQ6I2luY2x1ZGUgXCYjMzQ7cWNhOGsuaFwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjU6I2luY2x1ZGUgXCYjMzQ7cWNhOGtfbGVkcy5oXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yNi1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTI3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyODpxY2E4a19zcGxpdF9hZGRyKHUzMiByZWdhZGRyLCB1MTYgKnIxLCB1MTYgKnIyLCB1MTYgKnBhZ2UpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDE6cWNhOGtfbWlpX3dyaXRlX2xvKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiB2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDktXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoXHUwMDI2YnVzLVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUwOlx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSBxY2E4ayAzMmJpdCBsbyByZWdpc3RlclxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NjpxY2E4a19taWlfd3JpdGVfaGkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02NC1cdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZidXMtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjU6XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHFjYThrIDMyYml0IGhpIHJlZ2lzdGVyXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTcwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjcxOnFjYThrX21paV9yZWFkX2xvKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiAqdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzLVx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZidXMtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODQ6XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIHFjYThrIDMyYml0IGxvIHJlZ2lzdGVyXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg1LVx0KnZhbCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTE6cWNhOGtfbWlpX3JlYWRfaGkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyICp2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTAzLVx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZidXMtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTA0Olx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcmVhZCBxY2E4ayAzMmJpdCBoaSByZWdpc3RlclxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDUtXHQqdmFsID0gMDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMTA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTExOnFjYThrX21paV9yZWFkMzIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyICp2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExNy1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjExODpcdHJldCA9IHFjYThrX21paV9yZWFkX2xvKGJ1cywgcGh5X2lkLCByZWdudW0sIFx1MDAyNmxvKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExOS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTIxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTIyOlx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfaGkoYnVzLCBwaHlfaWQsIHJlZ251bSAmIzQzOyAxLCBcdTAwMjZoaSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjMtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEzMj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTMzOnFjYThrX21paV93cml0ZTMyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiB2YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzQte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1Olx0aWYgKHFjYThrX21paV93cml0ZV9sbyhidXMsIHBoeV9pZCwgcmVnbnVtLCB2YWwpIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2LVx0XHRyZXR1cm47XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzctXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzg6XHRxY2E4a19taWlfd3JpdGVfaGkoYnVzLCBwaHlfaWQsIHJlZ251bSAmIzQzOyAxLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xNDE9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTQyOnFjYThrX3NldF9wYWdlKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1MTYgcGFnZSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE0My17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTUzLVx0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKFx1MDAyNmJ1cy1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNTQ6XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHNldCBxY2E4ayBwYWdlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE1NS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNjItXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjM6c3RhdGljIHZvaWQgcWNhOGtfcndfcmVnX2Fja19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE2NC17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjU6XHRzdHJ1Y3QgcWNhOGtfbWdtdF9ldGhfZGF0YSAqbWdtdF9ldGhfZGF0YTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE2NjpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE2Ny1cdHN0cnVjdCBxY2FfbWdtdF9ldGhoZHIgKm1nbXRfZXRoaGRyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxNy1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIxODpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFjYThrX2FsbG9jX21kaW9faGVhZGVyKGVudW0gbWRpb19jbWQgY21kLCB1MzIgcmVnLCB1MzIgKnZhbCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxOS1cdFx0XHRcdFx0ICAgICAgIGludCBwcmlvcml0eSwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMDEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMDI6c3RhdGljIHZvaWQgcWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzZXFfbnVtKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzAzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTI6c3RhdGljIGludCBxY2E4a19yZWFkX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTMte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzE0Olx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcdTAwMjZwcml2LVx1MDAzZW1nbXRfZXRoX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTUtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTMxOC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjMxOTpcdHNrYiA9IHFjYThrX2FsbG9jX21kaW9faGVhZGVyKE1ESU9fUkVBRCwgcmVnLCBOVUxMLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzIwLVx0XHRcdFx0ICAgICAgUUNBOEtfRVRIRVJORVRfTURJT19QUklPUklUWSwgbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMzgtXHRtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMzk6XHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc2tiLCBtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNDAtXHRtZ210X2V0aF9kYXRhLVx1MDAzZWFjayA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTM2My1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjM2NDpzdGF0aWMgaW50IHFjYThrX3dyaXRlX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNjUte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzY2Olx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcdTAwMjZwcml2LVx1MDAzZW1nbXRfZXRoX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNjctXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTM3MC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjM3MTpcdHNrYiA9IHFjYThrX2FsbG9jX21kaW9faGVhZGVyKE1ESU9fV1JJVEUsIHJlZywgdmFsLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzcyLVx0XHRcdFx0ICAgICAgUUNBOEtfRVRIRVJORVRfTURJT19QUklPUklUWSwgbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zOTAtXHRtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozOTE6XHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc2tiLCBtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zOTItXHRtZ210X2V0aF9kYXRhLVx1MDAzZWFjayA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQxMj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MTM6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZV92YWwpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MTQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQxNy1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQxODpcdHJldCA9IHFjYThrX3JlYWRfZXRoKHByaXYsIHJlZywgXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQyNC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQyNTpcdHJldHVybiBxY2E4a193cml0ZV9ldGgocHJpdiwgcmVnLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQyNi19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDI4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQyOTpxY2E4a19yZWFkX21paShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCAqdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDMwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MzQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MzU6XHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQzNi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MzgtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0Mzk6XHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ0MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDQyLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDQzOlx0cmV0ID0gcWNhOGtfbWlpX3JlYWQzMihidXMsIDB4MTAgfCByMiwgcjEsIHZhbCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NDQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDUwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ1MTpxY2E4a193cml0ZV9taWkoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDUyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NTYtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NTc6XHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ1OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjAtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NjE6XHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ2Mi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDY0LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDY1Olx0cWNhOGtfbWlpX3dyaXRlMzIoYnVzLCAweDEwIHwgcjIsIHIxLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDY2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQ3Mj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NzM6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX21paShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdWludDMyX3QgcmVnLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDc0LVx0XHRcdCAgICAgdWludDMyX3QgbWFzaywgdWludDMyX3Qgd3JpdGVfdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4MC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ4MTpcdHFjYThrX3NwbGl0X2FkZHIocmVnLCBcdTAwMjZyMSwgXHUwMDI2cjIsIFx1MDAyNnBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDgyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4NC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ4NTpcdHJldCA9IHFjYThrX3NldF9wYWdlKHByaXYsIHBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDg2LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00ODgtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0ODk6XHRyZXQgPSBxY2E4a19taWlfcmVhZDMyKGJ1cywgMHgxMCB8IHIyLCByMSwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDk0LVx0dmFsIHw9IHdyaXRlX3ZhbDtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ5NTpcdHFjYThrX21paV93cml0ZTMyKGJ1cywgMHgxMCB8IHIyLCByMSwgdmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01MDM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTA0OnFjYThrX2J1bGtfcmVhZCh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfbGVuLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA1LVx0XHR2b2lkICp2YWxfYnVmLCBzaXplX3QgdmFsX2xlbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MDctXHRpbnQgaSwgY291bnQgPSB2YWxfbGVuIC8gc2l6ZW9mKHUzMiksIHJldDtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUwODpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gY3R4O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA5LVx0dTMyIHJlZyA9ICoodTE2ICopcmVnX2J1Zjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTEtXHRpZiAocHJpdi1cdTAwM2VtZ210X2NvbmR1aXQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1MTI6XHQgICAgIXFjYThrX3JlYWRfZXRoKHByaXYsIHJlZywgdmFsX2J1ZiwgdmFsX2xlbikpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTMtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUxNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOywgcmVnICYjNDM7PSBzaXplb2YodTMyKSkge1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTE3Olx0XHRyZXQgPSBxY2E4a19yZWFkX21paShwcml2LCByZWcsIHZhbF9idWYgJiM0MzsgaSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTgtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTI1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUyNjpxY2E4a19idWxrX2dhdGhlcl93cml0ZSh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfbGVuLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTI3LVx0XHRcdGNvbnN0IHZvaWQgKnZhbF9idWYsIHNpemVfdCB2YWxfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUyOS1cdGludCBpLCBjb3VudCA9IHZhbF9sZW4gLyBzaXplb2YodTMyKSwgcmV0O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTMwOlx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBjdHg7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MzEtXHR1MzIgcmVnID0gKih1MTYgKilyZWdfYnVmO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUzNC1cdGlmIChwcml2LVx1MDAzZW1nbXRfY29uZHVpdCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUzNTpcdCAgICAhcWNhOGtfd3JpdGVfZXRoKHByaXYsIHJlZywgdmFsLCB2YWxfbGVuKSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUzNi1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTQxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7LCByZWcgJiM0Mzs9IHNpemVvZih1MzIpLCB2YWwmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NDI6XHRcdHJldCA9IHFjYThrX3dyaXRlX21paShwcml2LCByZWcsICp2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTQzLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTU1MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTE6cWNhOGtfYnVsa193cml0ZSh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBieXRlcylcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU1Mi17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTM6XHRyZXR1cm4gcWNhOGtfYnVsa19nYXRoZXJfd3JpdGUoY3R4LCBkYXRhLCBzaXplb2YodTE2KSwgZGF0YSAmIzQzOyBzaXplb2YodTE2KSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU1NC1cdFx0XHRcdCAgICAgICBieXRlcyAtIHNpemVvZih1MTYpKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01NTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTU4OnFjYThrX3JlZ21hcF91cGRhdGVfYml0cyh2b2lkICpjdHgsIHVpbnQzMl90IHJlZywgdWludDMyX3QgbWFzaywgdWludDMyX3Qgd3JpdGVfdmFsKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTU5LXtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU2MDpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gY3R4O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTYxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTYyOlx0aWYgKCFxY2E4a19yZWdtYXBfdXBkYXRlX2JpdHNfZXRoKHByaXYsIHJlZywgbWFzaywgd3JpdGVfdmFsKSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU2My1cdFx0cmV0dXJuIDA7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NjU6XHRyZXR1cm4gcWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX21paShwcml2LCByZWcsIG1hc2ssIHdyaXRlX3ZhbCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjYtfVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTY3LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBxY2E4a19yZWdtYXBfY29uZmlnID0ge1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTY5LVx0LnJlZ19iaXRzID0gMTYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTcyLVx0Lm1heF9yZWdpc3RlciA9IDB4MTZhYywgLyogZW5kIE1JQiAtIFBvcnQ2IHJhbmdlICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzM6XHQucmVhZCA9IHFjYThrX2J1bGtfcmVhZCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU3NDpcdC53cml0ZSA9IHFjYThrX2J1bGtfd3JpdGUsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzU6XHQucmVnX3VwZGF0ZV9iaXRzID0gcWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTc2Olx0LnJkX3RhYmxlID0gXHUwMDI2cWNhOGtfcmVhZGFibGVfdGFibGUsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1Nzc6XHQuZGlzYWJsZV9sb2NraW5nID0gdHJ1ZSwgLyogTG9ja2luZyBpcyBoYW5kbGVkIGJ5IHFjYThrIHJlYWQvd3JpdGUgKi9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU3OC1cdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwgLyogRXhwbGljaXRseSBkaXNhYmxlIENBQ0hFICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTg2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU4NzpxY2E4a19waHlfZXRoX2J1c3lfd2FpdChzdHJ1Y3QgcWNhOGtfbWdtdF9ldGhfZGF0YSAqbWdtdF9ldGhfZGF0YSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU4OC1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqcmVhZF9za2IsIHUzMiAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYwMC1cdG1nbXRfZXRoX2RhdGEtXHUwMDNlc2VxJiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjYwMTpcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShza2IsIG1nbXRfZXRoX2RhdGEtXHUwMDNlc2VxKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYwMi1cdG1nbXRfZXRoX2RhdGEtXHUwMDNlYWNrID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NjIyPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjYyMzpxY2E4a19waHlfZXRoX2NvbW1hbmQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGJvb2wgcmVhZCwgaW50IHBoeSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyNC1cdFx0ICAgICAgaW50IHJlZ251bSwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjI2LVx0c3RydWN0IHNrX2J1ZmYgKndyaXRlX3NrYiwgKmNsZWFyX3NrYiwgKnJlYWRfc2tiO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjI3Olx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGE7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02MjgtXHR1MzIgd3JpdGVfdmFsLCBjbGVhcl92YWwgPSAwLCB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjQ5LVx0LyogUHJlYWxsb2MgYWxsIHRoZSBuZWVkZWQgc2tiIGJlZm9yZSB0aGUgbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjUwOlx0d3JpdGVfc2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19XUklURSwgUUNBOEtfTURJT19NQVNURVJfQ1RSTCwgXHUwMDI2d3JpdGVfdmFsLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjUxLVx0XHRcdFx0XHQgICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2Yod3JpdGVfdmFsKSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjU0LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjU1Olx0Y2xlYXJfc2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19XUklURSwgUUNBOEtfTURJT19NQVNURVJfQ1RSTCwgXHUwMDI2Y2xlYXJfdmFsLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjU2LVx0XHRcdFx0XHQgICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2YoY2xlYXJfdmFsKSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjYxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjYyOlx0cmVhZF9za2IgPSBxY2E4a19hbGxvY19tZGlvX2hlYWRlcihNRElPX1JFQUQsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsIFx1MDAyNmNsZWFyX3ZhbCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY2My1cdFx0XHRcdFx0ICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2YoY2xlYXJfdmFsKSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzAyLVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzAzOlx0cWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKHdyaXRlX3NrYiwgbWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzA0LVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VhY2sgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03MjQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3MjU6XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChxY2E4a19waHlfZXRoX2J1c3lfd2FpdCwgcmV0MSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTcyNi1cdFx0XHRcdCEodmFsIFx1MDAyNiBRQ0E4S19NRElPX01BU1RFUl9CVVNZKSwgMCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03MzktXHRcdG1nbXRfZXRoX2RhdGEtXHUwMDNlc2VxJiM0MzsmIzQzOztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjc0MDpcdFx0cWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKHJlYWRfc2tiLCBtZ210X2V0aF9kYXRhLVx1MDAzZXNlcSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03NDEtXHRcdG1nbXRfZXRoX2RhdGEtXHUwMDNlYWNrID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzY4LVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzY5Olx0cWNhOGtfbWRpb19oZWFkZXJfZmlsbF9zZXFfbnVtKGNsZWFyX3NrYiwgbWdtdF9ldGhfZGF0YS1cdTAwM2VzZXEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzcwLVx0bWdtdF9ldGhfZGF0YS1cdTAwM2VhY2sgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz03OTM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6Nzk0OnFjYThrX21kaW9fYnVzeV93YWl0KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiByZWcsIHUzMiBtYXNrKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzk1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03OTktXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MDA6XHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgwMS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgwMjpcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHFjYThrX21paV9yZWFkX2hpLCByZXQxLCAhKHZhbCBcdTAwMjYgbWFzayksIDAsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDMtXHRcdFx0XHRRQ0E4S19CVVNZX1dBSVRfVElNRU9VVCAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgwNS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgwNjpcdC8qIENoZWNrIGlmIHFjYThrX3JlYWQgaGFzIGZhaWxlZCBmb3IgYSBkaWZmZXJlbnQgcmVhc29uXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDctXHQgKiBiZWZvcmUgcmV0dXJudGluZyAtRVRJTUVET1VUXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9ODE1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgxNjpxY2E4a19tZGlvX3dyaXRlKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgcGh5LCBpbnQgcmVnbnVtLCB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODMwLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODMxOlx0cWNhOGtfc3BsaXRfYWRkcihRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcdTAwMjZyMSwgXHUwMDI2cjIsIFx1MDAyNnBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODMyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzNC1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgzNTpcdHJldCA9IHFjYThrX3NldF9wYWdlKHByaXYsIHBhZ2UpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODM2LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MzgtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4Mzk6XHRxY2E4a19taWlfd3JpdGUzMihidXMsIDB4MTAgfCByMiwgcjEsIHZhbCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDAtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NDE6XHRyZXQgPSBxY2E4a19tZGlvX2J1c3lfd2FpdChidXMsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDItXHRcdFx0XHQgICBRQ0E4S19NRElPX01BU1RFUl9CVVNZKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDUtXHQvKiBldmVuIGlmIHRoZSBidXN5X3dhaXQgdGltZW91dHMgdHJ5IHRvIGNsZWFyIHRoZSBNQVNURVJfRU4gKi9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg0NjpcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgJiM0MzsgMSwgMCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDctXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9ODUzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg1NDpxY2E4a19tZGlvX3JlYWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwaHksIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NTUte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2Ny1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg2ODpcdHFjYThrX3NwbGl0X2FkZHIoUUNBOEtfTURJT19NQVNURVJfQ1RSTCwgXHUwMDI2cjEsIFx1MDAyNnIyLCBcdTAwMjZwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NzEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NzI6XHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODc1LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODc2Olx0cWNhOGtfbWlpX3dyaXRlX2hpKGJ1cywgMHgxMCB8IHIyLCByMSAmIzQzOyAxLCB2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODc3LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODc4Olx0cmV0ID0gcWNhOGtfbWRpb19idXN5X3dhaXQoYnVzLCBRQ0E4S19NRElPX01BU1RFUl9DVFJMLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODc5LVx0XHRcdFx0ICAgUUNBOEtfTURJT19NQVNURVJfQlVTWSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODgyLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODgzOlx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfbG8oYnVzLCAweDEwIHwgcjIsIHIxLCBcdTAwMjZ2YWwpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODg0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg4Ni1cdC8qIGV2ZW4gaWYgdGhlIGJ1c3lfd2FpdCB0aW1lb3V0cyB0cnkgdG8gY2xlYXIgdGhlIE1BU1RFUl9FTiAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODg3Olx0cWNhOGtfbWlpX3dyaXRlX2hpKGJ1cywgMHgxMCB8IHIyLCByMSAmIzQzOyAxLCAwKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg4OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz04OTc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODk4OnFjYThrX2ludGVybmFsX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKnNsYXZlX2J1cywgaW50IHBoeSwgaW50IHJlZ251bSwgdTE2IGRhdGEpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04OTkte1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTAwOlx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBzbGF2ZV9idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwMS1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTAzLVx0LyogVXNlIG1kaW8gRXRoZXJuZXQgd2hlbiBhdmFpbGFibGUsIGZhbGxiYWNrIHRvIGxlZ2FjeSBvbmUgb24gZXJyb3IgKi9cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkwNDpcdHJldCA9IHFjYThrX3BoeV9ldGhfY29tbWFuZChwcml2LCBmYWxzZSwgcGh5LCByZWdudW0sIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTA1LVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTA3LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTA4Olx0cmV0dXJuIHFjYThrX21kaW9fd3JpdGUocHJpdiwgcGh5LCByZWdudW0sIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTA5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05MTE9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTEyOnFjYThrX2ludGVybmFsX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqc2xhdmVfYnVzLCBpbnQgcGh5LCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTEzLXtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxNDpcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gc2xhdmVfYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MTUtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkxNy1cdC8qIFVzZSBtZGlvIEV0aGVybmV0IHdoZW4gYXZhaWxhYmxlLCBmYWxsYmFjayB0byBsZWdhY3kgb25lIG9uIGVycm9yICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MTg6XHRyZXQgPSBxY2E4a19waHlfZXRoX2NvbW1hbmQocHJpdiwgdHJ1ZSwgcGh5LCByZWdudW0sIDApO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTE5LVx0aWYgKHJldCBcdTAwM2U9IDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTIxLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTIyOlx0cmV0ID0gcWNhOGtfbWRpb19yZWFkKHByaXYsIHBoeSwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkyMy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05MzA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTMxOnFjYThrX2xlZ2FjeV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpzbGF2ZV9idXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkzMi17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MzM6XHRwb3J0ID0gcWNhOGtfcG9ydF90b19waHkocG9ydCkgJSBQSFlfTUFYX0FERFI7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MzU6XHRyZXR1cm4gcWNhOGtfaW50ZXJuYWxfbWRpb193cml0ZShzbGF2ZV9idXMsIHBvcnQsIHJlZ251bSwgZGF0YSk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzYtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTkzOD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Mzk6cWNhOGtfbGVnYWN5X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqc2xhdmVfYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk0MC17XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NDE6XHRwb3J0ID0gcWNhOGtfcG9ydF90b19waHkocG9ydCkgJSBQSFlfTUFYX0FERFI7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDItXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NDM6XHRyZXR1cm4gcWNhOGtfaW50ZXJuYWxfbWRpb19yZWFkKHNsYXZlX2J1cywgcG9ydCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk0NC19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk0NzpxY2E4a19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NjYtXHRidXMtXHUwMDNlcHJpdiA9ICh2b2lkICopcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk2NzpcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDtxY2E4ay0lZC4lZFwmIzM0OyxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk2OC1cdFx0IGRzLVx1MDAzZWRzdC1cdTAwM2VpbmRleCwgZHMtXHUwMDNlaW5kZXgpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk3Mi1cdFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSB0cmVlIGRlY2xhcmVzIHRoZSBwb3J0OnBoeSBtYXBwaW5nICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NzM6XHRcdGJ1cy1cdTAwM2VuYW1lID0gXCYjMzQ7cWNhOGsgdXNlciBtaWlcJiMzNDs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NzQ6XHRcdGJ1cy1cdTAwM2VyZWFkID0gcWNhOGtfaW50ZXJuYWxfbWRpb19yZWFkO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTc1Olx0XHRidXMtXHUwMDNld3JpdGUgPSBxY2E4a19pbnRlcm5hbF9tZGlvX3dyaXRlO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTc2LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk3Ny1cdFx0LyogSWYgYSBtYXBwaW5nIGNhbiYjMzk7dCBiZSBmb3VuZCwgdGhlIGxlZ2FjeSBtYXBwaW5nIGlzIHVzZWQsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Nzg6XHRcdCAqIHVzaW5nIHFjYThrX3BvcnRfdG9fcGh5KClcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk3OS1cdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTgxLVx0XHRidXMtXHUwMDNlcGh5X21hc2sgPSB+ZHMtXHUwMDNlcGh5c19taWlfbWFzaztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4MjpcdFx0YnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtxY2E4ay1sZWdhY3kgdXNlciBtaWlcJiMzNDs7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODM6XHRcdGJ1cy1cdTAwM2VyZWFkID0gcWNhOGtfbGVnYWN5X21kaW9fcmVhZDtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk4NDpcdFx0YnVzLVx1MDAzZXdyaXRlID0gcWNhOGtfbGVnYWN5X21kaW9fd3JpdGU7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk5NTpxY2E4a19zZXR1cF9tZGlvX2J1cyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk5Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA0MS1cdCAqIElmIHRoZSBleHRlcm5hbCBtZGlvLWJ1cyBkcml2ZXIgaXMgY2FwYWJsZSBtYWdpY2FsbHkgZGlzYWJsaW5nXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDQyOlx0ICogdGhlIFFDQThLX01ESU9fTUFTVEVSX0VOIGFuZCBtdXRleC9zcGluLWxvY2tpbmcgb3V0IHRoZSBxY2E4ayYjMzk7c1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA0My1cdCAqIGFjY2Vzc29ycyBmb3IgdGhlIHRpbWUgYmVpbmcsIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHB1bGwgdGhpc1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNTktXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDYwOlx0cmV0dXJuIHFjYThrX21kaW9fcmVnaXN0ZXIocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDYxLX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMDYzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwNjQ6cWNhOGtfc2V0dXBfbWFjX3B3cl9zZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDY1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDgwLVx0aWYgKG1hc2spIHtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwODE6XHRcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19SRUdfTUFDX1BXUl9TRUwsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDgyLVx0XHRcdFx0UUNBOEtfTUFDX1BXUl9SR01JSTBfMV84ViB8XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTA5MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDkxOnFjYThrX3NldHVwX29mX3B3c19yZWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDkyLXtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwOTM6XHRjb25zdCBzdHJ1Y3QgcWNhOGtfbWF0Y2hfZGF0YSAqZGF0YSA9IHByaXYtXHUwMDNlaW5mbztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwOTQtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwcml2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMDYtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTA3Olx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUkVHX1BXUywgUUNBODMyN19QV1NfUEFDS0FHRTE0OF9FTixcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMDgtXHRcdFx0XHR2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMjQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTI1Olx0cmV0dXJuIHFjYThrX3Jtdyhwcml2LCBRQ0E4S19SRUdfUFdTLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEyNi1cdFx0XHRRQ0E4S19QV1NfTEVEX09QRU5fRU5fQ1NSIHwgUUNBOEtfUFdTX1BPV0VSX09OX1NFTCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMTMwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjExMzE6cWNhOGtfcGFyc2VfcG9ydF9jb25maWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMTMyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMjI4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMjI5OnFjYThrX21hY19jb25maWdfc2V0dXBfaW50ZXJuYWxfZGVsYXkoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBjcHVfcG9ydF9pbmRleCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEyMzAtXHRcdFx0XHQgICAgICB1MzIgcmVnKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEyNTctXHQvKiBTZXQgUkdNSUkgZGVsYXkgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHZhbHVlcyAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTI1ODpcdHJldCA9IHFjYThrX3Jtdyhwcml2LCByZWcsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjU5LVx0XHRcdFFDQThLX1BPUlRfUEFEX1JHTUlJX1RYX0RFTEFZX01BU0sgfFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEyNjk9c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMjcwOnFjYThrX3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjcxLVx0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjczLVx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEyNzQ6XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRwLVx1MDAzZWRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjc1LVx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3MgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEyOTk9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzMDA6cWNhOGtfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDEtXHRcdFx0IGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDQtXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cdTAwM2VkcztcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzMDU6XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDYtXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNTgtXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOlxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1OTpcdFx0cWNhOGtfd3JpdGUocHJpdiwgcmVnLCBRQ0E4S19QT1JUX1BBRF9SR01JSV9FTik7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzYwLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2MS1cdFx0LyogQ29uZmlndXJlIHJnbWlpIGRlbGF5ICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzYyOlx0XHRxY2E4a19tYWNfY29uZmlnX3NldHVwX2ludGVybmFsX2RlbGF5KHByaXYsIGNwdV9wb3J0X2luZGV4LCByZWcpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzY4LVx0XHRpZiAocHJpdi1cdTAwM2Vzd2l0Y2hfaWQgPT0gUUNBOEtfSURfUUNBODMzNylcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzNjk6XHRcdFx0cWNhOGtfd3JpdGUocHJpdiwgUUNBOEtfUkVHX1BPUlQ1X1BBRF9DVFJMLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM3MC1cdFx0XHRcdCAgICBRQ0E4S19QT1JUX1BBRF9SR01JSV9SWF9ERUxBWV9FTik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM3NC1cdFx0LyogRW5hYmxlIFNHTUlJIG9uIHRoZSBwb3J0ICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzc1Olx0XHRxY2E4a193cml0ZShwcml2LCByZWcsIFFDQThLX1BPUlRfUEFEX1NHTUlJX0VOKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNzYtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzODMtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzg0OnN0YXRpYyB2b2lkIHFjYThrX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzODUtXHRcdFx0XHQgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xNDE5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNDIwOnFjYThrX3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNDIxLVx0XHRcdCAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIFFDQThLIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyB0aGUgYHFjYThrYCBkcml2ZXIsIHdoaWNoIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHJlZ2lzdGVycyBhIERTQSBzd2l0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBzb21ldGhpbmcgd2UgY2FuIGV2ZW4gZnV6eiBlZmZlY3RpdmVseSwgYW5kIHRoYXQgbWVhbnMgZGV0ZXJtaW5pbmcgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0IHdpdGhvdXQgcmVseWluZyBvbiBhY3R1YWwgaGFyZHdhcmUuIERTQSBkcml2ZXJzIHR5cGljYWxseSB1c2UgdGhlIGRldmljZSB0cmVlLCBzbyBteSBicmFpbiBpcyBpbW1lZGlhdGVseSBnb2luZyBkb3duIHRoYXQgcGF0aC4gQ2FuIHdlIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXkgdG8gYnJpbmcgdGhlIGRyaXZlciB1cD8KClN5emthbGxlciwgb2YgY291cnNlLCBjb21lcyB0byBtaW5kLiBJdCBoYXMgd2F5cyB0byBpbmplY3QgdGhpbmdzICh0aG91Z2ggSSYjMzk7bSBzdGlsbCB0cnlpbmcgdG8gcmVtZW1iZXIgZXhhY3RseSB3aGF0IGl0IGNhbiBkbykuIEkga25vdyBpdCBoYXMgYHN5el9tb3VudF9pbWFnZWAgYW5kIGBzeXpfcmVhZF9wYXJ0X3NlY3RvcmAg4oCTIGJ1dCBmb3IgRFQgaW5qZWN0aW9uIHNwZWNpZmljYWxseSwgaXQmIzM5O3Mgbm90IGNsZWFyLiBEb2VzIGl0IHVzZSBgc3l6X2dlbmV0bGlua2A/IE5vLCB3YWl0LCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgaGF2ZSBgc3l6X2Rldl9kdF9vdmVybGF5YCBvciBzb21ldGhpbmc/IEhvbGQgb24sIG5vLCBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhICpnZW5lcmljKiBEVCBvdmVybGF5IGluamVjdG9yIGluIHVwc3RyZWFtIExpbnV4IHVubGVzcyBpdCYjMzk7cyB2aWEgY29uZmlnZnMuCgpBIHJlbGF0ZWQgcXVlc3Rpb24gaXM6IGRvZXMgU3l6a2FsbGVyICpldmVuKiB0ZXN0IERTQSBkcml2ZXJzPyBMZXQgbWUgc2VlIGlmIGBDT05GSUdfTkVUX0RTQV9RQ0E4S2AgaXMgZW5hYmxlZCBpbiBzeXpib3QuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyByZWxhdGVkIHRvIGBxY2E4a2AuIE9oLCBpbnRlcmVzdGluZyAtIHRoZSBjb21taXQgYXV0aG9yIGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gU28sIHRoaXMgbGlrZWx5IG1lYW5zIHRoZSBwYXRjaCB3YXMgc3VibWl0dGVkIHRvIHN5ei1jbHVzdGVyIGZvciB0ZXN0aW5nLCBvciBpdCYjMzk7cyBhIHBhdGNoIHVuZGVyIHJldmlldyB0aGF0IHN5ei1jbHVzdGVyIGlzIHRlc3RpbmcuCgpUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGNvbmNlcm5zIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCYjMzk7cyBrZXk6IGNhbiB3ZSByZWFjaCBgcWNhOGtgIGNvZGUgaW4gUUVNVT8gTm93LCB0aGlua2luZyBhYm91dCBpdCwgYHFjYThrYCBpcyBhbiBNRElPIGRldmljZS4gQXJlIHRoZXJlIHdheXMgdG8gZW11bGF0ZSBNRElPIGJ1c2VzIGluIFFFTVUsIG1heWJlIHRocm91Z2ggYG1kaW8tYmNtLXVuaW1hY2Agb3Igc2ltaWxhcj8gTm8sIFFFTVUgZG9lc24mIzM5O3Qgc2VlbSB0byBlbXVsYXRlIGEgYHFjYThrYCBzcGVjaWZpY2FsbHkuCgpCdXQgd2FpdCwgY2FuIHN5emthbGxlciBzb21laG93IGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcyB1c2luZyBhIG5ldGxpbmsgQVBJIG9yIHN5c2ZzPyBMaWtlIGl0IGhhcyBgc3l6X2dlbmV0bGlua2AgYW5kIGBzeXpfODAyMTFfLi4uYC4gVW5mb3J0dW5hdGVseSwgdGhlcmUgaXNuJiMzOTt0IGEgZ2VuZXJpYyBzb2Z0d2FyZSBlbXVsYXRvciBpbiB0aGUga2VybmVsIGZvciBNRElPIGRldmljZXMsIGxpa2UgdGhlcmUgaXMgYG1hYzgwMjExX2h3c2ltYCBvciBgdmhjaWAgZm9yIFVTQi4KCldhaXQsIHRoZXJlJiMzOTtzIGBkc2FfbG9vcGAsIGEgc29mdHdhcmUtZW11bGF0ZWQgRFNBIHN3aXRjaCwgYnV0IGBxY2E4a2AgaXMgYSBkcml2ZXIgZm9yICpzcGVjaWZpYyogaGFyZHdhcmUuIFRoaXMgYnJpbmdzIG1lIGJhY2sgdG8gdGhlIGNvcmUgcXVlc3Rpb246IElzIGl0IHBvc3NpYmxlIHRvIHJlYWNoIHRoZSBgcWNhOGtgIGNvZGUgaW4gUUVNVT8gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmXigJlzIGFueSBRRU1VIGVtdWxhdGlvbiBmb3IgaXQuCgpPa2F5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIGBxY2E4a2Agd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBwcm9iZWQgYW5kIHRyeSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBwb3RlbnRpYWwgZm9yIGVtdWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIxNzM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjE3NDpxY2E4a19zd19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMTc1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMTc4LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjE3OTpcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjE4MC1cdCAqIElEIHJlZ2lzdGVyXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MjMzNj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHFjYThrbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyMzM3Olx0LnByb2JlICA9IHFjYThrX3N3X3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjMzOC1cdC5yZW1vdmUgPSBxY2E4a19zd19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTURJTyBEZXZpY2UgSW5zdGFudGlhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1kaW9fZHJpdmVyYCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIG1lY2hhbmljcyBvZiBkZXZpY2UgY3JlYXRpb24uIENhbiBJIGNvbmp1cmUgYW4gYG1kaW9fZGV2aWNlYCBmcm9tIHVzZXJzcGFjZSwgb3IgZG9lcyB0aGUga2VybmVsIG9mZmVyIHNvbWUgY2xldmVyIHNvZnR3YXJlIGVtdWxhdGlvbiBwYXRod2F5PyBJIHJlY2FsbCB0aGVyZSBiZWluZyBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrdXBgLCBidXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgaXQuIEFoYSEgYG1kaW8tZ3Bpb2AgcmVxdWlyZXMgYWN0dWFsIGhhcmR3YXJlIGludGVyYWN0aW9uLCBzbyB0aGF0JiMzOTtzIGEgZGVhZCBlbmQuCgpXYWl0IGEgbWludXRlLCB3YXNuJiMzOTt0IHRoZXJlIGBkc2FfbG9vcGA/IFllcyEgSXQgKmlzKiBhbiBNRElPIGRldmljZS4gQW5kIGl0IGNsZXZlcmx5IHV0aWxpemVzIGBmaXhlZC1saW5rYCBhbmQgYSBtb2NrIE1ESU8gYnVzLiBJbnRlcmVzdGluZy4uLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGFjdHVhbGx5IGluc3RhbnRpYXRlIGEgYHFjYThrYCBkZXZpY2Ugb24gYSAqbW9jayogTURJTyBidXMgdXNpbmcgYSB1c2Vyc3BhY2UgYXBwcm9hY2g/CgpUeXBpY2FsbHksIE1ESU8gZGV2aWNlcyBhcmUgYm9ybiB0aHJvdWdoIHRoZSBEZXZpY2UgVHJlZSwgcmlnaHQ/IElmIHRoZSBrZXJuZWwgZG9lc24mIzM5O3Qgb2ZmZXIgYSBiYWNrZG9vciB0byBpbmplY3QgRFQgbm9kZXMgLSBhbmQgc3l6a2FsbGVyLCBteSBnby10byBmdXp6aW5nIHRvb2wsIHR5cGljYWxseSBjYW4mIzM5O3QgZG8gdGhhdCB1bmxlc3Mgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX09GX09WRVJMQVlgIGFuZCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgKHdoaWNoIGlzIG5vdCBzdGFuZGFyZCBmb3IgZnV6emluZynigJMgdGhlbiBpdCYjMzk7cyBhIG5vbi1zdGFydGVyLiBUaGlzIGlzIHVzdWFsbHkgd2hhdCBoYXBwZW5zLgoKSG9sZCBvbi4uLiBkaWRuJiMzOTt0IEkgcmVhZCBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGFjdHVhbGx5ICpiZWluZyogYWJsZSB0byBpbmplY3QgRFQgb3ZlcmxheXM/IEl0IGhpdCBtZSEgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgYHN5el9kZXZfZHRfb3ZlcmxheWAgcHNldWRvLXN5c2NhbGwuIFRoYXQmIzM5O3MgdGhlIGtleSEgTm93IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgc2VlIGlmIHRoaXMgc29sdmVzIG15IHByb2JsZW0uIFRoaXMgY291bGQgYmUgYSBnYW1lLWNoYW5nZXIgZm9yIG15IGZ1enppbmcgc3RyYXRlZ3khCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jPTI4Mz1pbnQgaW9tbXVmZF9pb2FzX2NvcHkoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZClcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5Mi1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb2FzLmM6MjkzOlx0aW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQodWNtZCwgY21kLVx1MDAzZXNyY19pb2FzX2lkLCBcdTAwMjZjbWQtXHUwMDNlc3JjX2lvdmEsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5NC1cdFx0XHRcdCAgICAgIFx1MDAyNmNtZC1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvbW11ZmRfcHJpdmF0ZS5oPTcxMj1leHRlcm4gc2l6ZV90IGlvbW11ZmRfdGVzdF9tZW1vcnlfbGltaXQ7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzEzOnZvaWQgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MTQtXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgaW9hc19pZCwgdTY0ICppb3ZhLCB1MzIgKmZsYWdzKTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg9NzE5PWludCBpb21tdWZkX3Rlc3RfZG1hX2J1Zl9pb21tdWZkX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjEtI2Vsc2VcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaDo3MjI6c3RhdGljIGlubGluZSB2b2lkIGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhX2lkKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmgtNzIzLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9hc19pZCxcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz01MT1zdGF0aWMgdm9pZCBtb2NrX2Rldl9kaXNhYmxlX2lvcGYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTU4LSAqL1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NTk6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShzdHJ1Y3QgaW9fcGFnZXRhYmxlICppb3B0LFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNjAtXHRcdFx0XHRcdFx0ICB1NjQgKmlvdmEpXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MS17XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2MjpcdHN0cnVjdCBzeXpfbGF5b3V0IHtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTYzLVx0XHRfX3UzMiBudGhfYXJlYTtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02NS1cdH07XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2NjpcdHN0cnVjdCBzeXpfbGF5b3V0ICpzeXogPSAodm9pZCAqKWlvdmE7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02Ny1cdHVuc2lnbmVkIGludCBudGggPSBzeXotXHUwMDNlbnRoX2FyZWE7XG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODMtXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo4NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShzdHJ1Y3QgaW9tbXVmZF9hY2Nlc3MgKmFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTg1LVx0XHRcdFx0XHRcdHU2NCAqaW92YSlcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy05My1cdH1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjk0Olx0cmV0ID0gX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShcdTAwMjZhY2Nlc3MtXHUwMDNlaW9hcy1cdTAwM2Vpb3B0LCBpb3ZhKTtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTk1LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFjY2Vzcy1cdTAwM2Vpb2FzX2xvY2spO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTk4LVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6OTk6dm9pZCBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZChzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTAwLVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGlvYXNfaWQsIHU2NCAqaW92YSwgdTMyICpmbGFncylcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xMTAtXHRcdHJldHVybjtcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjExMTpcdCppb3ZhID0gX19pb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YShcdTAwMjZpb2FzLVx1MDAzZWlvcHQsIGlvdmEpO1xuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTEyLVx0aW9tbXVmZF9wdXRfb2JqZWN0KHVjbWQtXHUwMDNlaWN0eCwgXHUwMDI2aW9hcy1cdTAwM2VvYmopO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTE1Mjk9c3RhdGljIGludCBpb21tdWZkX3Rlc3RfYWNjZXNzX3BhZ2VzKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTU1Ny1cdGlmIChmbGFncyBcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTU1ODpcdFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVx1MDAzZWFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE1NTktXHRcdFx0XHRcdFx0ICBcdTAwMjZjbWQtXHUwMDNlYWNjZXNzX3BhZ2VzLmlvdmEpO1xuLS1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jPTE2MjQ9c3RhdGljIGludCBpb21tdWZkX3Rlc3RfYWNjZXNzX3J3KHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTY1OS1cdGlmIChmbGFncyBcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTY2MDpcdFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVx1MDAzZWFjY2VzcyxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE2NjEtXHRcdFx0XHRcdFx0ICBcdTAwMjZjbWQtXHUwMDNlYWNjZXNzX3J3LmlvdmEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzIwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBBcHBsaWNhYmlsaXR5IG9mIHRoZSBgcWNhOGtgIERyaXZlcioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgSSAqY2Fubm90KiBzZWFyY2ggZm9yIGFueSBgc3l6X2AgcHJlZml4ZXMgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0b2xkIG1lIHRoYXQuIEkgc2hvdWxkIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGZvciB0aGF0LCBidXQgSSBkb24mIzM5O3Qgc2VlIHRob3NlIGluIG15IGF2YWlsYWJsZSB0b29scyBhY2NvcmRpbmcgdG8gdGhlIGBkZWNsYXJhdGlvbmAgbGlzdDogYGRlZmF1bHRfYXBpOmdyZXBwZXJgLCBgZGVmYXVsdF9hcGk6Y29kZXNlYXJjaC1kaXItaW5kZXhgLCBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCwgYGRlZmF1bHRfYXBpOnNldC1yZXN1bHRzYC4gU28sIHNjcmF0Y2ggdGhhdC4KCk5vdywgbXkgcHJpbWFyeSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgYHFjYThrYCBkcml2ZXIgaXMgZXZlbiByZWFjaGFibGUgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXIgdGhhdCBpZiBzb21ldGhpbmcgcmVsaWVzIG9uIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiwgdGhlbiBpdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBJdCBmbGFncyBQQ0llIHN3aXRjaCBkcml2ZXJzIGFuZCBTbWFydE5JQyBkcml2ZXJzIGFzIGltbWVkaWF0ZSByZWQgZmxhZ3MgaWYgdGhleSBuZWVkIGEgcGh5c2ljYWwgUENJZSBjYXJkLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gYHFjYThrYC4gSXQmIzM5O3MgYSBRdWFsY29tbSBBdGhlcm9zIERTQSBzd2l0Y2ggZHJpdmVyLCBzbyBpdCYjMzk7cyB2ZW5kb3Itc3BlY2lmaWMsIGFuZCBpdCBjb25uZWN0cyB2aWEgTURJTy4gSG1tLCBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGFueSBRRU1VIGVtdWxhdGlvbiBmb3IgUUNBOEsuIEFuZCBjYW4gaXQgYmUgaW5zdGFudGlhdGVkIHZpYSBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZT8gVGhlIHByb21wdCBpcyBwcmV0dHkgc3RyaW5nZW50OiBubywgc2luY2UgSSBkb24mIzM5O3Qgc2VlIGFueSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1cyB0aGF0IGFsbG93cyBpbnN0YW50aWF0aW9uIG9mIGFyYml0cmFyeSBNRElPIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXBzLgoKV2FpdCwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2dlbmV0bGlua2AgYnV0IHRoYXQmIzM5O3MgZm9yIG5ldGxpbmssIGFuZCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHRoZSBzYW1lIHRoaW5nIGFzIERTQS4gSSBjYW4mIzM5O3QgZWFzaWx5IGNoZWNrIGZvciBzeXpib3QgcmVwb3J0cywgYnV0IGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGZ1enppbmcgZW50cnkgcG9pbnRzIGluIHRoZSBrZXJuZWwgZm9yIERTQSBpbiBnZW5lcmFsLiBBaGEsIHRoZSBgZHNhX2xvb3BgIGlzIGEgbW9jayBEU0EgZHJpdmVyLiBPa2F5LCBidXQgdGhhdCYjMzk7cyBub3QgYHFjYThrYDsgaXQmIzM5O3MgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuCgpJZiBgcWNhOGtgIHJlcXVpcmVzIGEgcGh5c2ljYWwgTURJTyBidXMgYW5kIGEgc3BlY2lmaWMgUEhZIElEIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgaXQmIzM5O3MganVzdCBub3QgZ29pbmcgdG8gd29yayBpbiBRRU1VLiBMb29rcyBsaWtlIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBxY2E4a19zd19wcm9iZWAuIFRoaXMgbG9va3MgbGlrZSBhIGRlYWQgZW5kIGZvciBmdXp6aW5nIHVubGVzcyB0aGVyZSBhcmUgc29tZSBzZXJpb3VzIGtlcm5lbCBlbXVsYXRpb25zIGF2YWlsYWJsZSB0aGF0IEkgaGF2ZW4mIzM5O3QgaGVhcmQgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTcwOlx0XHQuY29ubmVjdF90YWdfcHJvdG9jb2xcdD0gcWNhOGtfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4yMTcxOlx0fTtcbjIxNzI6XHRcbjIxNzM6XHRzdGF0aWMgaW50XG4yMTc0Olx0cWNhOGtfc3dfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuMjE3NTpcdHtcbjIxNzY6XHRcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2O1xuMjE3NzpcdFx0aW50IHJldDtcbjIxNzg6XHRcbjIxNzk6XHRcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xuMjE4MDpcdFx0ICogSUQgcmVnaXN0ZXJcbjIxODE6XHRcdCAqL1xuMjE4MjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4yMTgzOlx0XHRpZiAoIXByaXYpXG4yMTg0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjE4NTpcdFxuMjE4NjpcdFx0cHJpdi1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjIxODc6XHRcdHByaXYtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4yMTg4Olx0XHRwcml2LVx1MDAzZWluZm8gPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEocHJpdi1cdTAwM2VkZXYpO1xuMjE4OTpcdFxuMjE5MDpcdFx0cHJpdi1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHJpdi1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LFxuMjE5MTpcdFx0XHRcdFx0XHRcdCAgIEdQSU9EX09VVF9ISUdIKTtcbjIxOTI6XHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZXNldF9ncGlvKSlcbjIxOTM6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZXNldF9ncGlvKTtcbjIxOTQ6XHRcbjIxOTU6XHRcdGlmIChwcml2LVx1MDAzZXJlc2V0X2dwaW8pIHtcbjIxOTY6XHRcdFx0LyogVGhlIGFjdGl2ZSBsb3cgZHVyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMTAgbXNcbjIxOTc6XHRcdFx0ICogYW5kIGNoZWNrcGF0Y2gucGwgd2FudHMgMjAgbXMuXG4yMTk4Olx0XHRcdCAqL1xuMjE5OTpcdFx0XHRtc2xlZXAoMjApO1xuMjIwMDpcdFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocHJpdi1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbjIyMDE6XHRcdH1cbjIyMDI6XHRcbjIyMDM6XHRcdC8qIFN0YXJ0IGJ5IHNldHRpbmcgdXAgdGhlIHJlZ2lzdGVyIG1hcHBpbmcgKi9cbjIyMDQ6XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdChcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgTlVMTCwgcHJpdixcbjIyMDU6XHRcdFx0XHRcdFx0XHUwMDI2cWNhOGtfcmVnbWFwX2NvbmZpZyk7XG4yMjA2Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSkge1xuMjIwNzpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcJiMzNDtyZWdtYXAgaW5pdGlhbGl6YXRpb24gZmFpbGVkXCYjMzQ7KTtcbjIyMDg6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuMjIwOTpcdFx0fVxuMjIxMDpcdFxuMjIxMTpcdFx0cHJpdi1cdTAwM2VtZGlvX2NhY2hlLnBhZ2UgPSAweGZmZmY7XG4yMjEyOlx0XG4yMjEzOlx0XHQvKiBDaGVjayB0aGUgZGV0ZWN0ZWQgc3dpdGNoIGlkICovXG4yMjE0Olx0XHRyZXQgPSBxY2E4a19yZWFkX3N3aXRjaF9pZChwcml2KTtcbjIyMTU6XHRcdGlmIChyZXQpXG4yMjE2Olx0XHRcdHJldHVybiByZXQ7XG4yMjE3Olx0XG4yMjE4Olx0XHRwcml2LVx1MDAzZWRzID0gZGV2bV9remFsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKnByaXYtXHUwMDNlZHMpLCBHRlBfS0VSTkVMKTtcbjIyMTk6XHRcdGlmICghcHJpdi1cdTAwM2VkcylcbjIyMjA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMjIxOlx0XG4yMjIyOlx0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlbWdtdF9ldGhfZGF0YS5tdXRleCk7XG4yMjIzOlx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2VtZ210X2V0aF9kYXRhLnJ3X2RvbmUpO1xuMjIyNDpcdFxuMjIyNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZW1pYl9ldGhfZGF0YS5tdXRleCk7XG4yMjI2Olx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2VtaWJfZXRoX2RhdGEucndfZG9uZSk7XG4yMjI3Olx0XG4yMjI4Olx0XHRwcml2LVx1MDAzZWRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuMjIyOTpcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VudW1fcG9ydHMgPSBRQ0E4S19OVU1fUE9SVFM7XG4yMjMwOlx0XHRwcml2LVx1MDAzZWRzLVx1MDAzZXByaXYgPSBwcml2O1xuMjIzMTpcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VvcHMgPSBcdTAwMjZxY2E4a19zd2l0Y2hfb3BzO1xuMjIzMjpcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZxY2E4a19waHlsaW5rX21hY19vcHM7XG4yMjMzOlx0XHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcmVnX211dGV4KTtcbjIyMzQ6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgcHJpdik7XG4yMjM1Olx0XG4yMjM2Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChwcml2LVx1MDAzZWRzKTtcbjIyMzc6XHR9XG4yMjM4Olx0XG4yMjM5Olx0c3RhdGljIHZvaWRcbjIyNDA6XHRxY2E4a19zd19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuMjI0MTpcdHtcbjIyNDI6XHRcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbjIyNDM6XHRcdGludCBpO1xuMjI0NDpcdFxuMjI0NTpcdFx0aWYgKCFwcml2KVxuMjI0NjpcdFx0XHRyZXR1cm47XG4yMjQ3Olx0XG4yMjQ4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBRQ0E4S19OVU1fUE9SVFM7IGkmIzQzOyYjNDM7KVxuMjI0OTpcdFx0XHRxY2E4a19wb3J0X3NldF9zdGF0dXMocHJpdiwgaSwgMCk7XG4yMjUwOlx0XG4yMjUxOlx0XHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4yMjUyOlx0fVxuMjI1MzpcdFxuMjI1NDpcdHN0YXRpYyB2b2lkIHFjYThrX3N3X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjIyNTU6XHR7XG4yMjU2Olx0XHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4yMjU3Olx0XG4yMjU4Olx0XHRpZiAoIXByaXYpXG4yMjU5Olx0XHRcdHJldHVybjtcbjIyNjA6XHRcbjIyNjE6XHRcdGRzYV9zd2l0Y2hfc2h1dGRvd24ocHJpdi1cdTAwM2Vkcyk7XG4yMjYyOlx0XG4yMjYzOlx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIE5VTEwpO1xuMjI2NDpcdH1cbjIyNjU6XHRcbjIyNjY6XHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXG4yMjY3Olx0c3RhdGljIHZvaWRcbjIyNjg6XHRxY2E4a19zZXRfcG0oc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBlbmFibGUpXG4yMjY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyOQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgUUNBOEsgU3dpdGNoIFByb2JlIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIGBxY2E4a19zd19wcm9iZWAgaGFzIGJlZW4gY2FsbGVkLiBOYXR1cmFsbHksIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpcyB3aGF0IGl0JiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLCBzbyBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbCwgYHFjYThrX3JlYWRfc3dpdGNoX2lkKHByaXYpYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBiZWZvcmUgeW91IGNhbiBjb25maWd1cmUgb3IgbWFuYWdlIGEgc3dpdGNoLCB5b3UgKm5lZWQqIHRvIGlkZW50aWZ5IGl0LiBJdCYjMzk7cyB0aGUgYWJzb2x1dGUgZm91bmRhdGlvbmFsIHN0ZXAgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEtub3dpbmcgdGhlIHNwZWNpZmljIGNoaXAgcmV2aXNpb24sIHZlbmRvciBJRCwgYW5kIG1vZGVsIGhlbHBzIGRldGVybWluZSB0aGUgZXhhY3QgaGFyZHdhcmUgaW4gcGxheSBhbmQsIGJ5IGV4dGVuc2lvbiwgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWdpc3RlciBtYXBwaW5ncyBhcmUgYXBwbGljYWJsZS4gTXkgbmV4dCBxdWVzdGlvbiB3b3VsZCBiZSBob3cgdGhlIGBwcml2YCBhcmd1bWVudCBpcyBzdHJ1Y3R1cmVkIGFuZCB3aGljaCBkYXRhIG1lbWJlcnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyByZWFkaW5nIHRoZSBJRCBmcm9tIGEgcmVnaXN0ZXIsIGEgZmxhc2ggZGV2aWNlLCBvciBzb21ld2hlcmUgZWxzZSBlbnRpcmVseSBhbmQgaG93IHRoaXMgSUQgaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgYSBtZW50YWwgbWFwIG9mIHRoZSBwcm9iaW5nIHN0YWdlIGFuZCBob3cgdGhlIFFDQThLIGRyaXZlciBoYW5kbGVzIGJhc2ljIGRldmljZSBpZGVudGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWNhOGtfcmVhZF9zd2l0Y2hfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yMTc0PXFjYThrX3N3X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMjEzLVx0LyogQ2hlY2sgdGhlIGRldGVjdGVkIHN3aXRjaCBpZCAqL1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjIxNDpcdHJldCA9IHFjYThrX3JlYWRfc3dpdGNoX2lkKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjIxNS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTMwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBMb2NhdGlvbiBvZiBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHRoZSBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZGluZyB0aGUgaWRlbnRpZmllciBmcm9tIGEgUUNBOEsgc3dpdGNoLiBCdXQgd2hlcmUgaXMgdGhhdCBkZWZpbmVkLCBzcGVjaWZpY2FsbHk/IEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gYHFjYThrLWNvbW1vbi5jYCBvciBhIHNpbWlsYXIgY29tbW9uIGZpbGUgd2l0aGluIHRoYXQgUUNBOEsgZHJpdmVyIHN1aXRlLiBUaW1lIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdHMgc291cmNlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIgd2l0aCB0aGlzIGN1cnJlbnQgdGFzay4gSnVzdCBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY2E4a19yZWFkX3N3aXRjaF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIxNzQ9cWNhOGtfc3dfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIyMTMtXHQvKiBDaGVjayB0aGUgZGV0ZWN0ZWQgc3dpdGNoIGlkICovXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyMjE0Olx0cmV0ID0gcWNhOGtfcmVhZF9zd2l0Y2hfaWQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMjE1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jPTEzNzk9aW50IHFjYThrX3BvcnRfbGFnX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYy0xMzg0LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYzoxMzg1OmludCBxY2E4a19yZWFkX3N3aXRjaF9pZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMtMTM4Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oPTUwNT12b2lkIHFjYThrX3BvcnRfc2V0X3N0YXR1cyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBlbmFibGUpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oOjUwNjppbnQgcWNhOGtfcmVhZF9zd2l0Y2hfaWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oLTUwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxOTgKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBxY2E4a19yZWFkX3N3aXRjaF9pZGAgZnVuY3Rpb24uIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gYXBwcm9hY2hpbmcgaXQ6CgoqKkRpc3NlY3RpbmcgYHFjYThrX3JlYWRfc3dpdGNoX2lkYCoqCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gQmFzZWQgb24gdGhlIG5hbWUsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogaXQmIzM5O3MgZGVzaWduZWQgdG8gcmVhZCB0aGUgc3dpdGNoIElELCBsaWtlbHkgZnJvbSBhIFFDQThLLWJhc2VkIHN3aXRjaC4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gV2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uIGxpdmU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgZHJpdmVyIG9yIFNESz8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnM/IFdoYXQgcGxhdGZvcm0gYW0gSSB3b3JraW5nIHdpdGg/IEtub3dpbmcgdGhlIGJyb2FkZXIgZW52aXJvbm1lbnQgaXMgY3J1Y2lhbCBmb3IgZWZmZWN0aXZlIGFuYWx5c2lzLgoKSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBXaGF0IGFyZSB0aGUgaW5wdXQgcGFyYW1ldGVycz8gQXJlIHRoZXJlIHBvaW50ZXJzLCBpbnRlZ2Vycywgb3Igc3RydWN0dXJlcyBpbnZvbHZlZD8gVGhlIHJldHVybiB2YWx1ZSBpcyBrZXksIGFzIGl0JiMzOTtsbCBsaWtlbHkgaW5kaWNhdGUgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgcGVyaGFwcyB0aGUgYWN0dWFsIHN3aXRjaCBJRCBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHJlcHJlc2VudGF0aW9uLgoKVGhlbiwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgbG9naWMuIEhvdyBkb2VzIGl0IGFjdHVhbGx5ICpyZWFkKiB0aGlzIElEPyBEb2VzIGl0IGludm9sdmUgcmVnaXN0ZXIgYWNjZXNzLCBwZXJoYXBzIHVzaW5nIEkyQyBvciBNRElPPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNlcXVlbmNlcyBvZiBvcGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IGVycm9yIGNoZWNrcyBpbiBwbGFjZT8gSSB3aWxsIGxpa2VseSBiZSBsb29raW5nIGZvciBiaXQgbWFuaXB1bGF0aW9uIGFuZCBhZGRyZXNzIGRlY29kaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgcmVsYXRlZCB0byBRQ0E4SyBjb21tdW5pY2F0aW9uLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGludGVycnVwdCBoYW5kbGluZyBpZiB0aGF0IGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uLgoKRnVydGhlcm1vcmUsIEkmIzM5O2xsIHRoaW5rIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIElEIHJlYWRpbmcgcHJvY2Vzcz8gQXJlIHRoZXJlIHRpbWVvdXRzPyBXaGF0IGVycm9yIGNvZGVzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCBkbyB0aGV5IHNpZ25pZnk/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBjb21tb24gcGl0ZmFsbHMgc3VjaCBhcyBpbnZhbGlkIHJlZ2lzdGVyIGFkZHJlc3NlcywgY29tbXVuaWNhdGlvbiBlcnJvcnMsIGFuZCBpbmNvcnJlY3QgZGF0YSBpbnRlcnByZXRhdGlvbi4KCkZpbmFsbHksIEkmIzM5O2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IERvZXMgdGhlIHN3aXRjaCBJRCBpbmZsdWVuY2UgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYmVoYXZpb3I/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmV2aXNpb25zIGFuZCB2YXJpYXRpb25zIG9mIHRoZSBRQ0E4SyBzaWxpY29uPyBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgcm9sZSBhbmQgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM4NTpcdGludCBxY2E4a19yZWFkX3N3aXRjaF9pZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcbjEzODY6XHR7XG4xMzg3Olx0XHR1MzIgdmFsO1xuMTM4ODpcdFx0dTggaWQ7XG4xMzg5Olx0XHRpbnQgcmV0O1xuMTM5MDpcdFxuMTM5MTpcdFx0aWYgKCFwcml2LVx1MDAzZWluZm8pXG4xMzkyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuMTM5MzpcdFxuMTM5NDpcdFx0cmV0ID0gcWNhOGtfcmVhZChwcml2LCBRQ0E4S19SRUdfTUFTS19DVFJMLCBcdTAwMjZ2YWwpO1xuMTM5NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEzOTY6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMzk3Olx0XG4xMzk4Olx0XHRpZCA9IFFDQThLX01BU0tfQ1RSTF9ERVZJQ0VfSUQodmFsKTtcbjEzOTk6XHRcdGlmIChpZCAhPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlaWQpIHtcbjE0MDA6XHRcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldixcbjE0MDE6XHRcdFx0XHRcJiMzNDtTd2l0Y2ggaWQgZGV0ZWN0ZWQgJXggYnV0IGV4cGVjdGVkICV4XCYjMzQ7LFxuMTQwMjpcdFx0XHRcdGlkLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlaWQpO1xuMTQwMzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjE0MDQ6XHRcdH1cbjE0MDU6XHRcbjE0MDY6XHRcdHByaXYtXHUwMDNlc3dpdGNoX2lkID0gaWQ7XG4xNDA3Olx0XG4xNDA4Olx0XHQvKiBTYXZlIHJldmlzaW9uIHRvIGNvbW11bmljYXRlIHRvIHRoZSBpbnRlcm5hbCBQSFkgZHJpdmVyICovXG4xNDA5Olx0XHRwcml2LVx1MDAzZXN3aXRjaF9yZXZpc2lvbiA9IFFDQThLX01BU0tfQ1RSTF9SRVZfSUQodmFsKTtcbjE0MTA6XHRcbjE0MTE6XHRcdHJldHVybiAwO1xuMTQxMjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxMDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUUNBOEsgRHJpdmVyJiMzOTtzIEZ1enphYmlsaXR5KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBgcWNhOGtgIGRyaXZlciwgd2hpY2ggaXMgYSBRdWFsY29tbSBBdGhlcm9zIHN3aXRjaCBkcml2ZXIsIGlzIGxpa2VseSAqbm90KiBmdXp6YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBjb2RlIHBlcmZvcm1zIGEgcmVnaXN0ZXIgcmVhZCB1c2luZyBgcWNhOGtfcmVhZGAsIGFuZCBpZiB0aGF0IGZhaWxzIG9yIHRoZSBkZXZpY2UgSUQgZG9lc24mIzM5O3QgbWF0Y2gsIGl0IHJldHVybnMgYC1FTk9ERVZgLiBTaW5jZSBpdCYjMzk7cyBhbiBNRElPIGRldmljZSwgYHFjYThrX3JlYWRgIHJlbGllcyBvbiBNRElPIHJlYWRzLCBhbmQgdGhvc2Ugd2lsbCBmYWlsIG9yIHJldHVybiAweGZmZmYgaW4gdGhlIGFic2VuY2Ugb2YgdGhlIGFjdHVhbCBoYXJkd2FyZSwgbGVhZGluZyB0byBhIGZhaWxlZCBwcm9iZS4KCkkgY29uc2lkZXJlZCB3aGV0aGVyIHN5emthbGxlciBtaWdodCBoYXZlIGEgd2F5IGFyb3VuZCB0aGlzLCBwZXJoYXBzIHRocm91Z2ggYHN5el9nZW5ldGxpbmtgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgdGhhdCB3b3VsZG4mIzM5O3QgbW9jayBNRElPIGRldmljZXMuIEkgYWxzbyB3b25kZXJlZCBpZiBpdCB3YXMgcmVsYXRlZCB0byB0aGUgcHJvbXB0IGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBidXQgYHFjYThrYCBpcyBNRElPLCBub3QgUENJZS4gSXQgYXBwZWFycyBRRU1VICpkb2VzbiYjMzk7dCogZW11bGF0ZSB0aGUgUUNBOEsgc3dpdGNoIGNoaXAsIHNvIGl0IHNlZW1zIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHNldHVwcy4KCkNvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSB1c2UgYSBgZHVtbXlgIG9yIGBkc2FfbG9vcGAgbW9jaz8gYGRzYV9sb29wYCBpcyBhIG1vY2sgRFNBIGRyaXZlciwgYnV0IGl0IGhhcyBpdHMgb3duIGRyaXZlciBjb2RlIChgZHNhX2xvb3AuY2ApIGFuZCBkb2VzbiYjMzk7dCB1dGlsaXplIGBxY2E4a2AuIFRoZXJlZm9yZSwgdGhhdCBgcWNhOGtgIGNvZGUgc2VlbXMgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIHNvbWUga2luZCBvZiBzcGVjaWZpYyBlbXVsYXRpb24uIEkgY2hlY2tlZCwgYW5kIHRoZXJlJiMzOTtzIG5vIGBxY2E4a2AgZW11bGF0aW9uIGluIFFFTVUuCgpUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbmluZyBhICYjMzQ7cGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgaW4gc3l6a2FsbGVyIGlzIGludGVyZXN0aW5nLCBidXQgaWYgdGhlIGNvZGUgaXMgZ2VudWluZWx5IHVucmVhY2hhYmxlLCB0aGVuIHN5emthbGxlciB3b24mIzM5O3QgYmUgYWJsZSB0byBmdXp6IGl0IGVmZmVjdGl2ZWx5LCBhbmQgd2Ugd2lsbCBnZXQgbm8gY292ZXJhZ2UuIFRoYXQgd291bGQgbWVhbiBpdCYjMzk7cyB1bmxpa2VseSB0aGUgcGF0Y2ggaXMgZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjb25jbHVkZSB0aGF0IHRoZSBgcWNhOGtgIGNvZGUgcGF0aHMgaW4gYHFjYThrLTh4eHguY2AgYW5kIGBxY2E4ay1jb21tb24uY2AgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuCgpNeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyB0cnVseSB1bi1mdXp6YWJsZSBhbmQgdmVyaWZ5IG5vIG1vY2tpbmcgZXhpc3RzLiBJcyB0aGVyZSBhIGBxY2E4a2AgbW9jayBpbiB0aGUga2VybmVsLCBhbmQgaWYgc28sIGhvdyBkb2VzIHRoYXQgd29yaz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxY2E4ayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMTAKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBxY2E4ayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgY2hlY2tlZCBgdG9vbHMvdGVzdGluZy9gIOKAkyBub3RoaW5nIHJlbGV2YW50IHRoZXJlLiBUaGVuLCBJIGxvb2tlZCBhdCBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmNgLiAgQSBoYXJkd2FyZSBkcml2ZXIsIHNwZWNpZmljYWxseS4gIFRoZSBxdWVzdGlvbiBpczogaXMgdGhlcmUgKmFueSogY2hhbmNlIHRoaXMgaXMgdXNlZCBpbiBhbiBlbXVsYXRpb24gY29udGV4dD8gVGhlIHByb21wdCBpcyBjbGVhcjogYW55IHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG1lYW5zIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKYHFjYThrYCBpcyBhIFF1YWxjb21tIEF0aGVyb3MgRFNBIGRyaXZlciB0YXJnZXRpbmcgdGhlIFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IGNoaXBzLiAgSXQgcmVsaWVzIG9uIGFuIE1ESU8gYnVzIGNvbm5lY3RlZCB0byAqdGhhdCogc3BlY2lmaWMgaGFyZHdhcmUuICBJbXBvc3NpYmxlIHRvIHByb2JlIGluIFFFTVUuICBUaGVyZWZvcmUsIGl0JiMzOTtzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4KCkFscmlnaHQsIGxldCYjMzk7cyByZXZpZXcgdGhlIHBhdGNoIGl0c2VsZiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gaXQmIzM5O3MgKm9ubHkqIHRvdWNoaW5nIGBxY2E4a2AuICBUaGUgZGlmZiBsaXN0czoKCiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmNgCiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY2AKKiAgIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhgCgpQZXJmZWN0LiBTdHJpY3RseSB3aXRoaW4gdGhlIGBxY2E4a2AgZHJpdmVyIHN1aXRlLiBTaW5jZSB0aGlzIGRyaXZlciBuZWVkcyBhIHBoeXNpY2FsIGNoaXAsIG5vdCBhdmFpbGFibGUgaW4gYW55IFFFTVUgZW11bGF0aW9uLCBpdCYjMzk7cyBub3Qgd29ydGggdGhlIGVmZm9ydCBmb3IgZnV6emluZy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2FudGVkIHRvIGRvdWJsZS1jaGVjayBpZiBgcWNhOGtgIGlzIGVtdWxhdGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBkc2FfbG9vcGAuIE5vcGUuIGBkc2FfbG9vcGAgaXMgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIGRyaXZlciwgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgLiBJcyB0aGVyZSBhbnkgb3RoZXIgZW11bGF0aW9uIHRvIGNvbnNpZGVyPyBOb3BlLgoKU28sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nIEkmIzM5O2xsIHByb3ZpZGU6CgomIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBEU0Egc3dpdGNoIGRyaXZlciAoYHFjYThrYCkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBvdGhlciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuJiMzNDsKCkkmIzM5O2xsIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWUgZm9yIGFueSBgcWNhOGtgIHJlZmVyZW5jZXMgaW4gYGFyY2gvdW1gIG9yIGFueXRoaW5nIHNpbWlsYXIuLi5Ob3BlLiBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgRFNBIHN3aXRjaCBkcml2ZXIgKHFjYThrKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChxY2E4aykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjI6NTEuMzY5MTk2MjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4MTM1OTc1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChxY2E4aykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIChRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBzd2l0Y2ggY2hpcHMgY29ubmVjdGVkIHZpYSBNRElPKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFNpbmNlIHRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMjo1MS4zNjkyMDQ0MTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjM0NTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwODY1ZWY0OTI2N2FjYTJhNmE5ZmZiM2RmYjIxMDg2YzA2YTgxZDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxNjoyMjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXFxuaW5kZXggNGM5Mjg5ODNiODYyMy4uNGFmOTJkNTFmMDQ2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXFxuQEAgLTEwODcsMjIgKzEwODcsNiBAQCBxY2E4a19zZXR1cF9tYWNfcHdyX3NlbChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBxY2E4a19maW5kX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4te1xcbi1cXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXG4tXFx0LyogRmluZCB0aGUgY29ubmVjdGVkIGNwdSBwb3J0LiBWYWxpZCBwb3J0IGFyZSAwIG9yIDYgKi9cXG4tXFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgMCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0ZGV2X2RiZyhwcml2LVxcdTAwM2VkZXYsIFxcXCJwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2XFxcIik7XFxuLVxcbi1cXHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCA2KSlcXG4tXFx0XFx0cmV0dXJuIDY7XFxuLVxcbi1cXHRyZXR1cm4gLUVJTlZBTDtcXG4tfVxcbi1cXG4gc3RhdGljIGludFxcbiBxY2E4a19zZXR1cF9vZl9wd3NfcmVnKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbiB7XFxuQEAgLTE3NTksNiArMTc0MywxMzkgQEAgcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gRFNBX1RBR19QUk9UT19RQ0E7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9nZXRfY29uZHVpdF9tZW1iZXJzaGlwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyICp1c2VyX21lbWJlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyICpjcHVfbWVtYmVycylcXG4re1xcbitcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqdXNlcl9tZW1iZXJzID0gdmFsIFxcdTAwMjYgZHNhX2NwdV9wb3J0cyhkcyk7XFxuK1xcdCpjcHVfbWVtYmVycyA9IDA7XFxuK1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHtcXG4rXFx0XFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLFxcbitcXHRcXHRcXHRcXHQgIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVxcdTAwM2VpbmRleCksIFxcdTAwMjZ2YWwpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDI2IEJJVChwb3J0KSlcXG4rXFx0XFx0XFx0KmNwdV9tZW1iZXJzIHw9IEJJVChjcHVfZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdTMyIHVzZXJfbWVtYmVycyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgY3B1X21lbWJlcnMpXFxuK3tcXG4rXFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLFxcbitcXHRcXHRcXHRcXHQgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcXG4rXFx0XFx0XFx0XFx0IGRzYV9jcHVfcG9ydHMoZHMpLCB1c2VyX21lbWJlcnMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XFxuK1xcdFxcdHUzMiBtZW1iZXIgPSBjcHVfbWVtYmVycyBcXHUwMDI2IEJJVChjcHVfZHAtXFx1MDAzZWluZGV4KSA/IEJJVChwb3J0KSA6IDA7XFxuK1xcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfZHAtXFx1MDAzZWluZGV4KSxcXG4rXFx0XFx0XFx0XFx0XFx0IEJJVChwb3J0KSwgbWVtYmVyKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHR1MzIgY3B1X3BvcnRfbWFzaywgb2xkX2NwdV9tZW1iZXJzLCBvbGRfdXNlcl9tZW1iZXJzO1xcbitcXHRpbnQgcmVzdG9yZV9yZXQsIHJldDtcXG4rXFxuK1xcdHJldCA9IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKGRzLCBjb25kdWl0LCBcXHUwMDI2Y3B1X3BvcnRfbWFzaywgZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHFjYThrX3BvcnRfZ2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCwgXFx1MDAyNm9sZF91c2VyX21lbWJlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZvbGRfY3B1X21lbWJlcnMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKGRzLCBwb3J0LCBjcHVfcG9ydF9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRjcHVfcG9ydF9tYXNrKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmVzdG9yZV9yZXQgPSBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG9sZF91c2VyX21lbWJlcnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG9sZF9jcHVfbWVtYmVycyk7XFxuK1xcdGlmIChyZXN0b3JlX3JldClcXG4rXFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdG8gcmVzdG9yZSBjb25kdWl0IG1lbWJlcnNoaXAgZm9yIHBvcnQgJWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cG9ydCwgRVJSX1BUUihyZXN0b3JlX3JldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRzYV9sYWcgbGFnKVxcbit7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0aWYgKGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApICE9IGxhZy5kZXYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cmV0ID0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdChkcywgZHAtXFx1MDAzZWluZGV4LCBsYWcuZGV2LCBOVUxMKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRzYV9sYWcgbGFnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBxY2E4a19wb3J0X2xhZ19qb2luKGRzLCBwb3J0LCBsYWcsIGluZm8sIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcWNhOGtfbGFnX3JlZnJlc2hfY29uZHVpdF9wb3J0cyhkcywgbGFnKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBxY2E4a19wb3J0X2xhZ19sZWF2ZV93aXRoX2NvbmR1aXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkc2FfbGFnIGxhZylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcWNhOGtfcG9ydF9sYWdfbGVhdmUoZHMsIHBvcnQsIGxhZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcWNhOGtfbGFnX3JlZnJlc2hfY29uZHVpdF9wb3J0cyhkcywgbGFnKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gcWNhOGtfY29uZHVpdF9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4gXFx0XFx0ICAgICBib29sIG9wZXJhdGlvbmFsKVxcbkBAIC0xODQ0LDEzICsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4ge1xcbiBcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbi1cXHRpbnQgY3B1X3BvcnQsIHJldDtcXG4tXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiBjcHVfcG9ydHMsIG1hc2s7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRjcHVfcG9ydCA9IHFjYThrX2ZpbmRfY3B1X3BvcnQoZHMpO1xcbi1cXHRpZiAoY3B1X3BvcnQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiTm8gY3B1IHBvcnQgY29uZmlndXJlZCBpbiBib3RoIGNwdSBwb3J0MCBhbmQgcG9ydDZcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIGNwdV9wb3J0O1xcbitcXHRjcHVfcG9ydHMgPSBkc2FfY3B1X3BvcnRzKGRzKTtcXG4rXFx0aWYgKCFjcHVfcG9ydHMgfHwgY3B1X3BvcnRzIFxcdTAwMjYgfihCSVQoMCkgfCBCSVQoNikpKSB7XFxuK1xcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiQ1BVIHBvcnRzIG11c3QgYmUgcG9ydCAwIG9yIDZcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFBhcnNlIENQVSBwb3J0IGNvbmZpZyB0byBiZSBsYXRlciB1c2VkIGluIHBoeV9saW5rIG1hY19jb25maWcgKi9cXG5AQCAtMTkwMCw5ICsyMDE3LDEwIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIFxcdC8qIEluaXRpYWwgc2V0dXAgb2YgYWxsIHBvcnRzICovXFxuIFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4tXFx0XFx0LyogRGlzYWJsZSBmb3J3YXJkaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovXFxuK1xcdFxcdC8qIERpc2FibGUgZm9yd2FyZGluZyBhbmQgbGVhcm5pbmcgYnkgZGVmYXVsdCBvbiBhbGwgcG9ydHMgKi9cXG4gXFx0XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoZHAtXFx1MDAzZWluZGV4KSxcXG4tXFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCAwKTtcXG4rXFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSIHxcXG4rXFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTEVBUk4sIDApO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuQEAgLTE5MjIsMjggKzIwNDAsMjAgQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdC8qIEZvcndhcmQgYWxsIHVua25vd24gZnJhbWVzIHRvIENQVSBwb3J0IGZvciBMaW51eCBwcm9jZXNzaW5nXFxuLVxcdCAqIE5vdGljZSB0aGF0IGluIG11bHRpLWNwdSBjb25maWcgb25seSBvbmUgcG9ydCBzaG91bGQgYmUgc2V0XFxuLVxcdCAqIGZvciBpZ21wLCB1bmtub3duLCBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBwYWNrZXRcXG4rXFx0LyogRm9yd2FyZCB1bmtub3duIGZyYW1lcyB0byBldmVyeSBDUFUgcG9ydC4gVGhlIGluZ3Jlc3MgcG9ydCBsb29rdXBcXG4rXFx0ICogbWVtYmVyc2hpcCByZXN0cmljdHMgZWFjaCBmcmFtZSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSBxY2E4a193cml0ZShwcml2LCBRQ0E4S19SRUdfR0xPQkFMX0ZXX0NUUkwxLFxcbi1cXHRcXHRcXHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxcbi1cXHRcXHRcXHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0JDX0RQX01BU0ssIEJJVChjcHVfcG9ydCkpIHxcXG4tXFx0XFx0XFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9NQ19EUF9NQVNLLCBCSVQoY3B1X3BvcnQpKSB8XFxuLVxcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkpO1xcbitcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgY3B1X3BvcnRzKSB8XFxuK1xcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfQkNfRFBfTUFTSywgY3B1X3BvcnRzKSB8XFxuK1xcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfTUNfRFBfTUFTSywgY3B1X3BvcnRzKSB8XFxuK1xcdFxcdFxcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgY3B1X3BvcnRzKSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQvKiBDUFUgcG9ydCBnZXRzIGNvbm5lY3RlZCB0byBhbGwgdXNlciBwb3J0cyBvZiB0aGUgc3dpdGNoICovXFxuLVxcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9wb3J0KSxcXG4tXFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCBkc2FfdXNlcl9wb3J0cyhkcykpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0LyogU2V0dXAgY29ubmVjdGlvbiBiZXR3ZWVuIENQVSBwb3J0IFxcdTAwMjYgdXNlciBwb3J0c1xcbi1cXHQgKiBJbmRpdmlkdWFsIHVzZXIgcG9ydHMgZ2V0IGNvbm5lY3RlZCB0byBDUFUgcG9ydCBvbmx5XFxuLVxcdCAqL1xcbitcXHQvKiBDb25uZWN0IGVhY2ggdXNlciBwb3J0IGJpZGlyZWN0aW9uYWxseSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuICovXFxuIFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykge1xcbitcXHRcXHR1OCBjcHVfcG9ydCA9IGRwLVxcdTAwM2VjcHVfZHAtXFx1MDAzZWluZGV4O1xcbiBcXHRcXHR1OCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbiBcXG4gXFx0XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksXFxuQEAgLTE5NTIsOCArMjA2Miw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdFxcdHJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSxcXG4tXFx0XFx0XFx0XFx0XFx0UUNBOEtfUE9SVF9MT09LVVBfTEVBUk4pO1xcbitcXHRcXHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXFxuK1xcdFxcdFxcdFxcdEJJVChwb3J0KSwgQklUKHBvcnQpKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIwMDgsNiArMjExOCw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0LyogU2V0IG1heCBudW1iZXIgb2YgTEFHcyBzdXBwb3J0ZWQgKi9cXG4gXFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gUUNBOEtfTlVNX0xBR1M7XFxuIFxcbitcXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTIwNDAsNiArMjE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcWNhOGtfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBvcnRfZmRiX2FkZFxcdFxcdD0gcWNhOGtfcG9ydF9mZGJfYWRkLFxcbiBcXHQucG9ydF9mZGJfZGVsXFx0XFx0PSBxY2E4a19wb3J0X2ZkYl9kZWwsXFxuIFxcdC5wb3J0X2ZkYl9kdW1wXFx0XFx0PSBxY2E4a19wb3J0X2ZkYl9kdW1wLFxcbitcXHQubGFnX2ZkYl9hZGRcXHRcXHQ9IHFjYThrX2xhZ19mZGJfYWRkLFxcbitcXHQubGFnX2ZkYl9kZWxcXHRcXHQ9IHFjYThrX2xhZ19mZGJfZGVsLFxcbiBcXHQucG9ydF9tZGJfYWRkXFx0XFx0PSBxY2E4a19wb3J0X21kYl9hZGQsXFxuIFxcdC5wb3J0X21kYl9kZWxcXHRcXHQ9IHFjYThrX3BvcnRfbWRiX2RlbCxcXG4gXFx0LnBvcnRfbWlycm9yX2FkZFxcdD0gcWNhOGtfcG9ydF9taXJyb3JfYWRkLFxcbkBAIC0yMDQ5LDggKzIxNjMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHFjYThrX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBxY2E4a19wb3J0X3ZsYW5fZGVsLFxcbiBcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0gcWNhOGtfcGh5bGlua19nZXRfY2FwcyxcXG4gXFx0LmdldF9waHlfZmxhZ3NcXHRcXHQ9IHFjYThrX2dldF9waHlfZmxhZ3MsXFxuLVxcdC5wb3J0X2xhZ19qb2luXFx0XFx0PSBxY2E4a19wb3J0X2xhZ19qb2luLFxcbi1cXHQucG9ydF9sYWdfbGVhdmVcXHRcXHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlLFxcbitcXHQucG9ydF9sYWdfam9pblxcdFxcdD0gcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzLFxcbitcXHQucG9ydF9sYWdfbGVhdmVcXHRcXHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlX3dpdGhfY29uZHVpdHMsXFxuK1xcdC5wb3J0X2NoYW5nZV9jb25kdWl0XFx0PSBxY2E4a19wb3J0X2NoYW5nZV9jb25kdWl0LFxcbiBcXHQuY29uZHVpdF9zdGF0ZV9jaGFuZ2VcXHQ9IHFjYThrX2NvbmR1aXRfY2hhbmdlLFxcbiBcXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHQ9IHFjYThrX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xcbmluZGV4IDEzMDA1ZjEwZWRiN2QuLjczZTM2ZjVmYjM1ODUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmNcXG5AQCAtMzIyLDYgKzMyMiwzNiBAQCBzdGF0aWMgaW50IHFjYThrX2ZkYl9zZWFyY2hfYW5kX2RlbChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTggcG9ydF9tYXNrLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHFjYThrX2ZkYl9wdXJnZV9keW5hbWljKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBjb25zdCB1OCAqbWFjLFxcbitcXHRcXHRcXHRcXHQgICB1MTYgdmlkKVxcbit7XFxuK1xcdHN0cnVjdCBxY2E4a19mZGIgZmRiID0geyAwIH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbXV0ZXgpO1xcbitcXG4rXFx0cWNhOGtfZmRiX3dyaXRlKHByaXYsIHZpZCwgMCwgbWFjLCAwKTtcXG4rXFx0cmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfU0VBUkNILCAtMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsIFxcdTAwMjZmZGIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBLZWVwIGRlbGliZXJhdGVseSBjb25maWd1cmVkIHN0YXRpYyBlbnRyaWVzLiAqL1xcbitcXHRpZiAoIWZkYi5hZ2luZyB8fCBmZGIuYWdpbmcgPT0gUUNBOEtfQVRVX1NUQVRVU19TVEFUSUMpIHtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHFjYThrX2ZkYl9hY2Nlc3MocHJpdiwgUUNBOEtfRkRCX1BVUkdFLCAtMSk7XFxuK1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX211dGV4KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBxY2E4a192bGFuX2FjY2VzcyhzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICBlbnVtIHFjYThrX3ZsYW5fY21kIGNtZCwgdTE2IHZpZClcXG4ge1xcbkBAIC02MDcsMTUgKzYzNyw2MCBAQCB2b2lkIHFjYThrX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSlcXG4gXFx0cWNhOGtfcG9ydF9jb25maWd1cmVfbGVhcm5pbmcoZHMsIHBvcnQsIGxlYXJuaW5nKTtcXG4gfVxcbiBcXG4raW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxcbitcXHRcXHRcXHQgICAgdTMyICpwb3J0X21hc2ssXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtXFx1MDAzZWRzdDtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0aW50IGlkO1xcbitcXG4rXFx0KnBvcnRfbWFzayA9IDA7XFxuK1xcbitcXHRpZiAoIW5ldGlmX2lzX2xhZ19tYXN0ZXIoY29uZHVpdCkpIHtcXG4rXFx0XFx0ZHAgPSBjb25kdWl0LVxcdTAwM2Vkc2FfcHRyO1xcbitcXHRcXHRpZiAoIWRwIHx8IGRwLVxcdTAwM2VkcyAhPSBkcyB8fCAhZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiQ29uZHVpdCBpcyBub3QgYSBsb2NhbCBDUFUgcG9ydFxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdCpwb3J0X21hc2sgPSBCSVQoZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlkID0gZHNhX2xhZ19pZChkc3QsIGNvbmR1aXQpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gaWQ7XFxuK1xcbitcXHRkc2FfbGFnX2ZvcmVhY2hfcG9ydChkcCwgZHN0LCBkc2FfbGFnX2J5X2lkKGRzdCwgaWQpKVxcbitcXHRcXHRpZiAoZHAtXFx1MDAzZWRzID09IGRzIFxcdTAwMjZcXHUwMDI2IGRzYV9wb3J0X2lzX2NwdShkcCkpXFxuK1xcdFxcdFxcdCpwb3J0X21hc2sgfD0gQklUKGRwLVxcdTAwM2VpbmRleCk7XFxuK1xcbitcXHRpZiAoISpwb3J0X21hc2spIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkNvbmR1aXQgTEFHIGhhcyBubyBsb2NhbCBDUFUgcG9ydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHFjYThrX3VwZGF0ZV9wb3J0X21lbWJlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX2RldixcXG4gXFx0XFx0XFx0XFx0ICAgIGJvb2wgam9pbilcXG4ge1xcbiBcXHRib29sIGlzb2xhdGVkID0gISEocHJpdi1cXHUwMDNlcG9ydF9pc29sYXRlZF9tYXAgXFx1MDAyNiBCSVQocG9ydCkpLCBvdGhlcl9pc29sYXRlZDtcXG4gXFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV90b19wb3J0KHByaXYtXFx1MDAzZWRzLCBwb3J0KSwgKm90aGVyX2RwO1xcbi1cXHR1MzIgcG9ydF9tYXNrID0gQklUKGRwLVxcdTAwM2VjcHVfZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0dTMyIHBvcnRfbWFzaztcXG4gXFx0aW50IGksIHJldDtcXG4gXFxuK1xcdHJldCA9IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHByaXYtXFx1MDAzZWRzLCBkc2FfcG9ydF90b19jb25kdWl0KGRwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBvcnRfbWFzaywgTlVMTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUUNBOEtfTlVNX1BPUlRTOyBpKyspIHtcXG4gXFx0XFx0aWYgKGkgPT0gcG9ydClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTgyOSw2ICs5MDQsMTQgQEAgaW50IHFjYThrX3BvcnRfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHR1MTYgcG9ydF9tYXNrID0gQklUKHBvcnQpO1xcbiBcXG4rXFx0LyogVW5rbm93biB1bmljYXN0IGZsb29kaW5nIGRlbGl2ZXJzIGhvc3QgdHJhZmZpYyB0byB0aGUgY29uZHVpdC4gKi9cXG4rXFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcXG4rXFx0XFx0aWYgKCF2aWQpXFxuK1xcdFxcdFxcdHZpZCA9IFFDQThLX1BPUlRfVklEX0RFRjtcXG4rXFxuK1xcdFxcdHJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gcWNhOGtfcG9ydF9mZGJfaW5zZXJ0KHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcXG4gfVxcbiBcXG5AQCAtODM5LDYgKzkyMiw5IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0dTE2IHBvcnRfbWFzayA9IEJJVChwb3J0KTtcXG4gXFxuK1xcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdGlmICghdmlkKVxcbiBcXHRcXHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XFxuIFxcbkBAIC04NjgsNiArOTU0LDc1IEBAIGludCBxY2E4a19wb3J0X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdTggcWNhOGtfbGFnX3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkc2FfbGFnICpsYWcpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0dTggcG9ydF9tYXNrID0gMDtcXG4rXFxuK1xcdGRzYV9sYWdfZm9yZWFjaF9wb3J0KGRwLCBkcy1cXHUwMDNlZHN0LCBsYWcpXFxuK1xcdFxcdGlmIChkcC1cXHUwMDNlZHMgPT0gZHMpXFxuK1xcdFxcdFxcdHBvcnRfbWFzayB8PSBCSVQoZHAtXFx1MDAzZWluZGV4KTtcXG4rXFxuK1xcdHJldHVybiBwb3J0X21hc2s7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHFjYThrX2xhZ19pc19jcHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkc2FfbGFnICpsYWcpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFx0Ym9vbCBoYXNfY3B1ID0gZmFsc2U7XFxuK1xcbitcXHRkc2FfbGFnX2ZvcmVhY2hfcG9ydChkcCwgZHMtXFx1MDAzZWRzdCwgbGFnKSB7XFxuK1xcdFxcdGlmIChkcC1cXHUwMDNlZHMgIT0gZHMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFkc2FfcG9ydF9pc19jcHUoZHApKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRoYXNfY3B1ID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGhhc19jcHU7XFxuK31cXG4rXFxuK2ludCBxY2E4a19sYWdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZyxcXG4rXFx0XFx0ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYilcXG4re1xcbitcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHR1OCBwb3J0X21hc2s7XFxuK1xcbitcXHRwb3J0X21hc2sgPSBxY2E4a19sYWdfcG9ydF9tYXNrKGRzLCBcXHUwMDI2bGFnKTtcXG4rXFxuK1xcdGlmIChxY2E4a19sYWdfaXNfY3B1KGRzLCBcXHUwMDI2bGFnKSkge1xcbitcXHRcXHRpZiAoIXZpZClcXG4rXFx0XFx0XFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xcbitcXG4rXFx0XFx0cmV0dXJuIHFjYThrX2ZkYl9wdXJnZV9keW5hbWljKHByaXYsIGFkZHIsIHZpZCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpO1xcbit9XFxuK1xcbitpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXFxuK1xcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpXFxuK3tcXG4rXFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0dTggcG9ydF9tYXNrO1xcbitcXG4rXFx0aWYgKHFjYThrX2xhZ19pc19jcHUoZHMsIFxcdTAwMjZsYWcpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghdmlkKVxcbitcXHRcXHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XFxuK1xcbitcXHRwb3J0X21hc2sgPSBxY2E4a19sYWdfcG9ydF9tYXNrKGRzLCBcXHUwMDI2bGFnKTtcXG4rXFxuK1xcdHJldHVybiBxY2E4a19mZGJfZGVsKHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcXG4rfVxcbitcXG4gaW50IHFjYThrX3BvcnRfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaCBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaFxcbmluZGV4IDk1NjMzODg5MzAzMjUuLjMzM2IzNDM4ODZkZWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXFxuQEAgLTUyMyw2ICs1MjMsMTAgQEAgaW50IHFjYThrX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KTtcXG4gaW50IHFjYThrX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSk7XFxuIFxcbiAvKiBDb21tb24gYnJpZGdlIGZ1bmN0aW9uICovXFxuK2ludCBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4rXFx0XFx0XFx0ICAgIHUzMiAqcG9ydF9tYXNrLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gdm9pZCBxY2E4a19wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpO1xcbiBpbnQgcWNhOGtfcG9ydF9wcmVfYnJpZGdlX2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBzd2l0Y2hkZXZfYnJwb3J0X2ZsYWdzIGZsYWdzLFxcbkBAIC01NjEsNiArNTY1LDEyIEBAIGludCBxY2E4a19wb3J0X2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xcbiBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHRkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpO1xcbitpbnQgcWNhOGtfbGFnX2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXFxuK1xcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xcbitpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXFxuK1xcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xcbiBcXG4gLyogQ29tbW9uIE1EQiBmdW5jdGlvbiAqL1xcbiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIyOjUxLjkwMzU2MjY3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxMjc5MjIxNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBEU0Egc3dpdGNoIGRyaXZlciAocWNhOGspLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoIGNoaXBzIGNvbm5lY3RlZCB2aWEgTURJTykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzA4NjVlZjQ5MjY3YWNhMmE2YTlmZmIzZGZiMjEwODZjMDZhODFkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6MjI6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXG5pbmRleCA0YzkyODk4M2I4NjIzLi40YWY5MmQ1MWYwNDY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXG5AQCAtMTA4NywyMiArMTA4Nyw2IEBAIHFjYThrX3NldHVwX21hY19wd3Jfc2VsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBxY2E4a19maW5kX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi17XG4tXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4tXG4tXHQvKiBGaW5kIHRoZSBjb25uZWN0ZWQgY3B1IHBvcnQuIFZhbGlkIHBvcnQgYXJlIDAgb3IgNiAqL1xuLVx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZGV2X2RiZyhwcml2LVx1MDAzZWRldiwgXCJwb3J0IDAgaXMgbm90IHRoZSBDUFUgcG9ydC4gQ2hlY2tpbmcgcG9ydCA2XCIpO1xuLVxuLVx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgNikpXG4tXHRcdHJldHVybiA2O1xuLVxuLVx0cmV0dXJuIC1FSU5WQUw7XG4tfVxuLVxuIHN0YXRpYyBpbnRcbiBxY2E4a19zZXR1cF9vZl9wd3NfcmVnKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxuIHtcbkBAIC0xNzU5LDYgKzE3NDMsMTM5IEBAIHFjYThrX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiBEU0FfVEFHX1BST1RPX1FDQTtcbiB9XG4gXG4rc3RhdGljIGludCBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0ICAgICB1MzIgKnVzZXJfbWVtYmVycyxcbitcdFx0XHRcdFx0ICAgICB1MzIgKmNwdV9tZW1iZXJzKVxuK3tcbitcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChwb3J0KSwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqdXNlcl9tZW1iZXJzID0gdmFsIFx1MDAyNiBkc2FfY3B1X3BvcnRzKGRzKTtcbitcdCpjcHVfbWVtYmVycyA9IDA7XG4rXG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHtcbitcdFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cdTAwM2VyZWdtYXAsXG4rXHRcdFx0XHQgIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwoY3B1X2RwLVx1MDAzZWluZGV4KSwgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRpZiAodmFsIFx1MDAyNiBCSVQocG9ydCkpXG4rXHRcdFx0KmNwdV9tZW1iZXJzIHw9IEJJVChjcHVfZHAtXHUwMDNlaW5kZXgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9zZXRfY29uZHVpdF9tZW1iZXJzaGlwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHRcdCAgICAgdTMyIHVzZXJfbWVtYmVycyxcbitcdFx0XHRcdFx0ICAgICB1MzIgY3B1X21lbWJlcnMpXG4re1xuK1x0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLFxuK1x0XHRcdFx0IFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksXG4rXHRcdFx0XHQgZHNhX2NwdV9wb3J0cyhkcyksIHVzZXJfbWVtYmVycyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XG4rXHRcdHUzMiBtZW1iZXIgPSBjcHVfbWVtYmVycyBcdTAwMjYgQklUKGNwdV9kcC1cdTAwM2VpbmRleCkgPyBCSVQocG9ydCkgOiAwO1xuK1xuK1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsXG4rXHRcdFx0XHRcdCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9kcC1cdTAwM2VpbmRleCksXG4rXHRcdFx0XHRcdCBCSVQocG9ydCksIG1lbWJlcik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHFjYThrX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXHR1MzIgY3B1X3BvcnRfbWFzaywgb2xkX2NwdV9tZW1iZXJzLCBvbGRfdXNlcl9tZW1iZXJzO1xuK1x0aW50IHJlc3RvcmVfcmV0LCByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhkcywgY29uZHVpdCwgXHUwMDI2Y3B1X3BvcnRfbWFzaywgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19wb3J0X2dldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsIFx1MDAyNm9sZF91c2VyX21lbWJlcnMsXG4rXHRcdFx0XHRcdFx0XHUwMDI2b2xkX2NwdV9tZW1iZXJzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19wb3J0X3NldF9jb25kdWl0X21lbWJlcnNoaXAoZHMsIHBvcnQsIGNwdV9wb3J0X21hc2ssXG4rXHRcdFx0XHRcdFx0Y3B1X3BvcnRfbWFzayk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXN0b3JlX3JldCA9IHFjYThrX3BvcnRfc2V0X2NvbmR1aXRfbWVtYmVyc2hpcChkcywgcG9ydCxcbitcdFx0XHRcdFx0XHRcdG9sZF91c2VyX21lbWJlcnMsXG4rXHRcdFx0XHRcdFx0XHRvbGRfY3B1X21lbWJlcnMpO1xuK1x0aWYgKHJlc3RvcmVfcmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmFpbGVkIHRvIHJlc3RvcmUgY29uZHVpdCBtZW1iZXJzaGlwIGZvciBwb3J0ICVkOiAlcGVcXG5cIixcbitcdFx0XHRwb3J0LCBFUlJfUFRSKHJlc3RvcmVfcmV0KSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgZHNhX2xhZyBsYWcpXG4re1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCByZXQ7XG4rXG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbitcdFx0aWYgKGRzYV9wb3J0X3RvX2NvbmR1aXQoZHApICE9IGxhZy5kZXYpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHJldCA9IHFjYThrX3BvcnRfY2hhbmdlX2NvbmR1aXQoZHMsIGRwLVx1MDAzZWluZGV4LCBsYWcuZGV2LCBOVUxMKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfam9pbl93aXRoX2NvbmR1aXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGRzYV9sYWcgbGFnLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRkZXZfbGFnX3VwcGVyX2luZm8gKmluZm8sXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBxY2E4a19wb3J0X2xhZ19qb2luKGRzLCBwb3J0LCBsYWcsIGluZm8sIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHFjYThrX2xhZ19yZWZyZXNoX2NvbmR1aXRfcG9ydHMoZHMsIGxhZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcWNhOGtfcG9ydF9sYWdfbGVhdmVfd2l0aF9jb25kdWl0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZHNhX2xhZyBsYWcpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHFjYThrX3BvcnRfbGFnX2xlYXZlKGRzLCBwb3J0LCBsYWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBxY2E4a19sYWdfcmVmcmVzaF9jb25kdWl0X3BvcnRzKGRzLCBsYWcpO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIHFjYThrX2NvbmR1aXRfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4gXHRcdCAgICAgYm9vbCBvcGVyYXRpb25hbClcbkBAIC0xODQ0LDEzICsxOTYxLDEzIEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuLVx0aW50IGNwdV9wb3J0LCByZXQ7XG4tXHR1MzIgbWFzaztcbitcdHUzMiBjcHVfcG9ydHMsIG1hc2s7XG4rXHRpbnQgcmV0O1xuIFxuLVx0Y3B1X3BvcnQgPSBxY2E4a19maW5kX2NwdV9wb3J0KGRzKTtcbi1cdGlmIChjcHVfcG9ydCBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcIk5vIGNwdSBwb3J0IGNvbmZpZ3VyZWQgaW4gYm90aCBjcHUgcG9ydDAgYW5kIHBvcnQ2XCIpO1xuLVx0XHRyZXR1cm4gY3B1X3BvcnQ7XG4rXHRjcHVfcG9ydHMgPSBkc2FfY3B1X3BvcnRzKGRzKTtcbitcdGlmICghY3B1X3BvcnRzIHx8IGNwdV9wb3J0cyBcdTAwMjYgfihCSVQoMCkgfCBCSVQoNikpKSB7XG4rXHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwiQ1BVIHBvcnRzIG11c3QgYmUgcG9ydCAwIG9yIDZcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0LyogUGFyc2UgQ1BVIHBvcnQgY29uZmlnIHRvIGJlIGxhdGVyIHVzZWQgaW4gcGh5X2xpbmsgbWFjX2NvbmZpZyAqL1xuQEAgLTE5MDAsOSArMjAxNywxMCBAQCBxY2E4a19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXG4gXHQvKiBJbml0aWFsIHNldHVwIG9mIGFsbCBwb3J0cyAqL1xuIFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykge1xuLVx0XHQvKiBEaXNhYmxlIGZvcndhcmRpbmcgYnkgZGVmYXVsdCBvbiBhbGwgcG9ydHMgKi9cbitcdFx0LyogRGlzYWJsZSBmb3J3YXJkaW5nIGFuZCBsZWFybmluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuIFx0XHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChkcC1cdTAwM2VpbmRleCksXG4tXHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9NRU1CRVIsIDApO1xuK1x0XHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSIHxcbitcdFx0XHRcdFFDQThLX1BPUlRfTE9PS1VQX0xFQVJOLCAwKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuQEAgLTE5MjIsMjggKzIwNDAsMjAgQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHQvKiBGb3J3YXJkIGFsbCB1bmtub3duIGZyYW1lcyB0byBDUFUgcG9ydCBmb3IgTGludXggcHJvY2Vzc2luZ1xuLVx0ICogTm90aWNlIHRoYXQgaW4gbXVsdGktY3B1IGNvbmZpZyBvbmx5IG9uZSBwb3J0IHNob3VsZCBiZSBzZXRcbi1cdCAqIGZvciBpZ21wLCB1bmtub3duLCBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCBwYWNrZXRcbitcdC8qIEZvcndhcmQgdW5rbm93biBmcmFtZXMgdG8gZXZlcnkgQ1BVIHBvcnQuIFRoZSBpbmdyZXNzIHBvcnQgbG9va3VwXG4rXHQgKiBtZW1iZXJzaGlwIHJlc3RyaWN0cyBlYWNoIGZyYW1lIHRvIGl0cyBhc3NpZ25lZCBDUFUgcG9ydC5cbiBcdCAqL1xuIFx0cmV0ID0gcWNhOGtfd3JpdGUocHJpdiwgUUNBOEtfUkVHX0dMT0JBTF9GV19DVFJMMSxcbi1cdFx0XHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0lHTVBfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfQkNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfTUNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkgfFxuLVx0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfVUNfRFBfTUFTSywgQklUKGNwdV9wb3J0KSkpO1xuK1x0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfSUdNUF9EUF9NQVNLLCBjcHVfcG9ydHMpIHxcbitcdFx0XHQgIEZJRUxEX1BSRVAoUUNBOEtfR0xPQkFMX0ZXX0NUUkwxX0JDX0RQX01BU0ssIGNwdV9wb3J0cykgfFxuK1x0XHRcdCAgRklFTERfUFJFUChRQ0E4S19HTE9CQUxfRldfQ1RSTDFfTUNfRFBfTUFTSywgY3B1X3BvcnRzKSB8XG4rXHRcdFx0ICBGSUVMRF9QUkVQKFFDQThLX0dMT0JBTF9GV19DVFJMMV9VQ19EUF9NQVNLLCBjcHVfcG9ydHMpKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBDUFUgcG9ydCBnZXRzIGNvbm5lY3RlZCB0byBhbGwgdXNlciBwb3J0cyBvZiB0aGUgc3dpdGNoICovXG4tXHRyZXQgPSBxY2E4a19ybXcocHJpdiwgUUNBOEtfUE9SVF9MT09LVVBfQ1RSTChjcHVfcG9ydCksXG4tXHRcdFx0UUNBOEtfUE9SVF9MT09LVVBfTUVNQkVSLCBkc2FfdXNlcl9wb3J0cyhkcykpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIFNldHVwIGNvbm5lY3Rpb24gYmV0d2VlbiBDUFUgcG9ydCBcdTAwMjYgdXNlciBwb3J0c1xuLVx0ICogSW5kaXZpZHVhbCB1c2VyIHBvcnRzIGdldCBjb25uZWN0ZWQgdG8gQ1BVIHBvcnQgb25seVxuLVx0ICovXG4rXHQvKiBDb25uZWN0IGVhY2ggdXNlciBwb3J0IGJpZGlyZWN0aW9uYWxseSB0byBpdHMgYXNzaWduZWQgQ1BVIHBvcnQuICovXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbitcdFx0dTggY3B1X3BvcnQgPSBkcC1cdTAwM2VjcHVfZHAtXHUwMDNlaW5kZXg7XG4gXHRcdHU4IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbiBcbiBcdFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1BPUlRfTE9PS1VQX0NUUkwocG9ydCksXG5AQCAtMTk1Miw4ICsyMDYyLDggQEAgcWNhOGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4tXHRcdHJldCA9IHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKHBvcnQpLFxuLVx0XHRcdFx0XHRRQ0E4S19QT1JUX0xPT0tVUF9MRUFSTik7XG4rXHRcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19QT1JUX0xPT0tVUF9DVFJMKGNwdV9wb3J0KSxcbitcdFx0XHRcdEJJVChwb3J0KSwgQklUKHBvcnQpKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIwMDgsNiArMjExOCw4IEBAIHFjYThrX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdC8qIFNldCBtYXggbnVtYmVyIG9mIExBR3Mgc3VwcG9ydGVkICovXG4gXHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFFDQThLX05VTV9MQUdTO1xuIFxuK1x0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIwNDAsNiArMjE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcWNhOGtfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2ZkYl9hZGRcdFx0PSBxY2E4a19wb3J0X2ZkYl9hZGQsXG4gXHQucG9ydF9mZGJfZGVsXHRcdD0gcWNhOGtfcG9ydF9mZGJfZGVsLFxuIFx0LnBvcnRfZmRiX2R1bXBcdFx0PSBxY2E4a19wb3J0X2ZkYl9kdW1wLFxuK1x0LmxhZ19mZGJfYWRkXHRcdD0gcWNhOGtfbGFnX2ZkYl9hZGQsXG4rXHQubGFnX2ZkYl9kZWxcdFx0PSBxY2E4a19sYWdfZmRiX2RlbCxcbiBcdC5wb3J0X21kYl9hZGRcdFx0PSBxY2E4a19wb3J0X21kYl9hZGQsXG4gXHQucG9ydF9tZGJfZGVsXHRcdD0gcWNhOGtfcG9ydF9tZGJfZGVsLFxuIFx0LnBvcnRfbWlycm9yX2FkZFx0PSBxY2E4a19wb3J0X21pcnJvcl9hZGQsXG5AQCAtMjA0OSw4ICsyMTYzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBxY2E4a19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfdmxhbl9kZWxcdFx0PSBxY2E4a19wb3J0X3ZsYW5fZGVsLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHNcdD0gcWNhOGtfcGh5bGlua19nZXRfY2FwcyxcbiBcdC5nZXRfcGh5X2ZsYWdzXHRcdD0gcWNhOGtfZ2V0X3BoeV9mbGFncyxcbi1cdC5wb3J0X2xhZ19qb2luXHRcdD0gcWNhOGtfcG9ydF9sYWdfam9pbixcbi1cdC5wb3J0X2xhZ19sZWF2ZVx0XHQ9IHFjYThrX3BvcnRfbGFnX2xlYXZlLFxuK1x0LnBvcnRfbGFnX2pvaW5cdFx0PSBxY2E4a19wb3J0X2xhZ19qb2luX3dpdGhfY29uZHVpdHMsXG4rXHQucG9ydF9sYWdfbGVhdmVcdFx0PSBxY2E4a19wb3J0X2xhZ19sZWF2ZV93aXRoX2NvbmR1aXRzLFxuK1x0LnBvcnRfY2hhbmdlX2NvbmR1aXRcdD0gcWNhOGtfcG9ydF9jaGFuZ2VfY29uZHVpdCxcbiBcdC5jb25kdWl0X3N0YXRlX2NoYW5nZVx0PSBxY2E4a19jb25kdWl0X2NoYW5nZSxcbiBcdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0PSBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbCxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jXG5pbmRleCAxMzAwNWYxMGVkYjdkLi43M2UzNmY1ZmIzNTg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY1xuQEAgLTMyMiw2ICszMjIsMzYgQEAgc3RhdGljIGludCBxY2E4a19mZGJfc2VhcmNoX2FuZF9kZWwoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIHU4IHBvcnRfbWFzayxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcWNhOGtfZmRiX3B1cmdlX2R5bmFtaWMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGNvbnN0IHU4ICptYWMsXG4rXHRcdFx0XHQgICB1MTYgdmlkKVxuK3tcbitcdHN0cnVjdCBxY2E4a19mZGIgZmRiID0geyAwIH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19tdXRleCk7XG4rXG4rXHRxY2E4a19mZGJfd3JpdGUocHJpdiwgdmlkLCAwLCBtYWMsIDApO1xuK1x0cmV0ID0gcWNhOGtfZmRiX2FjY2Vzcyhwcml2LCBRQ0E4S19GREJfU0VBUkNILCAtMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IHFjYThrX2ZkYl9yZWFkKHByaXYsIFx1MDAyNmZkYik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEtlZXAgZGVsaWJlcmF0ZWx5IGNvbmZpZ3VyZWQgc3RhdGljIGVudHJpZXMuICovXG4rXHRpZiAoIWZkYi5hZ2luZyB8fCBmZGIuYWdpbmcgPT0gUUNBOEtfQVRVX1NUQVRVU19TVEFUSUMpIHtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBxY2E4a19mZGJfYWNjZXNzKHByaXYsIFFDQThLX0ZEQl9QVVJHRSwgLTEpO1xuK1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19tdXRleCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgaW50IHFjYThrX3ZsYW5fYWNjZXNzKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LFxuIFx0XHRcdCAgICAgZW51bSBxY2E4a192bGFuX2NtZCBjbWQsIHUxNiB2aWQpXG4ge1xuQEAgLTYwNywxNSArNjM3LDYwIEBAIHZvaWQgcWNhOGtfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKVxuIFx0cWNhOGtfcG9ydF9jb25maWd1cmVfbGVhcm5pbmcoZHMsIHBvcnQsIGxlYXJuaW5nKTtcbiB9XG4gXG4raW50IHFjYThrX2NvbmR1aXRfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4rXHRcdFx0ICAgIHUzMiAqcG9ydF9tYXNrLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHMtXHUwMDNlZHN0O1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGludCBpZDtcbitcbitcdCpwb3J0X21hc2sgPSAwO1xuK1xuK1x0aWYgKCFuZXRpZl9pc19sYWdfbWFzdGVyKGNvbmR1aXQpKSB7XG4rXHRcdGRwID0gY29uZHVpdC1cdTAwM2Vkc2FfcHRyO1xuK1x0XHRpZiAoIWRwIHx8IGRwLVx1MDAzZWRzICE9IGRzIHx8ICFkc2FfcG9ydF9pc19jcHUoZHApKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJDb25kdWl0IGlzIG5vdCBhIGxvY2FsIENQVSBwb3J0XCIpO1xuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0fVxuK1xuK1x0XHQqcG9ydF9tYXNrID0gQklUKGRwLVx1MDAzZWluZGV4KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZCA9IGRzYV9sYWdfaWQoZHN0LCBjb25kdWl0KTtcbitcdGlmIChpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGlkO1xuK1xuK1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzdCwgZHNhX2xhZ19ieV9pZChkc3QsIGlkKSlcbitcdFx0aWYgKGRwLVx1MDAzZWRzID09IGRzIFx1MDAyNlx1MDAyNiBkc2FfcG9ydF9pc19jcHUoZHApKVxuK1x0XHRcdCpwb3J0X21hc2sgfD0gQklUKGRwLVx1MDAzZWluZGV4KTtcbitcbitcdGlmICghKnBvcnRfbWFzaykge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDb25kdWl0IExBRyBoYXMgbm8gbG9jYWwgQ1BVIHBvcnRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHFjYThrX3VwZGF0ZV9wb3J0X21lbWJlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4gXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9kZXYsXG4gXHRcdFx0XHQgICAgYm9vbCBqb2luKVxuIHtcbiBcdGJvb2wgaXNvbGF0ZWQgPSAhIShwcml2LVx1MDAzZXBvcnRfaXNvbGF0ZWRfbWFwIFx1MDAyNiBCSVQocG9ydCkpLCBvdGhlcl9pc29sYXRlZDtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChwcml2LVx1MDAzZWRzLCBwb3J0KSwgKm90aGVyX2RwO1xuLVx0dTMyIHBvcnRfbWFzayA9IEJJVChkcC1cdTAwM2VjcHVfZHAtXHUwMDNlaW5kZXgpO1xuK1x0dTMyIHBvcnRfbWFzaztcbiBcdGludCBpLCByZXQ7XG4gXG4rXHRyZXQgPSBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhwcml2LVx1MDAzZWRzLCBkc2FfcG9ydF90b19jb25kdWl0KGRwKSxcbitcdFx0XHRcdCAgICAgIFx1MDAyNnBvcnRfbWFzaywgTlVMTCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUUNBOEtfTlVNX1BPUlRTOyBpKyspIHtcbiBcdFx0aWYgKGkgPT0gcG9ydClcbiBcdFx0XHRjb250aW51ZTtcbkBAIC04MjksNiArOTA0LDE0IEBAIGludCBxY2E4a19wb3J0X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdHUxNiBwb3J0X21hc2sgPSBCSVQocG9ydCk7XG4gXG4rXHQvKiBVbmtub3duIHVuaWNhc3QgZmxvb2RpbmcgZGVsaXZlcnMgaG9zdCB0cmFmZmljIHRvIHRoZSBjb25kdWl0LiAqL1xuK1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcbitcdFx0aWYgKCF2aWQpXG4rXHRcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuK1xuK1x0XHRyZXR1cm4gcWNhOGtfZmRiX3B1cmdlX2R5bmFtaWMocHJpdiwgYWRkciwgdmlkKTtcbitcdH1cbitcbiBcdHJldHVybiBxY2E4a19wb3J0X2ZkYl9pbnNlcnQocHJpdiwgYWRkciwgcG9ydF9tYXNrLCB2aWQpO1xuIH1cbiBcbkBAIC04MzksNiArOTIyLDkgQEAgaW50IHFjYThrX3BvcnRfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTE2IHBvcnRfbWFzayA9IEJJVChwb3J0KTtcbiBcbitcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghdmlkKVxuIFx0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4gXG5AQCAtODY4LDYgKzk1NCw3NSBAQCBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB1OCBxY2E4a19sYWdfcG9ydF9tYXNrKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHNhX2xhZyAqbGFnKVxuK3tcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1OCBwb3J0X21hc2sgPSAwO1xuK1xuK1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzLVx1MDAzZWRzdCwgbGFnKVxuK1x0XHRpZiAoZHAtXHUwMDNlZHMgPT0gZHMpXG4rXHRcdFx0cG9ydF9tYXNrIHw9IEJJVChkcC1cdTAwM2VpbmRleCk7XG4rXG4rXHRyZXR1cm4gcG9ydF9tYXNrO1xuK31cbitcbitzdGF0aWMgYm9vbCBxY2E4a19sYWdfaXNfY3B1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkc2FfbGFnICpsYWcpXG4re1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdGJvb2wgaGFzX2NwdSA9IGZhbHNlO1xuK1xuK1x0ZHNhX2xhZ19mb3JlYWNoX3BvcnQoZHAsIGRzLVx1MDAzZWRzdCwgbGFnKSB7XG4rXHRcdGlmIChkcC1cdTAwM2VkcyAhPSBkcylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFkc2FfcG9ydF9pc19jcHUoZHApKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aGFzX2NwdSA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gaGFzX2NwdTtcbit9XG4rXG4raW50IHFjYThrX2xhZ19mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLFxuK1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuK1x0XHQgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKVxuK3tcbitcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHU4IHBvcnRfbWFzaztcbitcbitcdHBvcnRfbWFzayA9IHFjYThrX2xhZ19wb3J0X21hc2soZHMsIFx1MDAyNmxhZyk7XG4rXG4rXHRpZiAocWNhOGtfbGFnX2lzX2NwdShkcywgXHUwMDI2bGFnKSkge1xuK1x0XHRpZiAoIXZpZClcbitcdFx0XHR2aWQgPSBRQ0E4S19QT1JUX1ZJRF9ERUY7XG4rXG4rXHRcdHJldHVybiBxY2E4a19mZGJfcHVyZ2VfZHluYW1pYyhwcml2LCBhZGRyLCB2aWQpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHFjYThrX3BvcnRfZmRiX2luc2VydChwcml2LCBhZGRyLCBwb3J0X21hc2ssIHZpZCk7XG4rfVxuK1xuK2ludCBxY2E4a19sYWdfZmRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHN0cnVjdCBkc2FfbGFnIGxhZyxcbitcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCxcbitcdFx0ICAgICAgc3RydWN0IGRzYV9kYiBkYilcbit7XG4rXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXHR1OCBwb3J0X21hc2s7XG4rXG4rXHRpZiAocWNhOGtfbGFnX2lzX2NwdShkcywgXHUwMDI2bGFnKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXZpZClcbitcdFx0dmlkID0gUUNBOEtfUE9SVF9WSURfREVGO1xuK1xuK1x0cG9ydF9tYXNrID0gcWNhOGtfbGFnX3BvcnRfbWFzayhkcywgXHUwMDI2bGFnKTtcbitcbitcdHJldHVybiBxY2E4a19mZGJfZGVsKHByaXYsIGFkZHIsIHBvcnRfbWFzaywgdmlkKTtcbit9XG4rXG4gaW50IHFjYThrX3BvcnRfbWRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYixcbiBcdFx0ICAgICAgIHN0cnVjdCBkc2FfZGIgZGIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oIGIvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXG5pbmRleCA5NTYzMzg4OTMwMzI1Li4zMzNiMzQzODg2ZGVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmhcbkBAIC01MjMsNiArNTIzLDEwIEBAIGludCBxY2E4a19nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldCk7XG4gaW50IHFjYThrX3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmVlZSk7XG4gXG4gLyogQ29tbW9uIGJyaWRnZSBmdW5jdGlvbiAqL1xuK2ludCBxY2E4a19jb25kdWl0X3BvcnRfbWFzayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuK1x0XHRcdCAgICB1MzIgKnBvcnRfbWFzayxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIHFjYThrX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSk7XG4gaW50IHFjYThrX3BvcnRfcHJlX2JyaWRnZV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0c3RydWN0IHN3aXRjaGRldl9icnBvcnRfZmxhZ3MgZmxhZ3MsXG5AQCAtNTYxLDYgKzU2NSwxMiBAQCBpbnQgcWNhOGtfcG9ydF9mZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKTtcbiBpbnQgcWNhOGtfcG9ydF9mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSk7XG4raW50IHFjYThrX2xhZ19mZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRzYV9sYWcgbGFnLFxuK1x0XHQgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkLFxuK1x0XHQgICAgICBzdHJ1Y3QgZHNhX2RiIGRiKTtcbitpbnQgcWNhOGtfbGFnX2ZkYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBzdHJ1Y3QgZHNhX2xhZyBsYWcsXG4rXHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsXG4rXHRcdCAgICAgIHN0cnVjdCBkc2FfZGIgZGIpO1xuIFxuIC8qIENvbW1vbiBNREIgZnVuY3Rpb24gKi9cbiBpbnQgcWNhOGtfcG9ydF9tZGJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMjo1MS45MDM1NjM5NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDM3NjczNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgcWNhOGsgRFNBIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIHRoZSBgcWNhOGtgIERTQSBkcml2ZXIuIEl0J3MgYSBzaWduaWZpY2FudCBvbmUsIGFkZGluZyBtdWx0aS1DUFUgcG9ydCBzdXBwb3J0IGFuZCBMQUcgRkRCIG9wZXJhdGlvbnMsIGFtb25nIG90aGVyIHRoaW5ncy4gSXQgdG91Y2hlcyBgcWNhOGstOHh4eC5jYCwgYHFjYThrLWNvbW1vbi5jYCwgYW5kIHRoZSBoZWFkZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBEU0EgZHJpdmVycyBhcmUgbm90b3Jpb3VzbHkgaGFyZHdhcmUtZGVwZW5kZW50LiBUaGV5IHR5cGljYWxseSByZWx5IG9uIGEgcGh5c2ljYWwgRXRoZXJuZXQgc3dpdGNoIGNoaXAgY29ubmVjdGVkIHZpYSBNRElPIG9yIFNQSSwgdGhhdCBzb3J0IG9mIHRoaW5nLlxuXG5IbW0sIGNhbiBJIGluc3RhbnRpYXRlIGEgRFNBIGRyaXZlciBsaWtlIGBxY2E4a2AgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cyBpbiBRRU1VLCBvciBldmVuIHdpdGggc29tZSBzb3J0IG9mIGR1bW15IGRldmljZT8gVGhpcyBpcyB1c3VhbGx5IGhvdyB0aGV5IGNvbWUgdXAgLSBJIG1lYW4sIGBxY2E4a2AgaXMgKnNwZWNpZmljYWxseSogZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IFFDQThLIGVtdWxhdGlvbiBpbiBRRU1VLCBvciBhdCBsZWFzdCBhIGZ1enppbmcgdGFyZ2V0LlxuXG5XYWl0LCBzeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZW11bGF0ZSAqc3BlY2lmaWMqIERTQSBzd2l0Y2ggY2hpcHMgdW5sZXNzIHRoZXJlJ3MgYSBtb3JlIGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIHRoZW0sIG9yIGlmIGl0J3MgYSBzb2Z0d2FyZSBzd2l0Y2guIEkndmUgYmVlbiB0aHJvdWdoIHRoaXMgYmVmb3JlLCBidXQgZG9lcyBzeXprYWxsZXIgaGF2ZSAqYW55KiBidWlsdC1pbiBzdXBwb3J0IGZvciBpbmplY3RpbmcgZGV2aWNlIHRyZWUgbm9kZXMgb3IgdXNpbmcgbmV0bGluayB0byBjb25maWd1cmUgYSBEU0Egc2V0dXA/IE5vLCB0aGF0J3Mgbm90IHJpZ2h0LiBEU0Egc3dpdGNoZXMgYXJlIHVzdWFsbHkgZGVmaW5lZCB0aHJvdWdoIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEuXG5cbk9rYXksIEknbSBnZXR0aW5nIGJhY2sgdG8gc3l6a2FsbGVyJ3MgbGltaXRzLiBJIGtub3cgaXQgY2FuIHVzZSBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIG5ldHdvcmsgZnV6emluZyB0ZWNobmlxdWVzLCBidXQgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgd2l0aG91dCBwcm9wZXIgUUVNVSBlbXVsYXRpb24sIGFyZSBnZW5lcmFsbHkgdW5yZWFjaGFibGUuIE15IHF1ZXN0aW9uIHJlbWFpbnM6IGNhbiBJIHByb2JlIGBxY2E4a2AgaW5zaWRlIFFFTVU/IExldCdzIGdvIHNlYXJjaCB0aGUga2VybmVsIHRyZWUgZm9yIGBxY2E4a2AgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIyOjU5LjM0MTI0MDcwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUyMDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY2E4a1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE5NTEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfTkVUX0RTQV9BUjkzMzEpXFx0Kz0gYXI5MzMxLm9cXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX05FVF9EU0FfUUNBOEspXFx0Kz0gcWNhOGsub1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGU6NDpxY2E4ay15IFxcdFxcdFxcdCs9IHFjYThrLWNvbW1vbi5vIHFjYThrLTh4eHgub1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGUtNS1pZmRlZiBDT05GSUdfTkVUX0RTQV9RQ0E4S19MRURTX1NVUFBPUlRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL01ha2VmaWxlOjY6cWNhOGsteVxcdFxcdFxcdFxcdCs9IHFjYThrLWxlZHMub1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvTWFrZWZpbGUtNy1lbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjMtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjQ6I2luY2x1ZGUgXFxcInFjYThrLmhcXFwiXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjU6I2luY2x1ZGUgXFxcInFjYThrX2xlZHMuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yNi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yNz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjI4OnFjYThrX3NwbGl0X2FkZHIodTMyIHJlZ2FkZHIsIHUxNiAqcjEsIHUxNiAqcjIsIHUxNiAqcGFnZSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz00MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDE6cWNhOGtfbWlpX3dyaXRlX2xvKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIHUzMiByZWdudW0sIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDktXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2YnVzLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTA6XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gd3JpdGUgcWNhOGsgMzJiaXQgbG8gcmVnaXN0ZXJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU2OnFjYThrX21paV93cml0ZV9oaShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY0LVxcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjY1OlxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHdyaXRlIHFjYThrIDMyYml0IGhpIHJlZ2lzdGVyXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTcwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3MTpxY2E4a19taWlfcmVhZF9sbyhzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04My1cXHRkZXZfZXJyX3JhdGVsaW1pdGVkKFxcdTAwMjZidXMtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NDpcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWFkIHFjYThrIDMyYml0IGxvIHJlZ2lzdGVyXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NS1cXHQqdmFsID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTkwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MTpxY2E4a19taWlfcmVhZF9oaShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgKnZhbClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDMtXFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2YnVzLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTA0OlxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlYWQgcWNhOGsgMzJiaXQgaGkgcmVnaXN0ZXJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNS1cXHQqdmFsID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTExMD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTExOnFjYThrX21paV9yZWFkMzIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgdTMyIHJlZ251bSwgdTMyICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExNy1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTg6XFx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfbG8oYnVzLCBwaHlfaWQsIHJlZ251bSwgXFx1MDAyNmxvKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMTktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTIyOlxcdHJldCA9IHFjYThrX21paV9yZWFkX2hpKGJ1cywgcGh5X2lkLCByZWdudW0gKyAxLCBcXHUwMDI2aGkpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEyMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEzMj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzMzpxY2E4a19taWlfd3JpdGUzMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCB1MzIgcmVnbnVtLCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNC17XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1OlxcdGlmIChxY2E4a19taWlfd3JpdGVfbG8oYnVzLCBwaHlfaWQsIHJlZ251bSwgdmFsKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM2LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzctXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM4OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIHBoeV9pZCwgcmVnbnVtICsgMSwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzktfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTQxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNDI6cWNhOGtfc2V0X3BhZ2Uoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIHUxNiBwYWdlKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE0My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNTMtXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2YnVzLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTU0OlxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHNldCBxY2E4ayBwYWdlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNTUtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE2Mi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjM6c3RhdGljIHZvaWQgcWNhOGtfcndfcmVnX2Fja19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNjQte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE2NTpcXHRzdHJ1Y3QgcWNhOGtfbWdtdF9ldGhfZGF0YSAqbWdtdF9ldGhfZGF0YTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNjY6XFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNjctXFx0c3RydWN0IHFjYV9tZ210X2V0aGhkciAqbWdtdF9ldGhoZHI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0yMTctXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MjE4OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoZW51bSBtZGlvX2NtZCBjbWQsIHUzMiByZWcsIHUzMiAqdmFsLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxOS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaW50IHByaW9yaXR5LCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzAxLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjMwMjpzdGF0aWMgdm9pZCBxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHNlcV9udW0pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTMxMS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTI6c3RhdGljIGludCBxY2E4a19yZWFkX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTQ6XFx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcXHUwMDI2cHJpdi1cXHUwMDNlbWdtdF9ldGhfZGF0YTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMTUtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTMxOC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozMTk6XFx0c2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19SRUFELCByZWcsIE5VTEwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzIwLVxcdFxcdFxcdFxcdCAgICAgIFFDQThLX0VUSEVSTkVUX01ESU9fUFJJT1JJVFksIGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zMzgtXFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzM5OlxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShza2IsIG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzQwLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZWFjayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzYzLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjM2NDpzdGF0aWMgaW50IHFjYThrX3dyaXRlX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWwsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzY1LXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozNjY6XFx0c3RydWN0IHFjYThrX21nbXRfZXRoX2RhdGEgKm1nbXRfZXRoX2RhdGEgPSBcXHUwMDI2cHJpdi1cXHUwMDNlbWdtdF9ldGhfZGF0YTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zNjctXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTM3MC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzozNzE6XFx0c2tiID0gcWNhOGtfYWxsb2NfbWRpb19oZWFkZXIoTURJT19XUklURSwgcmVnLCB2YWwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzcyLVxcdFxcdFxcdFxcdCAgICAgIFFDQThLX0VUSEVSTkVUX01ESU9fUFJJT1JJVFksIGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0zOTAtXFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MzkxOlxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShza2IsIG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMzkyLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZWFjayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NDEyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MTM6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzX2V0aChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZV92YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQxNy1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MTg6XFx0cmV0ID0gcWNhOGtfcmVhZF9ldGgocHJpdiwgcmVnLCBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00MjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDI1OlxcdHJldHVybiBxY2E4a193cml0ZV9ldGgocHJpdiwgcmVnLCBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDI2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQyOD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDI5OnFjYThrX3JlYWRfbWlpKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90ICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQzNC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0MzU6XFx0cWNhOGtfc3BsaXRfYWRkcihyZWcsIFxcdTAwMjZyMSwgXFx1MDAyNnIyLCBcXHUwMDI2cGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDM2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDM4LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQzOTpcXHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NDAtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NDItXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDQzOlxcdHJldCA9IHFjYThrX21paV9yZWFkMzIoYnVzLCAweDEwIHwgcjIsIHIxLCB2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ0NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTQ1MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDUxOnFjYThrX3dyaXRlX21paShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ1Ni1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0NTc6XFx0cWNhOGtfc3BsaXRfYWRkcihyZWcsIFxcdTAwMjZyMSwgXFx1MDAyNnIyLCBcXHUwMDI2cGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDU4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDYwLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ2MTpcXHRyZXQgPSBxY2E4a19zZXRfcGFnZShwcml2LCBwYWdlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjItXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDY1OlxcdHFjYThrX21paV93cml0ZTMyKGJ1cywgMHgxMCB8IHIyLCByMSwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00NjYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz00NzI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ3MzpxY2E4a19yZWdtYXBfdXBkYXRlX2JpdHNfbWlpKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCB1aW50MzJfdCByZWcsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDc0LVxcdFxcdFxcdCAgICAgdWludDMyX3QgbWFzaywgdWludDMyX3Qgd3JpdGVfdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDgwLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ4MTpcXHRxY2E4a19zcGxpdF9hZGRyKHJlZywgXFx1MDAyNnIxLCBcXHUwMDI2cjIsIFxcdTAwMjZwYWdlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00ODItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy00ODQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NDg1OlxcdHJldCA9IHFjYThrX3NldF9wYWdlKHByaXYsIHBhZ2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4Ni1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ4OC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo0ODk6XFx0cmV0ID0gcWNhOGtfbWlpX3JlYWQzMihidXMsIDB4MTAgfCByMiwgcjEsIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTQ5NC1cXHR2YWwgfD0gd3JpdGVfdmFsO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjQ5NTpcXHRxY2E4a19taWlfd3JpdGUzMihidXMsIDB4MTAgfCByMiwgcjEsIHZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNDk2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTAzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1MDQ6cWNhOGtfYnVsa19yZWFkKHZvaWQgKmN0eCwgY29uc3Qgdm9pZCAqcmVnX2J1Ziwgc2l6ZV90IHJlZ19sZW4sXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA1LVxcdFxcdHZvaWQgKnZhbF9idWYsIHNpemVfdCB2YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTA3LVxcdGludCBpLCBjb3VudCA9IHZhbF9sZW4gLyBzaXplb2YodTMyKSwgcmV0O1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUwODpcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGN0eDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MDktXFx0dTMyIHJlZyA9ICoodTE2ICopcmVnX2J1ZjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUxMS1cXHRpZiAocHJpdi1cXHUwMDNlbWdtdF9jb25kdWl0IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTEyOlxcdCAgICAhcWNhOGtfcmVhZF9ldGgocHJpdiwgcmVnLCB2YWxfYnVmLCB2YWxfbGVuKSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyssIHJlZyArPSBzaXplb2YodTMyKSkge1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUxNzpcXHRcXHRyZXQgPSBxY2E4a19yZWFkX21paShwcml2LCByZWcsIHZhbF9idWYgKyBpKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MTgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz01MjU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUyNjpxY2E4a19idWxrX2dhdGhlcl93cml0ZSh2b2lkICpjdHgsIGNvbnN0IHZvaWQgKnJlZ19idWYsIHNpemVfdCByZWdfbGVuLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUyNy1cXHRcXHRcXHRjb25zdCB2b2lkICp2YWxfYnVmLCBzaXplX3QgdmFsX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTUyOS1cXHRpbnQgaSwgY291bnQgPSB2YWxfbGVuIC8gc2l6ZW9mKHUzMiksIHJldDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1MzA6XFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBjdHg7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTMxLVxcdHUzMiByZWcgPSAqKHUxNiAqKXJlZ19idWY7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01MzQtXFx0aWYgKHByaXYtXFx1MDAzZW1nbXRfY29uZHVpdCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjUzNTpcXHQgICAgIXFjYThrX3dyaXRlX2V0aChwcml2LCByZWcsIHZhbCwgdmFsX2xlbikpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTM2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTQxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrLCByZWcgKz0gc2l6ZW9mKHUzMiksIHZhbCsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTQyOlxcdFxcdHJldCA9IHFjYThrX3dyaXRlX21paShwcml2LCByZWcsICp2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU0My1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTU1MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTUxOnFjYThrX2J1bGtfd3JpdGUodm9pZCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgYnl0ZXMpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTUyLXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTM6XFx0cmV0dXJuIHFjYThrX2J1bGtfZ2F0aGVyX3dyaXRlKGN0eCwgZGF0YSwgc2l6ZW9mKHUxNiksIGRhdGEgKyBzaXplb2YodTE2KSxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NTQtXFx0XFx0XFx0XFx0ICAgICAgIGJ5dGVzIC0gc2l6ZW9mKHUxNikpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NTU3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NTg6cWNhOGtfcmVnbWFwX3VwZGF0ZV9iaXRzKHZvaWQgKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBtYXNrLCB1aW50MzJfdCB3cml0ZV92YWwpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTU5LXtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NjA6XFx0c3RydWN0IHFjYThrX3ByaXYgKnByaXYgPSBjdHg7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTYxLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU2MjpcXHRpZiAoIXFjYThrX3JlZ21hcF91cGRhdGVfYml0c19ldGgocHJpdiwgcmVnLCBtYXNrLCB3cml0ZV92YWwpKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU2My1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTY1OlxcdHJldHVybiBxY2E4a19yZWdtYXBfdXBkYXRlX2JpdHNfbWlpKHByaXYsIHJlZywgbWFzaywgd3JpdGVfdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NjYtfVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU2Ny1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1Njg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHFjYThrX3JlZ21hcF9jb25maWcgPSB7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTY5LVxcdC5yZWdfYml0cyA9IDE2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNTcyLVxcdC5tYXhfcmVnaXN0ZXIgPSAweDE2YWMsIC8qIGVuZCBNSUIgLSBQb3J0NiByYW5nZSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU3MzpcXHQucmVhZCA9IHFjYThrX2J1bGtfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzQ6XFx0LndyaXRlID0gcWNhOGtfYnVsa193cml0ZSxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzU6XFx0LnJlZ191cGRhdGVfYml0cyA9IHFjYThrX3JlZ21hcF91cGRhdGVfYml0cyxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo1NzY6XFx0LnJkX3RhYmxlID0gXFx1MDAyNnFjYThrX3JlYWRhYmxlX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjU3NzpcXHQuZGlzYWJsZV9sb2NraW5nID0gdHJ1ZSwgLyogTG9ja2luZyBpcyBoYW5kbGVkIGJ5IHFjYThrIHJlYWQvd3JpdGUgKi9cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy01NzgtXFx0LmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9OT05FLCAvKiBFeHBsaWNpdGx5IGRpc2FibGUgQ0FDSEUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTU4Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NTg3OnFjYThrX3BoeV9ldGhfYnVzeV93YWl0KHN0cnVjdCBxY2E4a19tZ210X2V0aF9kYXRhICptZ210X2V0aF9kYXRhLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTU4OC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVhZF9za2IsIHUzMiAqdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjAwLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSsrO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjYwMTpcXHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0oc2tiLCBtZ210X2V0aF9kYXRhLVxcdTAwM2VzZXEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYwMi1cXHRtZ210X2V0aF9kYXRhLVxcdTAwM2VhY2sgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTYyMj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjIzOnFjYThrX3BoeV9ldGhfY29tbWFuZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgYm9vbCByZWFkLCBpbnQgcGh5LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyNC1cXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyNi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqd3JpdGVfc2tiLCAqY2xlYXJfc2tiLCAqcmVhZF9za2I7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjI3OlxcdHN0cnVjdCBxY2E4a19tZ210X2V0aF9kYXRhICptZ210X2V0aF9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTYyOC1cXHR1MzIgd3JpdGVfdmFsLCBjbGVhcl92YWwgPSAwLCB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02NDktXFx0LyogUHJlYWxsb2MgYWxsIHRoZSBuZWVkZWQgc2tiIGJlZm9yZSB0aGUgbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjY1MDpcXHR3cml0ZV9za2IgPSBxY2E4a19hbGxvY19tZGlvX2hlYWRlcihNRElPX1dSSVRFLCBRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcXHUwMDI2d3JpdGVfdmFsLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY1MS1cXHRcXHRcXHRcXHRcXHQgICAgUUNBOEtfRVRIRVJORVRfUEhZX1BSSU9SSVRZLCBzaXplb2Yod3JpdGVfdmFsKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy02NTQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NjU1OlxcdGNsZWFyX3NrYiA9IHFjYThrX2FsbG9jX21kaW9faGVhZGVyKE1ESU9fV1JJVEUsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsIFxcdTAwMjZjbGVhcl92YWwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjU2LVxcdFxcdFxcdFxcdFxcdCAgICBRQ0E4S19FVEhFUk5FVF9QSFlfUFJJT1JJVFksIHNpemVvZihjbGVhcl92YWwpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTY2MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo2NjI6XFx0cmVhZF9za2IgPSBxY2E4a19hbGxvY19tZGlvX2hlYWRlcihNRElPX1JFQUQsIFFDQThLX01ESU9fTUFTVEVSX0NUUkwsIFxcdTAwMjZjbGVhcl92YWwsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNjYzLVxcdFxcdFxcdFxcdFxcdCAgIFFDQThLX0VUSEVSTkVUX1BIWV9QUklPUklUWSwgc2l6ZW9mKGNsZWFyX3ZhbCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzAyLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSsrO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjcwMzpcXHRxY2E4a19tZGlvX2hlYWRlcl9maWxsX3NlcV9udW0od3JpdGVfc2tiLCBtZ210X2V0aF9kYXRhLVxcdTAwM2VzZXEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTcwNC1cXHRtZ210X2V0aF9kYXRhLVxcdTAwM2VhY2sgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTcyNC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3MjU6XFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQocWNhOGtfcGh5X2V0aF9idXN5X3dhaXQsIHJldDEsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzI2LVxcdFxcdFxcdFxcdCEodmFsIFxcdTAwMjYgUUNBOEtfTURJT19NQVNURVJfQlVTWSksIDAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03MzktXFx0XFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzQwOlxcdFxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShyZWFkX3NrYiwgbWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03NDEtXFx0XFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlYWNrID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy03NjgtXFx0bWdtdF9ldGhfZGF0YS1cXHUwMDNlc2VxKys7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6NzY5OlxcdHFjYThrX21kaW9faGVhZGVyX2ZpbGxfc2VxX251bShjbGVhcl9za2IsIG1nbXRfZXRoX2RhdGEtXFx1MDAzZXNlcSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzcwLVxcdG1nbXRfZXRoX2RhdGEtXFx1MDAzZWFjayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9NzkzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo3OTQ6cWNhOGtfbWRpb19idXN5X3dhaXQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIHJlZywgdTMyIG1hc2spXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtNzk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTc5OS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MDA6XFx0cWNhOGtfc3BsaXRfYWRkcihyZWcsIFxcdTAwMjZyMSwgXFx1MDAyNnIyLCBcXHUwMDI2cGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODAxLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjgwMjpcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChxY2E4a19taWlfcmVhZF9oaSwgcmV0MSwgISh2YWwgXFx1MDAyNiBtYXNrKSwgMCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDMtXFx0XFx0XFx0XFx0UUNBOEtfQlVTWV9XQUlUX1RJTUVPVVQgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgwNS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MDY6XFx0LyogQ2hlY2sgaWYgcWNhOGtfcmVhZCBoYXMgZmFpbGVkIGZvciBhIGRpZmZlcmVudCByZWFzb25cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MDctXFx0ICogYmVmb3JlIHJldHVybnRpbmcgLUVUSU1FRE9VVFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9ODE1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MTY6cWNhOGtfbWRpb193cml0ZShzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiwgaW50IHBoeSwgaW50IHJlZ251bSwgdTE2IGRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzMC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MzE6XFx0cWNhOGtfc3BsaXRfYWRkcihRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcXHUwMDI2cjEsIFxcdTAwMjZyMiwgXFx1MDAyNnBhZ2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzMi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTgzNC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4MzU6XFx0cmV0ID0gcWNhOGtfc2V0X3BhZ2UocHJpdiwgcGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODM2LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04MzgtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODM5OlxcdHFjYThrX21paV93cml0ZTMyKGJ1cywgMHgxMCB8IHIyLCByMSwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDAtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODQxOlxcdHJldCA9IHFjYThrX21kaW9fYnVzeV93YWl0KGJ1cywgUUNBOEtfTURJT19NQVNURVJfQ1RSTCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDItXFx0XFx0XFx0XFx0ICAgUUNBOEtfTURJT19NQVNURVJfQlVTWSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDUtXFx0LyogZXZlbiBpZiB0aGUgYnVzeV93YWl0IHRpbWVvdXRzIHRyeSB0byBjbGVhciB0aGUgTUFTVEVSX0VOICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODQ2OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgKyAxLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NDctXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz04NTM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg1NDpxY2E4a19tZGlvX3JlYWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwaHksIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2Ny1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4Njg6XFx0cWNhOGtfc3BsaXRfYWRkcihRQ0E4S19NRElPX01BU1RFUl9DVFJMLCBcXHUwMDI2cjEsIFxcdTAwMjZyMiwgXFx1MDAyNnBhZ2UpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4NzI6XFx0cmV0ID0gcWNhOGtfc2V0X3BhZ2UocHJpdiwgcGFnZSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtODczLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04NzUtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODc2OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgKyAxLCB2YWwpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3Ny1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4Nzg6XFx0cmV0ID0gcWNhOGtfbWRpb19idXN5X3dhaXQoYnVzLCBRQ0E4S19NRElPX01BU1RFUl9DVFJMLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg3OS1cXHRcXHRcXHRcXHQgICBRQ0E4S19NRElPX01BU1RFUl9CVVNZKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg4Mi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo4ODM6XFx0cmV0ID0gcWNhOGtfbWlpX3JlYWRfbG8oYnVzLCAweDEwIHwgcjIsIHIxLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04ODQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04ODYtXFx0LyogZXZlbiBpZiB0aGUgYnVzeV93YWl0IHRpbWVvdXRzIHRyeSB0byBjbGVhciB0aGUgTUFTVEVSX0VOICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6ODg3OlxcdHFjYThrX21paV93cml0ZV9oaShidXMsIDB4MTAgfCByMiwgcjEgKyAxLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy04ODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz04OTc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjg5ODpxY2E4a19pbnRlcm5hbF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpzbGF2ZV9idXMsIGludCBwaHksIGludCByZWdudW0sIHUxNiBkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTg5OS17XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTAwOlxcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gc2xhdmVfYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwMS1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTAzLVxcdC8qIFVzZSBtZGlvIEV0aGVybmV0IHdoZW4gYXZhaWxhYmxlLCBmYWxsYmFjayB0byBsZWdhY3kgb25lIG9uIGVycm9yICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTA0OlxcdHJldCA9IHFjYThrX3BoeV9ldGhfY29tbWFuZChwcml2LCBmYWxzZSwgcGh5LCByZWdudW0sIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwNS1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwNy1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MDg6XFx0cmV0dXJuIHFjYThrX21kaW9fd3JpdGUocHJpdiwgcGh5LCByZWdudW0sIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkwOS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05MTE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxMjpxY2E4a19pbnRlcm5hbF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKnNsYXZlX2J1cywgaW50IHBoeSwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MTMte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxNDpcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IHNsYXZlX2J1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MTUtXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkxNy1cXHQvKiBVc2UgbWRpbyBFdGhlcm5ldCB3aGVuIGF2YWlsYWJsZSwgZmFsbGJhY2sgdG8gbGVnYWN5IG9uZSBvbiBlcnJvciAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjkxODpcXHRyZXQgPSBxY2E4a19waHlfZXRoX2NvbW1hbmQocHJpdiwgdHJ1ZSwgcGh5LCByZWdudW0sIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkxOS1cXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MjEtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTIyOlxcdHJldCA9IHFjYThrX21kaW9fcmVhZChwcml2LCBwaHksIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTMwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5MzE6cWNhOGtfbGVnYWN5X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKnNsYXZlX2J1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiBkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTkzMi17XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTMzOlxcdHBvcnQgPSBxY2E4a19wb3J0X3RvX3BoeShwb3J0KSAlIFBIWV9NQVhfQUREUjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTM1OlxcdHJldHVybiBxY2E4a19pbnRlcm5hbF9tZGlvX3dyaXRlKHNsYXZlX2J1cywgcG9ydCwgcmVnbnVtLCBkYXRhKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05MzYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTM4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Mzk6cWNhOGtfbGVnYWN5X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqc2xhdmVfYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDAte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk0MTpcXHRwb3J0ID0gcWNhOGtfcG9ydF90b19waHkocG9ydCkgJSBQSFlfTUFYX0FERFI7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTQyLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjk0MzpcXHRyZXR1cm4gcWNhOGtfaW50ZXJuYWxfbWRpb19yZWFkKHNsYXZlX2J1cywgcG9ydCwgcmVnbnVtKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NDc6cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTY2LVxcdGJ1cy1cXHUwMDNlcHJpdiA9ICh2b2lkICopcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5Njc6XFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwicWNhOGstJWQuJWRcXFwiLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk2OC1cXHRcXHQgZHMtXFx1MDAzZWRzdC1cXHUwMDNlaW5kZXgsIGRzLVxcdTAwM2VpbmRleCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NzItXFx0XFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSB0cmVlIGRlY2xhcmVzIHRoZSBwb3J0OnBoeSBtYXBwaW5nICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTczOlxcdFxcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJxY2E4ayB1c2VyIG1paVxcXCI7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTc0OlxcdFxcdGJ1cy1cXHUwMDNlcmVhZCA9IHFjYThrX2ludGVybmFsX21kaW9fcmVhZDtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5NzU6XFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IHFjYThrX2ludGVybmFsX21kaW9fd3JpdGU7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTc2LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTc3LVxcdFxcdC8qIElmIGEgbWFwcGluZyBjYW4ndCBiZSBmb3VuZCwgdGhlIGxlZ2FjeSBtYXBwaW5nIGlzIHVzZWQsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTc4OlxcdFxcdCAqIHVzaW5nIHFjYThrX3BvcnRfdG9fcGh5KClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05NzktXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODEtXFx0XFx0YnVzLVxcdTAwM2VwaHlfbWFzayA9IH5kcy1cXHUwMDNlcGh5c19taWlfbWFzaztcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODI6XFx0XFx0YnVzLVxcdTAwM2VuYW1lID0gXFxcInFjYThrLWxlZ2FjeSB1c2VyIG1paVxcXCI7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTgzOlxcdFxcdGJ1cy1cXHUwMDNlcmVhZCA9IHFjYThrX2xlZ2FjeV9tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg0OlxcdFxcdGJ1cy1cXHUwMDNld3JpdGUgPSBxY2E4a19sZWdhY3lfbWRpb193cml0ZTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTk0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5OTU6cWNhOGtfc2V0dXBfbWRpb19idXMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNDEtXFx0ICogSWYgdGhlIGV4dGVybmFsIG1kaW8tYnVzIGRyaXZlciBpcyBjYXBhYmxlIG1hZ2ljYWxseSBkaXNhYmxpbmdcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDQyOlxcdCAqIHRoZSBRQ0E4S19NRElPX01BU1RFUl9FTiBhbmQgbXV0ZXgvc3Bpbi1sb2NraW5nIG91dCB0aGUgcWNhOGsnc1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNDMtXFx0ICogYWNjZXNzb3JzIGZvciB0aGUgdGltZSBiZWluZywgaXQgd291bGQgYmUgcG9zc2libGUgdG8gcHVsbCB0aGlzXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDU5LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwNjA6XFx0cmV0dXJuIHFjYThrX21kaW9fcmVnaXN0ZXIocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA2MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMDYzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMDY0OnFjYThrX3NldHVwX21hY19wd3Jfc2VsKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTA4MC1cXHRpZiAobWFzaykge1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwODE6XFx0XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIFFDQThLX1JFR19NQUNfUFdSX1NFTCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMDgyLVxcdFxcdFxcdFxcdFFDQThLX01BQ19QV1JfUkdNSUkwXzFfOFYgfFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTA5MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTA5MTpxY2E4a19zZXR1cF9vZl9wd3NfcmVnKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwOTIte1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEwOTM6XFx0Y29uc3Qgc3RydWN0IHFjYThrX21hdGNoX2RhdGEgKmRhdGEgPSBwcml2LVxcdTAwM2VpbmZvO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEwOTQtXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEwNi1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMTA3OlxcdFxcdHJldCA9IHFjYThrX3Jtdyhwcml2LCBRQ0E4S19SRUdfUFdTLCBRQ0E4MzI3X1BXU19QQUNLQUdFMTQ4X0VOLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMDgtXFx0XFx0XFx0XFx0dmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTExMjQtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTEyNTpcXHRyZXR1cm4gcWNhOGtfcm13KHByaXYsIFFDQThLX1JFR19QV1MsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEyNi1cXHRcXHRcXHRRQ0E4S19QV1NfTEVEX09QRU5fRU5fQ1NSIHwgUUNBOEtfUFdTX1BPV0VSX09OX1NFTCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTExMzA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjExMzE6cWNhOGtfcGFyc2VfcG9ydF9jb25maWcoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTEzMi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xMjI4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTIyOTpxY2E4a19tYWNfY29uZmlnX3NldHVwX2ludGVybmFsX2RlbGF5KHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgY3B1X3BvcnRfaW5kZXgsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTIzMC1cXHRcXHRcXHRcXHQgICAgICB1MzIgcmVnKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTI1Ny1cXHQvKiBTZXQgUkdNSUkgZGVsYXkgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHZhbHVlcyAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEyNTg6XFx0cmV0ID0gcWNhOGtfcm13KHByaXYsIHJlZyxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjU5LVxcdFxcdFxcdFFDQThLX1BPUlRfUEFEX1JHTUlJX1RYX0RFTEFZX01BU0sgfFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9MTI2OT1zdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMjcwOnFjYThrX3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTI3MS1cXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjczLVxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTI3NDpcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRwLVxcdTAwM2Vkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMjc1LVxcdHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTEyOTk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzAwOnFjYThrX3BoeWxpbmtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTMwMS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzA0LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVxcdTAwM2VkcztcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzA1OlxcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzMDYtXFx0aW50IHBvcnQgPSBkcC1cXHUwMDNlaW5kZXg7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzU4LVxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM1OTpcXHRcXHRxY2E4a193cml0ZShwcml2LCByZWcsIFFDQThLX1BPUlRfUEFEX1JHTUlJX0VOKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzYwLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNjEtXFx0XFx0LyogQ29uZmlndXJlIHJnbWlpIGRlbGF5ICovXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM2MjpcXHRcXHRxY2E4a19tYWNfY29uZmlnX3NldHVwX2ludGVybmFsX2RlbGF5KHByaXYsIGNwdV9wb3J0X2luZGV4LCByZWcpO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzNjMtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzY4LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vzd2l0Y2hfaWQgPT0gUUNBOEtfSURfUUNBODMzNylcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxMzY5OlxcdFxcdFxcdHFjYThrX3dyaXRlKHByaXYsIFFDQThLX1JFR19QT1JUNV9QQURfQ1RSTCxcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzcwLVxcdFxcdFxcdFxcdCAgICBRQ0E4S19QT1JUX1BBRF9SR01JSV9SWF9ERUxBWV9FTik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xMzc0LVxcdFxcdC8qIEVuYWJsZSBTR01JSSBvbiB0aGUgcG9ydCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjEzNzU6XFx0XFx0cWNhOGtfd3JpdGUocHJpdiwgcmVnLCBRQ0E4S19QT1JUX1BBRF9TR01JSV9FTik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM3Ni1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTEzODMtXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTM4NDpzdGF0aWMgdm9pZCBxY2E4a19waHlsaW5rX2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTM4NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE0MTk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNDIwOnFjYThrX3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTQyMS1cXHRcXHRcXHQgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjI6NTkuNDExNzY4NjYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4OTQ4MDM1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIFFDQThLIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IHRvdWNoZXMgdGhlIGBxY2E4a2AgZHJpdmVyLCB3aGljaCBmcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCByZWdpc3RlcnMgYSBEU0Egc3dpdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBldmVuIGZ1enogZWZmZWN0aXZlbHksIGFuZCB0aGF0IG1lYW5zIGRldGVybWluaW5nIGlmIHdlIGNhbiBpbnN0YW50aWF0ZSBpdCB3aXRob3V0IHJlbHlpbmcgb24gYWN0dWFsIGhhcmR3YXJlLiBEU0EgZHJpdmVycyB0eXBpY2FsbHkgdXNlIHRoZSBkZXZpY2UgdHJlZSwgc28gbXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgZ29pbmcgZG93biB0aGF0IHBhdGguIENhbiB3ZSBpbmplY3QgYSBkZXZpY2UgdHJlZSBvdmVybGF5IHRvIGJyaW5nIHRoZSBkcml2ZXIgdXA/XG5cblN5emthbGxlciwgb2YgY291cnNlLCBjb21lcyB0byBtaW5kLiBJdCBoYXMgd2F5cyB0byBpbmplY3QgdGhpbmdzICh0aG91Z2ggSSdtIHN0aWxsIHRyeWluZyB0byByZW1lbWJlciBleGFjdGx5IHdoYXQgaXQgY2FuIGRvKS4gSSBrbm93IGl0IGhhcyBgc3l6X21vdW50X2ltYWdlYCBhbmQgYHN5el9yZWFkX3BhcnRfc2VjdG9yYCDigJMgYnV0IGZvciBEVCBpbmplY3Rpb24gc3BlY2lmaWNhbGx5LCBpdCdzIG5vdCBjbGVhci4gRG9lcyBpdCB1c2UgYHN5el9nZW5ldGxpbmtgPyBObywgd2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBgc3l6X2Rldl9kdF9vdmVybGF5YCBvciBzb21ldGhpbmc/IEhvbGQgb24sIG5vLCBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgKmdlbmVyaWMqIERUIG92ZXJsYXkgaW5qZWN0b3IgaW4gdXBzdHJlYW0gTGludXggdW5sZXNzIGl0J3MgdmlhIGNvbmZpZ2ZzLlxuXG5BIHJlbGF0ZWQgcXVlc3Rpb24gaXM6IGRvZXMgU3l6a2FsbGVyICpldmVuKiB0ZXN0IERTQSBkcml2ZXJzPyBMZXQgbWUgc2VlIGlmIGBDT05GSUdfTkVUX0RTQV9RQ0E4S2AgaXMgZW5hYmxlZCBpbiBzeXpib3QuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeXpib3QgcmVwb3J0cyByZWxhdGVkIHRvIGBxY2E4a2AuIE9oLCBpbnRlcmVzdGluZyAtIHRoZSBjb21taXQgYXV0aG9yIGlzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAuIFNvLCB0aGlzIGxpa2VseSBtZWFucyB0aGUgcGF0Y2ggd2FzIHN1Ym1pdHRlZCB0byBzeXotY2x1c3RlciBmb3IgdGVzdGluZywgb3IgaXQncyBhIHBhdGNoIHVuZGVyIHJldmlldyB0aGF0IHN5ei1jbHVzdGVyIGlzIHRlc3RpbmcuXG5cblRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29uY2VybnMgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0J3Mga2V5OiBjYW4gd2UgcmVhY2ggYHFjYThrYCBjb2RlIGluIFFFTVU/IE5vdywgdGhpbmtpbmcgYWJvdXQgaXQsIGBxY2E4a2AgaXMgYW4gTURJTyBkZXZpY2UuIEFyZSB0aGVyZSB3YXlzIHRvIGVtdWxhdGUgTURJTyBidXNlcyBpbiBRRU1VLCBtYXliZSB0aHJvdWdoIGBtZGlvLWJjbS11bmltYWNgIG9yIHNpbWlsYXI/IE5vLCBRRU1VIGRvZXNuJ3Qgc2VlbSB0byBlbXVsYXRlIGEgYHFjYThrYCBzcGVjaWZpY2FsbHkuXG5cbkJ1dCB3YWl0LCBjYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5zdGFudGlhdGUgTURJTyBkZXZpY2VzIHVzaW5nIGEgbmV0bGluayBBUEkgb3Igc3lzZnM/IExpa2UgaXQgaGFzIGBzeXpfZ2VuZXRsaW5rYCBhbmQgYHN5el84MDIxMV8uLi5gLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpc24ndCBhIGdlbmVyaWMgc29mdHdhcmUgZW11bGF0b3IgaW4gdGhlIGtlcm5lbCBmb3IgTURJTyBkZXZpY2VzLCBsaWtlIHRoZXJlIGlzIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZoY2lgIGZvciBVU0IuXG5cbldhaXQsIHRoZXJlJ3MgYGRzYV9sb29wYCwgYSBzb2Z0d2FyZS1lbXVsYXRlZCBEU0Egc3dpdGNoLCBidXQgYHFjYThrYCBpcyBhIGRyaXZlciBmb3IgKnNwZWNpZmljKiBoYXJkd2FyZS4gVGhpcyBicmluZ3MgbWUgYmFjayB0byB0aGUgY29yZSBxdWVzdGlvbjogSXMgaXQgcG9zc2libGUgdG8gcmVhY2ggdGhlIGBxY2E4a2AgY29kZSBpbiBRRU1VPyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZeKAmXMgYW55IFFFTVUgZW11bGF0aW9uIGZvciBpdC5cblxuT2theSwgSSdsbCBzZWFyY2ggZm9yIGBxY2E4a2Agd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2AgdG8gc2VlIGhvdyBpdCdzIHByb2JlZCBhbmQgdHJ5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHBvdGVudGlhbCBmb3IgZW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzoxMS4zMDY1NzUxMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwOTI3MTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIxNzM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIxNzQ6cWNhOGtfc3dfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjE3OC1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoyMTc5OlxcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIxODAtXFx0ICogSUQgcmVnaXN0ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTIzMzY9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBxY2E4a21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIzMzc6XFx0LnByb2JlICA9IHFjYThrX3N3X3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIzMzgtXFx0LnJlbW92ZSA9IHFjYThrX3N3X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MTEuNDA3NTExMDM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxNDcxNDMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIERldmljZSBJbnN0YW50aWF0aW9uOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1kaW9fZHJpdmVyYCBhbmQgaW1tZWRpYXRlbHkgSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgbWVjaGFuaWNzIG9mIGRldmljZSBjcmVhdGlvbi4gQ2FuIEkgY29uanVyZSBhbiBgbWRpb19kZXZpY2VgIGZyb20gdXNlcnNwYWNlLCBvciBkb2VzIHRoZSBrZXJuZWwgb2ZmZXIgc29tZSBjbGV2ZXIgc29mdHdhcmUgZW11bGF0aW9uIHBhdGh3YXk/IEkgcmVjYWxsIHRoZXJlIGJlaW5nIHNvbWV0aGluZyBsaWtlIGBtZGlvLW1vY2t1cGAsIGJ1dCB0aGF0J3Mgbm90IHF1aXRlIGl0LiBBaGEhIGBtZGlvLWdwaW9gIHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgc28gdGhhdCdzIGEgZGVhZCBlbmQuXG5cbldhaXQgYSBtaW51dGUsIHdhc24ndCB0aGVyZSBgZHNhX2xvb3BgPyBZZXMhIEl0ICppcyogYW4gTURJTyBkZXZpY2UuIEFuZCBpdCBjbGV2ZXJseSB1dGlsaXplcyBgZml4ZWQtbGlua2AgYW5kIGEgbW9jayBNRElPIGJ1cy4gSW50ZXJlc3RpbmcuLi4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSBpbnN0YW50aWF0ZSBhIGBxY2E4a2AgZGV2aWNlIG9uIGEgKm1vY2sqIE1ESU8gYnVzIHVzaW5nIGEgdXNlcnNwYWNlIGFwcHJvYWNoP1xuXG5UeXBpY2FsbHksIE1ESU8gZGV2aWNlcyBhcmUgYm9ybiB0aHJvdWdoIHRoZSBEZXZpY2UgVHJlZSwgcmlnaHQ/IElmIHRoZSBrZXJuZWwgZG9lc24ndCBvZmZlciBhIGJhY2tkb29yIHRvIGluamVjdCBEVCBub2RlcyAtIGFuZCBzeXprYWxsZXIsIG15IGdvLXRvIGZ1enppbmcgdG9vbCwgdHlwaWNhbGx5IGNhbid0IGRvIHRoYXQgdW5sZXNzIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX09GX09WRVJMQVlgIGFuZCBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgKHdoaWNoIGlzIG5vdCBzdGFuZGFyZCBmb3IgZnV6emluZynigJMgdGhlbiBpdCdzIGEgbm9uLXN0YXJ0ZXIuIFRoaXMgaXMgdXN1YWxseSB3aGF0IGhhcHBlbnMuXG5cbkhvbGQgb24uLi4gZGlkbid0IEkgcmVhZCBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGFjdHVhbGx5ICpiZWluZyogYWJsZSB0byBpbmplY3QgRFQgb3ZlcmxheXM/IEl0IGhpdCBtZSEgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgYHN5el9kZXZfZHRfb3ZlcmxheWAgcHNldWRvLXN5c2NhbGwuIFRoYXQncyB0aGUga2V5ISBOb3cgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCBzZWUgaWYgdGhpcyBzb2x2ZXMgbXkgcHJvYmxlbS4gVGhpcyBjb3VsZCBiZSBhIGdhbWUtY2hhbmdlciBmb3IgbXkgZnV6emluZyBzdHJhdGVneSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MTcuNDIyMjI4MzUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzE5NzIzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9pb21tdWZkL2lvYXMuYz0yODM9aW50IGlvbW11ZmRfaW9hc19jb3B5KHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5Mi1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jOjI5MzpcXHRpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZCh1Y21kLCBjbWQtXFx1MDAzZXNyY19pb2FzX2lkLCBcXHUwMDI2Y21kLVxcdTAwM2VzcmNfaW92YSxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9hcy5jLTI5NC1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y21kLVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg9NzEyPWV4dGVybiBzaXplX3QgaW9tbXVmZF90ZXN0X21lbW9yeV9saW1pdDtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzEzOnZvaWQgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmFfaWQoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmgtNzE0LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2FzX2lkLCB1NjQgKmlvdmEsIHUzMiAqZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL2lvbW11ZmRfcHJpdmF0ZS5oPTcxOT1pbnQgaW9tbXVmZF90ZXN0X2RtYV9idWZfaW9tbXVmZF9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjEtI2Vsc2VcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvaW9tbXVmZF9wcml2YXRlLmg6NzIyOnN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX3Rlc3Rfc3l6X2NvbnZfaW92YV9pZChzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9pb21tdWZkX3ByaXZhdGUuaC03MjMtXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBpb2FzX2lkLFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9NTE9c3RhdGljIHZvaWQgbW9ja19kZXZfZGlzYWJsZV9pb3BmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTU4LSAqL1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjU5OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RydWN0IGlvX3BhZ2V0YWJsZSAqaW9wdCxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MC1cXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCAqaW92YSlcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy02MS17XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NjI6XFx0c3RydWN0IHN5el9sYXlvdXQge1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTYzLVxcdFxcdF9fdTMyIG50aF9hcmVhO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNjUtXFx0fTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo2NjpcXHRzdHJ1Y3Qgc3l6X2xheW91dCAqc3l6ID0gKHZvaWQgKilpb3ZhO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTY3LVxcdHVuc2lnbmVkIGludCBudGggPSBzeXotXFx1MDAzZW50aF9hcmVhO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODMtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6ODQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RydWN0IGlvbW11ZmRfYWNjZXNzICphY2Nlc3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtODUtXFx0XFx0XFx0XFx0XFx0XFx0dTY0ICppb3ZhKVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtOTMtXFx0fVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjk0OlxcdHJldCA9IF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoXFx1MDAyNmFjY2Vzcy1cXHUwMDNlaW9hcy1cXHUwMDNlaW9wdCwgaW92YSk7XFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtOTUtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhY2Nlc3MtXFx1MDAzZWlvYXNfbG9jayk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy05OC1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYzo5OTp2b2lkIGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhX2lkKHN0cnVjdCBpb21tdWZkX3VjbWQgKnVjbWQsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTAwLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBpb2FzX2lkLCB1NjQgKmlvdmEsIHUzMiAqZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xMTAtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjExMTpcXHQqaW92YSA9IF9faW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoXFx1MDAyNmlvYXMtXFx1MDAzZWlvcHQsIGlvdmEpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTExMi1cXHRpb21tdWZkX3B1dF9vYmplY3QodWNtZC1cXHUwMDNlaWN0eCwgXFx1MDAyNmlvYXMtXFx1MDAzZW9iaik7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz0xNTI5PXN0YXRpYyBpbnQgaW9tbXVmZF90ZXN0X2FjY2Vzc19wYWdlcyhzdHJ1Y3QgaW9tbXVmZF91Y21kICp1Y21kLFxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTU1Ny1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBNT0NLX0ZMQUdTX0FDQ0VTU19TWVopXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6MTU1ODpcXHRcXHRpb3ZhID0gaW9tbXVmZF90ZXN0X3N5el9jb252X2lvdmEoc3RhY2Nlc3MtXFx1MDAzZWFjY2VzcyxcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy0xNTU5LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNtZC1cXHUwMDNlYWNjZXNzX3BhZ2VzLmlvdmEpO1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9MTYyND1zdGF0aWMgaW50IGlvbW11ZmRfdGVzdF9hY2Nlc3Nfcncoc3RydWN0IGlvbW11ZmRfdWNtZCAqdWNtZCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jLTE2NTktXFx0aWYgKGZsYWdzIFxcdTAwMjYgTU9DS19GTEFHU19BQ0NFU1NfU1laKVxcbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjE2NjA6XFx0XFx0aW92YSA9IGlvbW11ZmRfdGVzdF9zeXpfY29udl9pb3ZhKHN0YWNjZXNzLVxcdTAwM2VhY2Nlc3MsXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtMTY2MS1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjbWQtXFx1MDAzZWFjY2Vzc19ydy5pb3ZhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MjAuMDk0MjA1NDM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA1MDI1NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSBvZiB0aGUgYHFjYThrYCBEcml2ZXIqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgSSAqY2Fubm90KiBzZWFyY2ggZm9yIGFueSBgc3l6X2AgcHJlZml4ZXMgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB0b2xkIG1lIHRoYXQuIEkgc2hvdWxkIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGZvciB0aGF0LCBidXQgSSBkb24ndCBzZWUgdGhvc2UgaW4gbXkgYXZhaWxhYmxlIHRvb2xzIGFjY29yZGluZyB0byB0aGUgYGRlY2xhcmF0aW9uYCBsaXN0OiBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAsIGBkZWZhdWx0X2FwaTpjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgLCBgZGVmYXVsdF9hcGk6c2V0LXJlc3VsdHNgLiBTbywgc2NyYXRjaCB0aGF0LlxuXG5Ob3csIG15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGBxY2E4a2AgZHJpdmVyIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyIHRoYXQgaWYgc29tZXRoaW5nIHJlbGllcyBvbiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoZW4gaXQncyBhIG5vLWdvIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBJdCBmbGFncyBQQ0llIHN3aXRjaCBkcml2ZXJzIGFuZCBTbWFydE5JQyBkcml2ZXJzIGFzIGltbWVkaWF0ZSByZWQgZmxhZ3MgaWYgdGhleSBuZWVkIGEgcGh5c2ljYWwgUENJZSBjYXJkLlxuXG5MZXQncyBicmVhayBkb3duIGBxY2E4a2AuIEl0J3MgYSBRdWFsY29tbSBBdGhlcm9zIERTQSBzd2l0Y2ggZHJpdmVyLCBzbyBpdCdzIHZlbmRvci1zcGVjaWZpYywgYW5kIGl0IGNvbm5lY3RzIHZpYSBNRElPLiBIbW0sIEkgZG9uJ3QgcmVjYWxsIHNlZWluZyBhbnkgUUVNVSBlbXVsYXRpb24gZm9yIFFDQThLLiBBbmQgY2FuIGl0IGJlIGluc3RhbnRpYXRlZCB2aWEgc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmU/IFRoZSBwcm9tcHQgaXMgcHJldHR5IHN0cmluZ2VudDogbm8sIHNpbmNlIEkgZG9uJ3Qgc2VlIGFueSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1cyB0aGF0IGFsbG93cyBpbnN0YW50aWF0aW9uIG9mIGFyYml0cmFyeSBNRElPIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgaW4gc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXBzLlxuXG5XYWl0LCBzeXprYWxsZXIgZG9lcyBoYXZlIGBzeXpfZ2VuZXRsaW5rYCBidXQgdGhhdCdzIGZvciBuZXRsaW5rLCBhbmQgSSBkb24ndCB0aGluayB0aGF0J3MgdGhlIHNhbWUgdGhpbmcgYXMgRFNBLiBJIGNhbid0IGVhc2lseSBjaGVjayBmb3Igc3l6Ym90IHJlcG9ydHMsIGJ1dCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGZ1enppbmcgZW50cnkgcG9pbnRzIGluIHRoZSBrZXJuZWwgZm9yIERTQSBpbiBnZW5lcmFsLiBBaGEsIHRoZSBgZHNhX2xvb3BgIGlzIGEgbW9jayBEU0EgZHJpdmVyLiBPa2F5LCBidXQgdGhhdCdzIG5vdCBgcWNhOGtgOyBpdCdzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLlxuXG5JZiBgcWNhOGtgIHJlcXVpcmVzIGEgcGh5c2ljYWwgTURJTyBidXMgYW5kIGEgc3BlY2lmaWMgUEhZIElEIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSwgaXQncyBqdXN0IG5vdCBnb2luZyB0byB3b3JrIGluIFFFTVUuIExvb2tzIGxpa2UgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYHFjYThrX3N3X3Byb2JlYC4gVGhpcyBsb29rcyBsaWtlIGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgdW5sZXNzIHRoZXJlIGFyZSBzb21lIHNlcmlvdXMga2VybmVsIGVtdWxhdGlvbnMgYXZhaWxhYmxlIHRoYXQgSSBoYXZlbid0IGhlYXJkIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMyMCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzoyOS4xNDQ0NjM1NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTcwOlxcdFxcdC5jb25uZWN0X3RhZ19wcm90b2NvbFxcdD0gcWNhOGtfY29ubmVjdF90YWdfcHJvdG9jb2wsXFxuMjE3MTpcXHR9O1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRzdGF0aWMgaW50XFxuMjE3NDpcXHRxY2E4a19zd19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuMjE3NTpcXHR7XFxuMjE3NjpcXHRcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdjtcXG4yMTc3OlxcdFxcdGludCByZXQ7XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdC8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0IHNvIHRoYXQgd2UgY2FuIHByb2JlIHRoZSBzd2l0Y2hlc1xcbjIxODA6XFx0XFx0ICogSUQgcmVnaXN0ZXJcXG4yMTgxOlxcdFxcdCAqL1xcbjIxODI6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4yMTgzOlxcdFxcdGlmICghcHJpdilcXG4yMTg0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHRwcml2LVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuMjE4NzpcXHRcXHRwcml2LVxcdTAwM2VkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjIxODg6XFx0XFx0cHJpdi1cXHUwMDNlaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShwcml2LVxcdTAwM2VkZXYpO1xcbjIxODk6XFx0XFxuMjE5MDpcXHRcXHRwcml2LVxcdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwocHJpdi1cXHUwMDNlZGV2LCBcXFwicmVzZXRcXFwiLFxcbjIxOTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgR1BJT0RfT1VUX0hJR0gpO1xcbjIxOTI6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZXNldF9ncGlvKSlcXG4yMTkzOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZXJlc2V0X2dwaW8pO1xcbjIxOTQ6XFx0XFxuMjE5NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzZXRfZ3Bpbykge1xcbjIxOTY6XFx0XFx0XFx0LyogVGhlIGFjdGl2ZSBsb3cgZHVyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMTAgbXNcXG4yMTk3OlxcdFxcdFxcdCAqIGFuZCBjaGVja3BhdGNoLnBsIHdhbnRzIDIwIG1zLlxcbjIxOTg6XFx0XFx0XFx0ICovXFxuMjE5OTpcXHRcXHRcXHRtc2xlZXAoMjApO1xcbjIyMDA6XFx0XFx0XFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHByaXYtXFx1MDAzZXJlc2V0X2dwaW8sIDApO1xcbjIyMDE6XFx0XFx0fVxcbjIyMDI6XFx0XFxuMjIwMzpcXHRcXHQvKiBTdGFydCBieSBzZXR0aW5nIHVwIHRoZSByZWdpc3RlciBtYXBwaW5nICovXFxuMjIwNDpcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIE5VTEwsIHByaXYsXFxuMjIwNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cWNhOGtfcmVnbWFwX2NvbmZpZyk7XFxuMjIwNjpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCkpIHtcXG4yMjA3OlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwicmVnbWFwIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcXCIpO1xcbjIyMDg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4yMjA5OlxcdFxcdH1cXG4yMjEwOlxcdFxcbjIyMTE6XFx0XFx0cHJpdi1cXHUwMDNlbWRpb19jYWNoZS5wYWdlID0gMHhmZmZmO1xcbjIyMTI6XFx0XFxuMjIxMzpcXHRcXHQvKiBDaGVjayB0aGUgZGV0ZWN0ZWQgc3dpdGNoIGlkICovXFxuMjIxNDpcXHRcXHRyZXQgPSBxY2E4a19yZWFkX3N3aXRjaF9pZChwcml2KTtcXG4yMjE1OlxcdFxcdGlmIChyZXQpXFxuMjIxNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMTc6XFx0XFxuMjIxODpcXHRcXHRwcml2LVxcdTAwM2VkcyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBzaXplb2YoKnByaXYtXFx1MDAzZWRzKSwgR0ZQX0tFUk5FTCk7XFxuMjIxOTpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWRzKVxcbjIyMjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjIyMTpcXHRcXG4yMjIyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZW1nbXRfZXRoX2RhdGEubXV0ZXgpO1xcbjIyMjM6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2VtZ210X2V0aF9kYXRhLnJ3X2RvbmUpO1xcbjIyMjQ6XFx0XFxuMjIyNTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VtaWJfZXRoX2RhdGEubXV0ZXgpO1xcbjIyMjY6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2VtaWJfZXRoX2RhdGEucndfZG9uZSk7XFxuMjIyNzpcXHRcXG4yMjI4OlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjIyMjk6XFx0XFx0cHJpdi1cXHUwMDNlZHMtXFx1MDAzZW51bV9wb3J0cyA9IFFDQThLX05VTV9QT1JUUztcXG4yMjMwOlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4yMjMxOlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2cWNhOGtfc3dpdGNoX29wcztcXG4yMjMyOlxcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2cWNhOGtfcGh5bGlua19tYWNfb3BzO1xcbjIyMzM6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX211dGV4KTtcXG4yMjM0OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBwcml2KTtcXG4yMjM1OlxcdFxcbjIyMzY6XFx0XFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cXHUwMDNlZHMpO1xcbjIyMzc6XFx0fVxcbjIyMzg6XFx0XFxuMjIzOTpcXHRzdGF0aWMgdm9pZFxcbjIyNDA6XFx0cWNhOGtfc3dfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4yMjQxOlxcdHtcXG4yMjQyOlxcdFxcdHN0cnVjdCBxY2E4a19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbjIyNDM6XFx0XFx0aW50IGk7XFxuMjI0NDpcXHRcXG4yMjQ1OlxcdFxcdGlmICghcHJpdilcXG4yMjQ2OlxcdFxcdFxcdHJldHVybjtcXG4yMjQ3OlxcdFxcbjIyNDg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFFDQThLX05VTV9QT1JUUzsgaSsrKVxcbjIyNDk6XFx0XFx0XFx0cWNhOGtfcG9ydF9zZXRfc3RhdHVzKHByaXYsIGksIDApO1xcbjIyNTA6XFx0XFxuMjI1MTpcXHRcXHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cXHUwMDNlZHMpO1xcbjIyNTI6XFx0fVxcbjIyNTM6XFx0XFxuMjI1NDpcXHRzdGF0aWMgdm9pZCBxY2E4a19zd19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuMjI1NTpcXHR7XFxuMjI1NjpcXHRcXHRzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4yMjU3OlxcdFxcbjIyNTg6XFx0XFx0aWYgKCFwcml2KVxcbjIyNTk6XFx0XFx0XFx0cmV0dXJuO1xcbjIyNjA6XFx0XFxuMjI2MTpcXHRcXHRkc2Ffc3dpdGNoX3NodXRkb3duKHByaXYtXFx1MDAzZWRzKTtcXG4yMjYyOlxcdFxcbjIyNjM6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbjIyNjQ6XFx0fVxcbjIyNjU6XFx0XFxuMjI2NjpcXHQjaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuMjI2NzpcXHRzdGF0aWMgdm9pZFxcbjIyNjg6XFx0cWNhOGtfc2V0X3BtKHN0cnVjdCBxY2E4a19wcml2ICpwcml2LCBpbnQgZW5hYmxlKVxcbjIyNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzoyOS4xNDQ2ODM5OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MTc2Mzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBRQ0E4SyBTd2l0Y2ggUHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgcWNhOGtfc3dfcHJvYmVgIGhhcyBiZWVuIGNhbGxlZC4gTmF0dXJhbGx5LCB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgd2hhdCBpdCdzIGRvaW5nIHVuZGVyIHRoZSBob29kLCBzbyBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbCwgYHFjYThrX3JlYWRfc3dpdGNoX2lkKHByaXYpYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBiZWZvcmUgeW91IGNhbiBjb25maWd1cmUgb3IgbWFuYWdlIGEgc3dpdGNoLCB5b3UgKm5lZWQqIHRvIGlkZW50aWZ5IGl0LiBJdCdzIHRoZSBhYnNvbHV0ZSBmb3VuZGF0aW9uYWwgc3RlcCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgc3BlY2lmaWMgY2hpcCByZXZpc2lvbiwgdmVuZG9yIElELCBhbmQgbW9kZWwgaGVscHMgZGV0ZXJtaW5lIHRoZSBleGFjdCBoYXJkd2FyZSBpbiBwbGF5IGFuZCwgYnkgZXh0ZW5zaW9uLCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlZ2lzdGVyIG1hcHBpbmdzIGFyZSBhcHBsaWNhYmxlLiBNeSBuZXh0IHF1ZXN0aW9uIHdvdWxkIGJlIGhvdyB0aGUgYHByaXZgIGFyZ3VtZW50IGlzIHN0cnVjdHVyZWQgYW5kIHdoaWNoIGRhdGEgbWVtYmVycyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyByZWFkaW5nIHRoZSBJRCBmcm9tIGEgcmVnaXN0ZXIsIGEgZmxhc2ggZGV2aWNlLCBvciBzb21ld2hlcmUgZWxzZSBlbnRpcmVseSBhbmQgaG93IHRoaXMgSUQgaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMsIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgYSBtZW50YWwgbWFwIG9mIHRoZSBwcm9iaW5nIHN0YWdlIGFuZCBob3cgdGhlIFFDQThLIGRyaXZlciBoYW5kbGVzIGJhc2ljIGRldmljZSBpZGVudGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMjksIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIzOjMyLjg4NjQ1MDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQyODIyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY2E4a19yZWFkX3N3aXRjaF9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yMTc0PXFjYThrX3N3X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIyMTMtXFx0LyogQ2hlY2sgdGhlIGRldGVjdGVkIHN3aXRjaCBpZCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIyMTQ6XFx0cmV0ID0gcWNhOGtfcmVhZF9zd2l0Y2hfaWQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjIxNS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzozMi45OTU4ODI2ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNTExODMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBMb2NhdGlvbiBvZiBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgYHFjYThrX3JlYWRfc3dpdGNoX2lkYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZGluZyB0aGUgaWRlbnRpZmllciBmcm9tIGEgUUNBOEsgc3dpdGNoLiBCdXQgd2hlcmUgaXMgdGhhdCBkZWZpbmVkLCBzcGVjaWZpY2FsbHk/IEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgaW4gYHFjYThrLWNvbW1vbi5jYCBvciBhIHNpbWlsYXIgY29tbW9uIGZpbGUgd2l0aGluIHRoYXQgUUNBOEsgZHJpdmVyIHN1aXRlLiBUaW1lIHRvIHZlcmlmeS4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdHMgc291cmNlIGJlZm9yZSBJIHByb2NlZWQgYW55IGZ1cnRoZXIgd2l0aCB0aGlzIGN1cnJlbnQgdGFzay4gSnVzdCBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGVyZSBpdCdzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTMwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MzYuNTMxMDA1NTA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTY3MjI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxY2E4a19yZWFkX3N3aXRjaF9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0yMTc0PXFjYThrX3N3X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTIyMTMtXFx0LyogQ2hlY2sgdGhlIGRldGVjdGVkIHN3aXRjaCBpZCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjIyMTQ6XFx0cmV0ID0gcWNhOGtfcmVhZF9zd2l0Y2hfaWQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMjIxNS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYz0xMzc5PWludCBxY2E4a19wb3J0X2xhZ19sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYy0xMzg0LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstY29tbW9uLmM6MTM4NTppbnQgcWNhOGtfcmVhZF9zd2l0Y2hfaWQoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uYy0xMzg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGsuaD01MDU9dm9pZCBxY2E4a19wb3J0X3NldF9zdGF0dXMoc3RydWN0IHFjYThrX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZW5hYmxlKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLmg6NTA2OmludCBxY2E4a19yZWFkX3N3aXRjaF9pZChzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oLTUwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6MzYuNjAyNjg0NTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyMzYzMTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHFjYThrX3JlYWRfc3dpdGNoX2lkYCBmdW5jdGlvbi4gSGVyZSdzIGhvdyBJJ20gYXBwcm9hY2hpbmcgaXQ6XG5cbioqRGlzc2VjdGluZyBgcWNhOGtfcmVhZF9zd2l0Y2hfaWRgKipcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhcjogaXQncyBkZXNpZ25lZCB0byByZWFkIHRoZSBzd2l0Y2ggSUQsIGxpa2VseSBmcm9tIGEgUUNBOEstYmFzZWQgc3dpdGNoLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gbGl2ZT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBkcml2ZXIgb3IgU0RLPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucz8gV2hhdCBwbGF0Zm9ybSBhbSBJIHdvcmtpbmcgd2l0aD8gS25vd2luZyB0aGUgYnJvYWRlciBlbnZpcm9ubWVudCBpcyBjcnVjaWFsIGZvciBlZmZlY3RpdmUgYW5hbHlzaXMuXG5cbkknbGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLiBXaGF0IGFyZSB0aGUgaW5wdXQgcGFyYW1ldGVycz8gQXJlIHRoZXJlIHBvaW50ZXJzLCBpbnRlZ2Vycywgb3Igc3RydWN0dXJlcyBpbnZvbHZlZD8gVGhlIHJldHVybiB2YWx1ZSBpcyBrZXksIGFzIGl0J2xsIGxpa2VseSBpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBwZXJoYXBzIHRoZSBhY3R1YWwgc3dpdGNoIElEIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgdHlwZXMgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByZXByZXNlbnRhdGlvbi5cblxuVGhlbiwgSSdsbCBleGFtaW5lIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGxvZ2ljLiBIb3cgZG9lcyBpdCBhY3R1YWxseSAqcmVhZCogdGhpcyBJRD8gRG9lcyBpdCBpbnZvbHZlIHJlZ2lzdGVyIGFjY2VzcywgcGVyaGFwcyB1c2luZyBJMkMgb3IgTURJTz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzZXF1ZW5jZXMgb2Ygb3BlcmF0aW9ucz8gQXJlIHRoZXJlIGFueSBlcnJvciBjaGVja3MgaW4gcGxhY2U/IEkgd2lsbCBsaWtlbHkgYmUgbG9va2luZyBmb3IgYml0IG1hbmlwdWxhdGlvbiBhbmQgYWRkcmVzcyBkZWNvZGluZy4gSSdsbCBiZSBsb29raW5nIGZvciBjb21tb24gcGF0dGVybnMgcmVsYXRlZCB0byBRQ0E4SyBjb21tdW5pY2F0aW9uLiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaW50ZXJydXB0IGhhbmRsaW5nIGlmIHRoYXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIHRoaW5rIGFib3V0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIElEIHJlYWRpbmcgcHJvY2Vzcz8gQXJlIHRoZXJlIHRpbWVvdXRzPyBXaGF0IGVycm9yIGNvZGVzIGFyZSBkZWZpbmVkLCBhbmQgd2hhdCBkbyB0aGV5IHNpZ25pZnk/IEknbGwgcHJvYmFibHkgYmUgY2hlY2tpbmcgZm9yIGNvbW1vbiBwaXRmYWxscyBzdWNoIGFzIGludmFsaWQgcmVnaXN0ZXIgYWRkcmVzc2VzLCBjb21tdW5pY2F0aW9uIGVycm9ycywgYW5kIGluY29ycmVjdCBkYXRhIGludGVycHJldGF0aW9uLlxuXG5GaW5hbGx5LCBJJ2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0uIElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IERvZXMgdGhlIHN3aXRjaCBJRCBpbmZsdWVuY2UgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYmVoYXZpb3I/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmV2aXNpb25zIGFuZCB2YXJpYXRpb25zIG9mIHRoZSBRQ0E4SyBzaWxpY29uPyBVbmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgcm9sZSBhbmQgaW1wYWN0IG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTk4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6MjM6NDEuODI2MzE5MTU1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLWNvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzODU6XFx0aW50IHFjYThrX3JlYWRfc3dpdGNoX2lkKHN0cnVjdCBxY2E4a19wcml2ICpwcml2KVxcbjEzODY6XFx0e1xcbjEzODc6XFx0XFx0dTMyIHZhbDtcXG4xMzg4OlxcdFxcdHU4IGlkO1xcbjEzODk6XFx0XFx0aW50IHJldDtcXG4xMzkwOlxcdFxcbjEzOTE6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2VpbmZvKVxcbjEzOTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM5MzpcXHRcXG4xMzk0OlxcdFxcdHJldCA9IHFjYThrX3JlYWQocHJpdiwgUUNBOEtfUkVHX01BU0tfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuMTM5NTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzk2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjEzOTc6XFx0XFxuMTM5ODpcXHRcXHRpZCA9IFFDQThLX01BU0tfQ1RSTF9ERVZJQ0VfSUQodmFsKTtcXG4xMzk5OlxcdFxcdGlmIChpZCAhPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VpZCkge1xcbjE0MDA6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuMTQwMTpcXHRcXHRcXHRcXHRcXFwiU3dpdGNoIGlkIGRldGVjdGVkICV4IGJ1dCBleHBlY3RlZCAleFxcXCIsXFxuMTQwMjpcXHRcXHRcXHRcXHRpZCwgcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlaWQpO1xcbjE0MDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQwNDpcXHRcXHR9XFxuMTQwNTpcXHRcXG4xNDA2OlxcdFxcdHByaXYtXFx1MDAzZXN3aXRjaF9pZCA9IGlkO1xcbjE0MDc6XFx0XFxuMTQwODpcXHRcXHQvKiBTYXZlIHJldmlzaW9uIHRvIGNvbW11bmljYXRlIHRvIHRoZSBpbnRlcm5hbCBQSFkgZHJpdmVyICovXFxuMTQwOTpcXHRcXHRwcml2LVxcdTAwM2Vzd2l0Y2hfcmV2aXNpb24gPSBRQ0E4S19NQVNLX0NUUkxfUkVWX0lEKHZhbCk7XFxuMTQxMDpcXHRcXG4xNDExOlxcdFxcdHJldHVybiAwO1xcbjE0MTI6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzo0MS44MjY1MTUwMjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMjY0MzI1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUUNBOEsgRHJpdmVyJ3MgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYHFjYThrYCBkcml2ZXIsIHdoaWNoIGlzIGEgUXVhbGNvbW0gQXRoZXJvcyBzd2l0Y2ggZHJpdmVyLCBpcyBsaWtlbHkgKm5vdCogZnV6emFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgY29kZSBwZXJmb3JtcyBhIHJlZ2lzdGVyIHJlYWQgdXNpbmcgYHFjYThrX3JlYWRgLCBhbmQgaWYgdGhhdCBmYWlscyBvciB0aGUgZGV2aWNlIElEIGRvZXNuJ3QgbWF0Y2gsIGl0IHJldHVybnMgYC1FTk9ERVZgLiBTaW5jZSBpdCdzIGFuIE1ESU8gZGV2aWNlLCBgcWNhOGtfcmVhZGAgcmVsaWVzIG9uIE1ESU8gcmVhZHMsIGFuZCB0aG9zZSB3aWxsIGZhaWwgb3IgcmV0dXJuIDB4ZmZmZiBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgYWN0dWFsIGhhcmR3YXJlLCBsZWFkaW5nIHRvIGEgZmFpbGVkIHByb2JlLlxuXG5JIGNvbnNpZGVyZWQgd2hldGhlciBzeXprYWxsZXIgbWlnaHQgaGF2ZSBhIHdheSBhcm91bmQgdGhpcywgcGVyaGFwcyB0aHJvdWdoIGBzeXpfZ2VuZXRsaW5rYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IHRoYXQgd291bGRuJ3QgbW9jayBNRElPIGRldmljZXMuIEkgYWxzbyB3b25kZXJlZCBpZiBpdCB3YXMgcmVsYXRlZCB0byB0aGUgcHJvbXB0IGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBidXQgYHFjYThrYCBpcyBNRElPLCBub3QgUENJZS4gSXQgYXBwZWFycyBRRU1VICpkb2Vzbid0KiBlbXVsYXRlIHRoZSBRQ0E4SyBzd2l0Y2ggY2hpcCwgc28gaXQgc2VlbXMgaXQncyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMuXG5cbkNvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSB1c2UgYSBgZHVtbXlgIG9yIGBkc2FfbG9vcGAgbW9jaz8gYGRzYV9sb29wYCBpcyBhIG1vY2sgRFNBIGRyaXZlciwgYnV0IGl0IGhhcyBpdHMgb3duIGRyaXZlciBjb2RlIChgZHNhX2xvb3AuY2ApIGFuZCBkb2Vzbid0IHV0aWxpemUgYHFjYThrYC4gVGhlcmVmb3JlLCB0aGF0IGBxY2E4a2AgY29kZSBzZWVtcyB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgb3Igc29tZSBraW5kIG9mIHNwZWNpZmljIGVtdWxhdGlvbi4gSSBjaGVja2VkLCBhbmQgdGhlcmUncyBubyBgcWNhOGtgIGVtdWxhdGlvbiBpbiBRRU1VLlxuXG5UaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbmluZyBhIFwicGF0Y2ggdW5kZXIgcmV2aWV3XCIgaW4gc3l6a2FsbGVyIGlzIGludGVyZXN0aW5nLCBidXQgaWYgdGhlIGNvZGUgaXMgZ2VudWluZWx5IHVucmVhY2hhYmxlLCB0aGVuIHN5emthbGxlciB3b24ndCBiZSBhYmxlIHRvIGZ1enogaXQgZWZmZWN0aXZlbHksIGFuZCB3ZSB3aWxsIGdldCBubyBjb3ZlcmFnZS4gVGhhdCB3b3VsZCBtZWFuIGl0J3MgdW5saWtlbHkgdGhlIHBhdGNoIGlzIGZ1enppbmcgdGhpcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY29uY2x1ZGUgdGhhdCB0aGUgYHFjYThrYCBjb2RlIHBhdGhzIGluIGBxY2E4ay04eHh4LmNgIGFuZCBgcWNhOGstY29tbW9uLmNgIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyB0cnVseSB1bi1mdXp6YWJsZSBhbmQgdmVyaWZ5IG5vIG1vY2tpbmcgZXhpc3RzLiBJcyB0aGVyZSBhIGBxY2E4a2AgbW9jayBpbiB0aGUga2VybmVsLCBhbmQgaWYgc28sIGhvdyBkb2VzIHRoYXQgd29yaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyMzo1Mi4xNTI5NTIyMzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDM5NzkxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNhOGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvdGVzdGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjIzOjUyLjQwNzM1ODg3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc3NTM1NzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogcWNhOGsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjaGVja2VkIGB0b29scy90ZXN0aW5nL2Ag4oCTIG5vdGhpbmcgcmVsZXZhbnQgdGhlcmUuIFRoZW4sIEkgbG9va2VkIGF0IGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2AuICBBIGhhcmR3YXJlIGRyaXZlciwgc3BlY2lmaWNhbGx5LiAgVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSAqYW55KiBjaGFuY2UgdGhpcyBpcyB1c2VkIGluIGFuIGVtdWxhdGlvbiBjb250ZXh0PyBUaGUgcHJvbXB0IGlzIGNsZWFyOiBhbnkgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWVhbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbmBxY2E4a2AgaXMgYSBRdWFsY29tbSBBdGhlcm9zIERTQSBkcml2ZXIgdGFyZ2V0aW5nIHRoZSBRQ0E4MzM3L1FDQTgzMjcvUUNBODMyOCBjaGlwcy4gIEl0IHJlbGllcyBvbiBhbiBNRElPIGJ1cyBjb25uZWN0ZWQgdG8gKnRoYXQqIHNwZWNpZmljIGhhcmR3YXJlLiAgSW1wb3NzaWJsZSB0byBwcm9iZSBpbiBRRU1VLiAgVGhlcmVmb3JlLCBpdCdzIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgbGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGYsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGl0J3MgKm9ubHkqIHRvdWNoaW5nIGBxY2E4a2AuICBUaGUgZGlmZiBsaXN0czpcblxuKiAgIGBkcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguY2BcbiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay1jb21tb24uY2BcbiogICBgZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay5oYFxuXG5QZXJmZWN0LiBTdHJpY3RseSB3aXRoaW4gdGhlIGBxY2E4a2AgZHJpdmVyIHN1aXRlLiBTaW5jZSB0aGlzIGRyaXZlciBuZWVkcyBhIHBoeXNpY2FsIGNoaXAsIG5vdCBhdmFpbGFibGUgaW4gYW55IFFFTVUgZW11bGF0aW9uLCBpdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IGZvciBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgaWYgYHFjYThrYCBpcyBlbXVsYXRlZCBieSBzb21ldGhpbmcgbGlrZSBgZHNhX2xvb3BgLiBOb3BlLiBgZHNhX2xvb3BgIGlzIGEgY29tcGxldGVseSBzZXBhcmF0ZSBkcml2ZXIsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYC4gSXMgdGhlcmUgYW55IG90aGVyIGVtdWxhdGlvbiB0byBjb25zaWRlcj8gTm9wZS5cblxuU28sIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBIZXJlJ3MgdGhlIHJlYXNvbmluZyBJJ2xsIHByb3ZpZGU6XG5cblwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBRdWFsY29tbSBBdGhlcm9zIFFDQThLIERTQSBzd2l0Y2ggZHJpdmVyIChgcWNhOGtgKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIG90aGVyIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBkdXJpbmcgZnV6emluZy5cIlxuXG5JJ2xsIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWUgZm9yIGFueSBgcWNhOGtgIHJlZmVyZW5jZXMgaW4gYGFyY2gvdW1gIG9yIGFueXRoaW5nIHNpbWlsYXIuLi5Ob3BlLiBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjEwLCJPdXRwdXRUb2tlbnMiOjEyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjoyNDowMy4xODI3MjA4NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQXRoZXJvcyBRQ0E4SyBEU0Egc3dpdGNoIGRyaXZlciAocWNhOGspLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSAoUUNBODMzNy9RQ0E4MzI3L1FDQTgzMjggc3dpdGNoIGNoaXBzIGNvbm5lY3RlZCB2aWEgTURJTykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgRFNBIHN3aXRjaCBkcml2ZXIgKHFjYThrKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgKFFDQTgzMzcvUUNBODMyNy9RQ0E4MzI4IHN3aXRjaCBjaGlwcyBjb25uZWN0ZWQgdmlhIE1ESU8pIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU2luY2UgdGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb7wch[1] Phase: Running StartedAt: 2026-08-02 16:24:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb7wch[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-02 16:24:14 +0000 UTC FinishedAt: 2026-08-02 16:24:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}