Name: series-workflowrcg5f Phase: Failed StartedAt: 2026-08-04 09:33:07 +0000 UTC FinishedAt: 2026-08-04 09:35:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcg5f[0] Phase: Succeeded StartedAt: 2026-08-04 09:33:07 +0000 UTC FinishedAt: 2026-08-04 09:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcg5f[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 09:33:07 +0000 UTC FinishedAt: 2026-08-04 09:35:01 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwOTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0NGRhNDExOTg4Mjc4MDNjYzYwYjNkMGQ2ZTVjYTFjODBjYTRlOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA5OjM0OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbkBAIC05OCw2ICYjNDM7OTgsNyBAQCBlbnVtIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXG4gXHRNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgJiM0MzsgMSxcbiBcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUwsXG4mIzQzO1x0TUxYNUVfQUNDRUxfRlNfUFNQX0RFQ0FQX0ZUX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxuICNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuaW5kZXggM2YyMTJlNDZmYzJmOS4uYTBiYjE5Y2M5NTZkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuQEAgLTIxOCw2ICYjNDM7MjE4LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF90eF9maW5pc2goc3RydWN0IG1seDVlX3R4cXNxICpzcSxcbiAjZW5kaWZcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4mIzQzO1x0aWYgKG1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpXG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YyYjNDM7JiM0Mzs7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjKSlcbiYjNDM7XHRcdG1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fdGMtLTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF9yeChwcml2KTtcbkBAIC0yMjksNiAmIzQzOzI1MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHByaXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUxYNV9FTl9QU1BcbiYjNDM7XHRyZXR1cm4gbWx4NWVfcHNwX3VwZGF0ZV9yeChwcml2KTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF90eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2Zsb3dfdGFnLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNDIyZjk2ZmZjZWQwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaFxuQEAgLTAsMCAmIzQzOzEsNDUgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTGludXgtT3BlbklCICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OIFx1MDAyNiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX01MWDVFX0ZMT1dfVEFHX0hfX1xuJiM0MzsjZGVmaW5lIF9fTUxYNUVfRkxPV19UQUdfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbHg1L2RldmljZS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKiBVbmlmaWVkIGFjY2VsIGZsb3dfdGFnIGxheW91dCBpbiBDUUUgc29wX2Ryb3BfcXBuIFsyMzowXTpcbiYjNDM7ICpcbiYjNDM7ICogICBbMjM6MjFdID0gcHJvdG9jb2wgSUQgKDMgYml0cyk6XG4mIzQzOyAqICAgICAgICAgICAgICAwID0gbm9uZSAoZGVmYXVsdClcbiYjNDM7ICogICAgICAgICAgICAgIDEgPSBJUHNlY1xuJiM0MzsgKiAgICAgICAgICAgICAgMiA9IE1BQ3NlY1xuJiM0MzsgKiAgICAgICAgICAgICAgMyA9IFBTUCAoSFcgZGVjcnlwdGVkLCBQU1AgaGVhZGVyIHByZXNlbnQpXG4mIzQzOyAqICAgICAgICAgICAgICA0ID0gUFNQIGRlY2FwIChIVyBkZWNyeXB0ZWQgXHUwMDI2IGRlY2Fwc3VsYXRlZClcbiYjNDM7ICogICAgICAgICAgICAgIDUtNyA9IHJlc2VydmVkXG4mIzQzOyAqICAgWzIwOjE3XSA9IFBTUCB2ZXJzaW9uICg0IGJpdHMsIHZhbGlkIHdoZW4gcHJvdG8gPT0gUFNQIGRlY2FwKVxuJiM0MzsgKiAgIDE2ICAgICAgPSByZXNlcnZlZFxuJiM0MzsgKiAgIFsxNTowXSAgPSB1c2VkIGJ5IG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gVEMpLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLXHRcdEdFTk1BU0soMjMsIDIxKVxuJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX05PTkVcdFx0KDAgXHUwMDNjXHUwMDNjIDIxKVxuJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDXHQoMSBcdTAwM2NcdTAwM2MgMjEpXG4mIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDXHQoMiBcdTAwM2NcdTAwM2MgMjEpXG4mIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQXHRcdCgzIFx1MDAzY1x1MDAzYyAyMSlcbiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVBcdCg0IFx1MDAzY1x1MDAzYyAyMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVFx0MTdcbiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX01BU0tcdCgweEYgXHUwMDNjXHUwMDNjIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJlMzJfdG9fY3B1KGNxZS1cdTAwM2Vzb3BfZHJvcF9xcG4pIFx1MDAyNiAweEZGRkZGRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFx1MDAyNiBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19NTFg1RV9GTE9XX1RBR19IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5pbmRleCAzMjk2MDhjNTkzMTNiLi4wODFjYjJmMzFiZTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5AQCAtNCw2ICYjNDM7NCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW4vZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlc3dpdGNoLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpcHNlYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZnNfY29yZS5oXCYjMzQ7XG5AQCAtMTg5LDcgJiM0MzsxOTEsNyBAQCBzdGF0aWMgdm9pZCBpcHNlY19yeF9ydWxlX2FkZF9tYXRjaF9vYmooc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSxcbiBcdFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yKTtcbiBcdFx0TUxYNV9TRVQoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX3ZhbHVlLFxuIFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yLFxuLVx0XHRcdCBzYV9lbnRyeS1cdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpKTtcbiYjNDM7XHRcdFx0IHNhX2VudHJ5LVx1MDAzZWlwc2VjX29ial9pZCk7XG4gXG4gXHRcdHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWFfZW5hYmxlIHw9IE1MWDVfTUFUQ0hfTUlTQ19QQVJBTUVURVJTXzI7XG4gXHR9XG5AQCAtMjA2NSw3ICYjNDM7MjA2Nyw3IEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdGlmICghYXR0cnMtXHUwMDNlZHJvcCkge1xuIFx0XHRpZiAocnggIT0gaXBzZWMtXHUwMDNlcnhfZXN3KVxuIFx0XHRcdGVyciA9IHNldHVwX21vZGlmeV9oZWFkZXIoaXBzZWMsIGF0dHJzLVx1MDAzZXR5cGUsXG4tXHRcdFx0XHRcdFx0ICBzYV9lbnRyeS1cdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpLFxuJiM0MztcdFx0XHRcdFx0XHQgIHNhX2VudHJ5LVx1MDAzZWlwc2VjX29ial9pZCxcbiBcdFx0XHRcdFx0XHQgIFhGUk1fREVWX09GRkxPQURfSU4sIFx1MDAyNmZsb3dfYWN0KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IG1seDVfZXN3X2lwc2VjX3J4X3NldHVwX21vZGlmeV9oZWFkZXIoc2FfZW50cnksIFx1MDAyNmZsb3dfYWN0KTtcbkBAIC0yMDk4LDYgJiM0MzsyMTAwLDEwIEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdFx0Zmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QO1xuIFx0ZWxzZVxuIFx0XHRmbG93X2FjdC5hY3Rpb24gfD0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUO1xuJiM0MztcdGlmICghYXR0cnMtXHUwMDNlZHJvcCBcdTAwMjZcdTAwMjYgcnggIT0gaXBzZWMtXHUwMDNlcnhfZXN3KSB7XG4mIzQzO1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbiYjNDM7XHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7XG4mIzQzO1x0fVxuIFx0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbiBcdGRlc3RbMF0uZnQgPSByeC1cdTAwM2VmdC5zdGF0dXM7XG4gXHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuQEAgLTI1NzQsNTMgJiM0MzsyNTgwLDE5IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfcmVhZF9zdGF0cyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgdm9pZCAqaXBzZWNfc3RhdHMpXG4gXHR9XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENIXG4tc3RhdGljIGludCBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLXtcbi1cdHN0cnVjdCBtbHg1X2Vzd2l0Y2ggKmVzdyA9IG1kZXYtXHUwMDNlcHJpdi5lc3dpdGNoO1xuLVx0aW50IGVyciA9IDA7XG4tXG4tXHRpZiAoZXN3KSB7XG4tXHRcdGVyciA9IG1seDVfZXN3X2xvY2soZXN3KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuLVx0aWYgKG1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKSB7XG4tXHRcdGVyciA9IC1FQlVTWTtcbi1cdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190YyYjNDM7JiM0Mzs7XG4tXG4tdW5sb2NrOlxuLVx0aWYgKGVzdylcbi1cdFx0bWx4NV9lc3dfdW5sb2NrKGVzdyk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbnQgbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbi17XG4tXHRpZiAobWRldi1cdTAwM2VudW1fYmxvY2tfaXBzZWMpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190YyYjNDM7JiM0Mzs7XG4tXHRyZXR1cm4gMDtcbi19XG4tI2VuZGlmXG4tXG4tc3RhdGljIHZvaWQgbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuJiM0MztzdGF0aWMgYm9vbCBhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiB7XG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190Yy0tO1xuJiM0MztcdHJldHVybiBzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUIHx8XG4mIzQzO1x0XHRzYV9lbnRyeS1cdTAwM2VhdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTjtcbiB9XG4gXG4gaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4ge1xuJiM0MztcdGJvb2wgYmxvY2tfdGMgPSBhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tXHRcdGVyciA9IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4mIzQzO1x0aWYgKGJsb2NrX3RjKSB7XG4mIzQzO1x0XHRlcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMjYzNiw4ICYjNDM7MjYwOCw4IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dDpcbi1cdGlmIChzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxuLVx0XHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4mIzQzO1x0aWYgKGJsb2NrX3RjKVxuJiM0MztcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMjY1MSw4ICYjNDM7MjYyMyw4IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdGlmIChpcHNlY19ydWxlLVx1MDAzZXBrdF9yZWZvcm1hdClcbiBcdFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhtZGV2LCBpcHNlY19ydWxlLVx1MDAzZXBrdF9yZWZvcm1hdCk7XG4gXG4tXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcbi1cdFx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKG1kZXYpO1xuJiM0MztcdGlmIChhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpKVxuJiM0MztcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1kZXYpO1xuIFxuIFx0aWYgKHNhX2VudHJ5LVx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX09VVCkge1xuIFx0XHR0eF9mdF9wdXQoc2FfZW50cnktXHUwMDNlaXBzZWMsIHNhX2VudHJ5LVx1MDAzZWF0dHJzLnR5cGUpO1xuQEAgLTI2ODYsNyAmIzQzOzI2NTgsNyBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuJiM0MztcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0yNzAxLDcgJiM0MzsyNjczLDcgQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dDpcbi1cdG1seDVlX2lwc2VjX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4mIzQzO1x0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI3MTIsNyAmIzQzOzI2ODQsNyBAQCB2b2lkIG1seDVlX2FjY2VsX2lwc2VjX2ZzX2RlbF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIFxuIFx0bWx4NV9kZWxfZmxvd19ydWxlcyhpcHNlY19ydWxlLVx1MDAzZXJ1bGUpO1xuIFxuLVx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbiYjNDM7XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFxuIFx0aWYgKHBvbF9lbnRyeS1cdTAwM2VhdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTikge1xuIFx0XHRyeF9mdF9wdXRfcG9saWN5KHBvbF9lbnRyeS1cdTAwM2VpcHNlYyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaFxuaW5kZXggNDViMGQxOWU3MzVjYi4uNmRlYTU5NzhhNDBlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcbkBAIC0zOCwxMCAmIzQzOzM4LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZW4uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2VuL3R4cnguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9mbG93X3RhZy5oXCYjMzQ7XG4gXG4tLyogQml0MzE6IElQc2VjIG1hcmtlciwgQml0MzA6IHJlc2VydmVkLCBCaXQyOS0yNDogSVBzZWMgc3luZHJvbWUsIEJpdDIzLTA6IElQc2VjIG9iaiBpZCAqL1xuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgPT0gMHgyKVxuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9TWU5EUk9NKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgR0VOTUFTSyg1LCAwKSlcbiYjNDM7LyogSVBzZWMgb2JqIGlkIGluIGZ0X21ldGFkYXRhIGJpdHNbMjM6MF0gKi9cbiAjZGVmaW5lIE1MWDVfSVBTRUNfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IEdFTk1BU0soMjMsIDApKVxuIFxuIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9pcHNlY19zdGF0ZSB7XG5AQCAtNzQsNyAmIzQzOzczLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWx4NWVfaXBzZWNfdHhfaWRzX2xlbihzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfaXBzZWNfc3RcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pcHNlY19pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuLVx0cmV0dXJuIE1MWDVfSVBTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuJiM0MztcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19JUFNFQztcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX2lwc2VjX2VzZWdfbWV0YShzdHJ1Y3QgbWx4NV93cWVfZXRoX3NlZyAqZXNlZylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmNcbmluZGV4IGRhZmY1M2JhN2QwOWYuLmFhN2EyODk1NDg2MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7ZW4uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xpYi9hc28uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xpYi9jcnlwdG8uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW5fYWNjZWwvbWFjc2VjLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1MWDVfTUFDU0VDX0VQTl9TQ09QRV9NSUQgMHg4MDAwMDAwMExcbkBAIC0zMjQsNiAmIzQzOzMyNSw4IEBAIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhX2ZzKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcbiBcdG1seDVfbWFjc2VjX2ZzX2RlbF9ydWxlKG1hY3NlYy1cdTAwM2VtZGV2LVx1MDAzZW1hY3NlY19mcywgc2EtXHUwMDNlbWFjc2VjX3J1bGUsIGFjdGlvbiwgbmV0ZGV2LFxuIFx0XHRcdFx0ZnNfaWQpO1xuIFx0c2EtXHUwMDNlbWFjc2VjX3J1bGUgPSBOVUxMO1xuJiM0MztcdGlmICghaXNfdHgpXG4mIzQzO1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWFjc2VjLVx1MDAzZW1kZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1ZV9tYWNzZWNfY2xlYW51cF9zYShzdHJ1Y3QgbWx4NWVfbWFjc2VjICptYWNzZWMsXG5AQCAtMzQzLDYgJiM0MzszNDYsNyBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhX2ZzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFx0Y29uc3Qgc3RydWN0IG1hY3NlY190eF9zYyAqdHhfc2MgPSBcdTAwMjZjdHgtXHUwMDNlc2VjeS1cdTAwM2V0eF9zYztcbiBcdHN0cnVjdCBtbHg1X21hY3NlY19ydWxlX2F0dHJzIHJ1bGVfYXR0cnM7XG4gXHR1bmlvbiBtbHg1X21hY3NlY19ydWxlICptYWNzZWNfcnVsZTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChpc190eCBcdTAwMjZcdTAwMjYgdHhfc2MtXHUwMDNlZW5jb2Rpbmdfc2EgIT0gc2EtXHUwMDNlYXNzb2NfbnVtKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zNTMsMTMgJiM0MzszNTcsMjYgQEAgc3RhdGljIGludCBtbHg1ZV9tYWNzZWNfaW5pdF9zYV9mcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbiBcdHJ1bGVfYXR0cnMuYWN0aW9uID0gKGlzX3R4KSA/IE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9FTkNSWVBUIDpcbiBcdFx0XHRcdCAgICAgIE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9ERUNSWVBUO1xuIFxuJiM0MztcdGlmICghaXNfdHgpIHtcbiYjNDM7XHRcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocHJpdi1cdTAwM2VtZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1hY3NlY19ydWxlID0gbWx4NV9tYWNzZWNfZnNfYWRkX3J1bGUobWFjc2VjX2ZzLCBjdHgsIFx1MDAyNnJ1bGVfYXR0cnMsIGZzX2lkKTtcbi1cdGlmICghbWFjc2VjX3J1bGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmICghbWFjc2VjX3J1bGUpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dF91bmJsb2NrX3RjO1xuJiM0MztcdH1cbiBcbiBcdHNhLVx1MDAzZW1hY3NlY19ydWxlID0gbWFjc2VjX3J1bGU7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF91bmJsb2NrX3RjOlxuJiM0MztcdGlmICghaXNfdHgpXG4mIzQzO1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocHJpdi1cdTAwM2VtZGV2KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuQEAgLTczNSwxMiAmIzQzOzc1MiwxMiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19hZGRfcnhzYyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcbiBcdCAqIGEgbm9uLU5VTEwgbWRfZHN0IHdpdGggdW5pbml0aWFsaXNlZCBjb250ZW50cy5cbiBcdCAqL1xuIFx0ZXJyID0geGFfYWxsb2MoXHUwMDI2bWFjc2VjLVx1MDAzZXNjX3hhcnJheSwgXHUwMDI2c2NfeGFycmF5X2VsZW1lbnQtXHUwMDNlZnNfaWQsIHNjX3hhcnJheV9lbGVtZW50LFxuLVx0XHQgICAgICAgWEFfTElNSVQoMSwgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdCAgICAgICBYQV9MSU1JVCgxLCBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWYgKGVyciA9PSAtRUJVU1kpXG4gXHRcdFx0bmV0ZGV2X2VycihjdHgtXHUwMDNlbmV0ZGV2LFxuIFx0XHRcdFx0ICAgXCYjMzQ7TUFDc2VjIG9mZmxvYWQ6IHVuYWJsZSB0byBjcmVhdGUgZW50cnkgZm9yIFJYIFNDICglZCBSeCBTQ3MgYWxyZWFkeSBhbGxvY2F0ZWQpXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpO1xuJiM0MztcdFx0XHRcdCAgIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCk7XG4gXHRcdGdvdG8gZGVzdHJveV9tZF9kc3Q7XG4gXHR9XG4gXG5AQCAtMTEzNyw3ICYjNDM7MTE1NCwxMiBAQCBzdGF0aWMgaW50IG1hY3NlY191cGRfc2VjeV9od19hZGRyZXNzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFx0c3RydWN0IG1seDVlX21hY3NlY19zYSAqcnhfc2E7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0O1xuIFx0aW50IGksIGVyciA9IDA7XG4mIzQzO1x0Ym9vbCBibG9ja190YztcbiBcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBUQyBibG9jayBhY3Jvc3MgdGhlIG9wZXJhdGlvbiwgdG8gcHJldmVudCBhIG1pc3RpbWVkIFRDXG4mIzQzO1x0ICogZmlsdGVyIGFkZCBmcm9tIHByZXZlbnRpbmcgdGhlIDJuZCBsb29wIGZyb20gaGFwcGVuaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGJsb2NrX3RjID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwcml2LVx1MDAzZW1kZXYpID09IDA7XG4gXG4gXHRsaXN0ID0gXHUwMDI2bWFjc2VjX2RldmljZS1cdTAwM2VtYWNzZWNfcnhfc2NfbGlzdF9oZWFkO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X3NjLCB0bXAsIGxpc3QsIHJ4X3NjX2xpc3RfZWxlbWVudCkge1xuQEAgLTExNjgsNiAmIzQzOzExOTAsOCBAQCBzdGF0aWMgaW50IG1hY3NlY191cGRfc2VjeV9od19hZGRyZXNzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFxuIFx0bWVtY3B5KG1hY3NlY19kZXZpY2UtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbiBvdXQ6XG4mIzQzO1x0aWYgKGJsb2NrX3RjKVxuJiM0MztcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHByaXYtXHUwMDNlbWRldik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzAwLDcgJiM0MzsxNzI0LDcgQEAgdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoIW1hY3NlYylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZnNfaWQgPSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcbiYjNDM7XHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRBX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNjX3hhcnJheV9lbGVtZW50ID0geGFfbG9hZChcdTAwMjZtYWNzZWMtXHUwMDNlc2NfeGFycmF5LCBmc19pZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG5pbmRleCAyN2RmNzJlMjMxMDZkLi41NzE2MjRmMmRiMTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmhcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbHg1L2RyaXZlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtsaWIvbWFjc2VjX2ZzLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgbWx4NWVfcHJpdjtcbkBAIC0zMSw3ICYjNDM7MzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX3NrYl9pc19vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX21hY3NlY19pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuLVx0cmV0dXJuIE1MWDVfTUFDU0VDX01FVEFEQVRBX01BUktFUihiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpKTtcbiYjNDM7XHR1MzIgcHJvdG8gPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDO1xuIH1cbiBcbiB2b2lkIG1seDVlX21hY3NlY19vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbmluZGV4IDczYjIzMjM3OTI2M2EuLmFkOGRiZDhjMmYyNzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuQEAgLTYsNyAmIzQzOzYsOSBAQFxuICNpbmNsdWRlIFwmIzM0O21seDVfY29yZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cHNwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtsaWIvY3J5cHRvLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZW5fYWNjZWwvZW5fYWNjZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL3BzcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL3BzcF9yeHR4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtmc19jb3JlLmhcJiMzNDtcbiBcbiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHtcbkBAIC0yMSw2ICYjNDM7MjMsMTMgQEAgZW51bSBhY2NlbF9wc3Bfc3luZHJvbWUge1xuIFx0UFNQX0JBRF9UUkFJTEVSLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCB1OCBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW10gPSB7XG4mIzQzO1x0UFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyOCxcbiYjNDM7XHRQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMjU2LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUyBBUlJBWV9TSVpFKHBzcF9zdXBwb3J0ZWRfdmVyc2lvbnMpXG4mIzQzO1xuIHN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG5AQCAtNDEsNyAmIzQzOzUwLDcgQEAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpyeF9tb2RpZnlfaGRyO1xuJiM0MztcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiB9O1xuIFxuQEAgLTUyLDYgJiM0Mzs2MSwxNSBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1ZHBfcnVsZXNbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4gfTtcbiBcbiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSB7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZHJvcF9ncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xuJiM0MztcdHN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdCAqcmVmb3JtYXQ7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGVbTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlNdO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1bnN1cHBvcnRlZF9ydWxlO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2O1xuIFx0c3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7XG5AQCAtNjMsMTIgJiM0Mzs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcbiYjNDM7XHQvKiBXaGVuIHNldCwgc3RlZXJpbmcgaXMgY29uZmlndXJlZCB0byBkZWNhcHN1bGF0ZSBQU1AgKHJlbW92ZSBVRFAmIzQzO1BTUFxuJiM0MztcdCAqIGhlYWRlcnMgYW5kIFBTUCB0cmFpbGVyKSBhbmQgaGFuZCBvZmYgdGhlIFNQSSBpbiBjcWUuZnRfbWV0YWRhdGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBkZWNhcF9lbmFibGVkO1xuIFxuIFx0c3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIGRlY3J5cHRbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2NoZWNrX3RhYmxlIGNoZWNrO1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHJ4O1xuIH07XG4gXG4mIzQzO3N0YXRpYyBib29sIHNoYW1wb19lbmFibGVkKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY2hhbm5lbHMucGFyYW1zLnBhY2tldF9tZXJnZS50eXBlID09XG4mIzQzO1x0XHRNTFg1RV9QQUNLRVRfTUVSR0VfU0hBTVBPO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXG4gc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXG4ge1xuQEAgLTExMCw2ICYjNDM7MTM5LDE1IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICoqcnVsZSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICoqbW9kaGRyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCptb2RoZHIpIHtcbiYjNDM7XHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGRldiwgKm1vZGhkcik7XG4mIzQzO1x0XHQqbW9kaGRyID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxuIHtcbkBAIC00MDIsMTUgJiM0Mzs0NDAsMTYxIEBAIGludCBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpY1xuJiM0Mzt2b2lkIGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY2FwLVx1MDAzZXVuc3VwcG9ydGVkX3J1bGUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY2FwLVx1MDAzZXJ1bGVbaV0pO1xuJiM0MztcdGlmIChkZWNhcC1cdTAwM2VyZWZvcm1hdCkge1xuJiM0MztcdFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhmcy1cdTAwM2VtZGV2LCBkZWNhcC1cdTAwM2VyZWZvcm1hdCk7XG4mIzQzO1x0XHRkZWNhcC1cdTAwM2VyZWZvcm1hdCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZGVjYXAtXHUwMDNlbW9kaWZ5X2hkcik7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZkZWNhcC1cdTAwM2Vkcm9wX2dyb3VwKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZkZWNhcC1cdTAwM2VmdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX2Z0ZV9wc3BfdmVyc2lvbihzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHU4IHZlcnNpb24pXG4mIzQzO3tcbiYjNDM7XHR2b2lkICptaXNjX3BhcmFtc182O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4mIzQzO1x0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfNjtcbiYjNDM7XHRtaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYSxcbiYjNDM7XHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbiYjNDM7XHRNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uKTtcbiYjNDM7XHRtaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbiYjNDM7XHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbiYjNDM7XHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2M2LCBtaXNjX3BhcmFtc182LCBwc3BfdmVyc2lvbiwgdmVyc2lvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpY1xuJiM0MztpbnQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSAqZGVjYXApXG4mIzQzO3tcbiYjNDM7XHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdF9wYXJhbXMgcmVmb3JtYXRfcGFyYW1zID0ge307XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4mIzQzO1x0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiYjNDM7XHRpbnQgaSwgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0c3BlYyA9IGt2emFsbG9jX29iaigqc3BlYyk7XG4mIzQzO1x0aWYgKCFzcGVjKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSBGVCAqL1xuJiM0MztcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgJiM0MzsgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7XG4mIzQzO1x0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9ERUNBUF9GVF9MRVZFTDtcbiYjNDM7XHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbiYjNDM7XHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9mdChmcywgXHUwMDI2ZnRfYXR0ciwgXHUwMDI2ZGVjYXAtXHUwMDNlZnQpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIGRlY2FwIHJ4IGZ0IGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3NwZWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgZHJvcCBncm91cCAqL1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNhcC1cdTAwM2VmdCwgXHUwMDI2ZGVjYXAtXHUwMDNlZHJvcF9ncm91cCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgcnggZHJvcF9ncm91cCBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBZGQgZGVmYXVsdCBkcm9wIHJ1bGUgKi9cbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShkZWNhcC1cdTAwM2VmdCwgTlVMTCwgZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2ZGVjYXAtXHUwMDNldW5zdXBwb3J0ZWRfcnVsZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgdW5zdXBwb3J0ZWQgdmVyc2lvbnMgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG1vZGlmeV9oZHI6IGNvcHkgU1BJIGZyb20gUkVHX0NfMCB0byBSRUdfQiAqL1xuJiM0MztcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xuJiM0MztcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19maWVsZCxcbiYjNDM7XHRcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQ18wKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfb2Zmc2V0LCAwKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsXG4mIzQzO1x0XHQgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xuJiM0MztcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApO1xuJiM0MztcbiYjNDM7XHRtb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgMSwgYWN0aW9uKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG1vZGlmeV9oZHIpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRkZWNhcC1cdTAwM2Vtb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiYjNDM7XG4mIzQzO1x0LyogcGt0X3JlZm9ybWF0OiBkZWNhcCBQU1AgdHJhbnNwb3J0ICovXG4mIzQzO1x0cmVmb3JtYXRfcGFyYW1zLnR5cGUgPSBNTFg1X1JFRk9STUFUX1RZUEVfUkVNT1ZFX1BTUF9UUkFOU1BPUlQ7XG4mIzQzO1x0cmVmb3JtYXQgPSBtbHg1X3BhY2tldF9yZWZvcm1hdF9hbGxvYyhtZGV2LCBcdTAwMjZyZWZvcm1hdF9wYXJhbXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCk7XG4mIzQzO1x0aWYgKElTX0VSUihyZWZvcm1hdCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIocmVmb3JtYXQpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRkZWNhcC1cdTAwM2VyZWZvcm1hdCA9IHJlZm9ybWF0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU4IHZlcnNpb24gPSBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW2ldO1xuJiM0MztcdFx0c3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBtYXRjaCh2ZXJzaW9uKSA9XHUwMDNlIGRlY2FwLCBjb3B5IFNQSSwgZndkIHRvIHJ4IEZUICovXG4mIzQzO1x0XHRzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3BlYywgdmVyc2lvbik7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE92ZXJyaWRlIHRoZSBmbG93IHRhZyBzZXQgaW4gdGhlIGRlY3J5cHQgdGFibGUgd2l0aFxuJiM0MztcdFx0ICogdGhlIGRlY2FwIFBTUCBtYXJrZXIgYW5kIHZlcnNpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XG4mIzQzO1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUCB8XG4mIzQzO1x0XHRcdCgodTMyKXZlcnNpb24gXHUwMDNjXHUwMDNjIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9QQUNLRVRfUkVGT1JNQVQgfFxuJiM0MztcdFx0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8XG4mIzQzO1x0XHRcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcbiYjNDM7XHRcdGZsb3dfYWN0LnBrdF9yZWZvcm1hdCA9IHJlZm9ybWF0O1xuJiM0MztcdFx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4mIzQzO1x0XHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuJiM0MztcdFx0ZGVzdC5mdCA9IGZzLVx1MDAzZXJ4LmZ0O1xuJiM0MztcbiYjNDM7XHRcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY2FwLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4mIzQzO1x0XHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRlY2FwLVx1MDAzZXJ1bGVbaV0gPSBydWxlO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIG91dF9zcGVjO1xuJiM0MztcbiYjNDM7b3V0X2VycjpcbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfZGVzdHJveShmcywgZGVjYXApO1xuJiM0MztvdXRfc3BlYzpcbiYjNDM7XHRrdmZyZWUoc3BlYyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQpXG4ge1xuIFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjcnlwdC1cdTAwM2VydWxlKTtcbi1cdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbi1cdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbi1cdFx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbi1cdH1cbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLVx1MDAzZW1kZXYsIFx1MDAyNmRlY3J5cHQtXHUwMDNlbW9kaWZ5X2hkcik7XG4gXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSk7XG4gXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ncm91cCk7XG4gXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZkZWNyeXB0LVx1MDAzZWZ0KTtcbkBAIC00MzEsMTEgJiM0Mzs2MTUsMTEgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uICpkZWZhdWx0X2Rlc3QpXG4ge1xuIFx0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcbi1cdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHIgPSBOVUxMO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuIFx0TUxYNV9ERUNMQVJFX0ZMT1dfQUNUKGZsb3dfYWN0KTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RoZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiBcdGludCBlcnIgPSAwO1xuQEAgLTQ3OSwzMCAmIzQzOzY2MywzNiBAQCBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHR9XG4gXHRkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4gXG4tXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xuLVx0c2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpO1xuLVx0Zmxvd19hY3QuY3J5cHRvLnR5cGUgPSBNTFg1X0ZMT1dfQ09OVEVYVF9FTkNSWVBUX0RFQ1JZUFRfVFlQRV9QU1A7XG4tXHQvKiBTZXQgYml0WzMxLCAzMF0gUFNQIG1hcmtlciAqL1xuLSNkZWZpbmUgTUxYNUVfUFNQX01BUktFUl9CSVQgKEJJVCgzMCkgfCBCSVQoMzEpKVxuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpO1xuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBmaWVsZCwgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBNTFg1RV9QU1BfTUFSS0VSX0JJVCk7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIG9mZnNldCwgMCk7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMzIpO1xuLVxuLVx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSwgYWN0aW9uKTtcbi1cdGlmIChJU19FUlIobW9kaWZ5X2hkcikpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFsbG9jIHBzcCBzZXQgbW9kaWZ5X2hlYWRlcl9pZCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4tXHRcdG1vZGlmeV9oZHIgPSBOVUxMO1xuJiM0MztcdC8qIENyZWF0ZSBtb2RpZnlfaGRyIHRvIGNvcHkgU1BJIHRvIFJFR19DXzAgKi9cbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9DT1BZKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXG4mIzQzO1x0XHQgTUxYNV9BQ1RJT05fSU5fRklFTERfUFNQX0hFQURFUl8xKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfb2Zmc2V0LCAwKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsXG4mIzQzO1x0XHQgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0NfMCk7XG4mIzQzO1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMCk7XG4mIzQzO1xuJiM0MztcdG1vZGhkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSxcbiYjNDM7XHRcdFx0XHRcdCAgYWN0aW9uKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG1vZGhkcikpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIobW9kaGRyKTtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZW1vZGlmeV9oZHIgPSBtb2RoZHI7XG4gXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSO1xuLVx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4mIzQzO1x0LyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi9cbiYjNDM7XHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBQU1AgbWFya2VyIHZpYSBmbG93X3RhZyAqL1xuJiM0MztcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XG4mIzQzO1x0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1A7XG4mIzQzO1xuJiM0MztcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xuJiM0MztcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4mIzQzO1x0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8XG4mIzQzO1x0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4mIzQzO1x0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGhkcjtcbiBcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4gXHRkZXN0LmZ0ID0gZnMtXHUwMDNlY2hlY2suZnQ7XG4gXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG5AQCAtNTIzLDkgJiM0Mzs3MTMsNTAgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIGRlY2FwX3dhbnRlZClcbiYjNDM7e1xuJiM0MztcdGJvb2wgZGVjYXBfc3VwcG9ydGVkID1cbiYjNDM7XHRcdE1MWDVfQ0FQX0ZMT1dUQUJMRShmcy1cdTAwM2VtZGV2LFxuJiM0MztcdFx0XHRcdCAgIGZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5yZWZvcm1hdF9kZWxfcHNwX3RyYW5zcG9ydCk7XG4mIzQzO1x0Ym9vbCBkZWNhcF9lbmFibGUgPSBkZWNhcF93YW50ZWQgXHUwMDI2XHUwMDI2IGRlY2FwX3N1cHBvcnRlZDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdGhlIGRlY2FwIHRhYmxlIGlmIG5lZWRlZC4gKi9cbiYjNDM7XHRpZiAoZGVjYXBfZW5hYmxlIFx1MDAyNlx1MDAyNiAhZnMtXHUwMDNlZGVjYXAuZnQpIHtcbiYjNDM7XHRcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoZnMsIFx1MDAyNmZzLVx1MDAzZWRlY2FwKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bWx4NV9jb3JlX3dhcm4oZnMtXHUwMDNlbWRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRcdGRlY2FwX2VuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZGVjYXBfZW5hYmxlID09IGZzLVx1MDAzZWRlY2FwX2VuYWJsZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUmVkaXJlY3QgdHJhZmZpYyB0byB0aGUgY29ycmVjdCB0YWJsZS4gKi9cbiYjNDM7XHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuJiM0MztcdGRlc3QuZnQgPSBkZWNhcF9lbmFibGUgPyBmcy1cdTAwM2VkZWNhcC5mdCA6IGZzLVx1MDAzZXJ4LmZ0O1xuJiM0MztcdGVyciA9IG1seDVfbW9kaWZ5X3J1bGVfZGVzdGluYXRpb24oZnMtXHUwMDNlY2hlY2sucnVsZSwgXHUwMDI2ZGVzdCwgTlVMTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3lfZnQ7XG4mIzQzO1xuJiM0MztcdGZzLVx1MDAzZWRlY2FwX2VuYWJsZWQgPSBkZWNhcF9lbmFibGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2Rlc3Ryb3lfZnQ6XG4mIzQzO1x0aWYgKGRlY2FwX2VuYWJsZSlcbiYjNDM7XHRcdGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9kZXN0cm95KGZzLCBcdTAwMjZmcy1cdTAwM2VkZWNhcCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4gXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbiYjNDM7XHRib29sIHRjX2Jsb2NrZWQgPSBmcy1cdTAwM2VyeC5mdDtcbiBcdGludCBpO1xuIFxuIFx0LyogZGlzY29ubmVjdCAqL1xuQEAgLTUzNCwxOSAmIzQzOzc2NSwyOSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4gXHR9XG4gXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY2FwKTtcbiBcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZXJ4KTtcbiYjNDM7XHRpZiAodGNfYmxvY2tlZClcbiYjNDM7XHRcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChmcy1cdTAwM2VtZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgYm9vbCBkZWNhcF9lbmFibGUsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbiBcdGludCBpLCBlcnI7XG4gXG4mIzQzO1x0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChmcy1cdTAwM2VtZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1RDIG9mZmxvYWQgYWN0aXZlLCBjYW5ub3QgZW5hYmxlIFBTUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VyeCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX3VuYmxvY2tfdGM7XG4gXHR9XG4gXG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG5AQCAtNTczLDYgJiM0Mzs4MTQsMTIgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0XHRtbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSwgXHUwMDI2ZGVzdCk7XG4gXHR9XG4gXG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKGZzLCBkZWNhcF9lbmFibGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIFJYIHN0ZWVyaW5nIGNvbmZpZyBmb3IgSFcgR1JPXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gZXJyX2RlY3J5cHRfZnQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuIGVycl9kZWNyeXB0X2Z0OlxuQEAgLTU4Myw2ICYjNDM7ODMwLDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuIGVycl9mdDpcbiBcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZXJ4KTtcbiYjNDM7ZXJyX3VuYmxvY2tfdGM6XG4mIzQzO1x0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLVx1MDAzZW1kZXYpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtODM5LDcgJiM0MzsxMDg4LDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBleHRhY2spO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIHNoYW1wb19lbmFibGVkKHByaXYpLFxuJiM0MztcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMTExNiwzICYjNDM7MTM2NiwxNCBAQCB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0cHJpdi1cdTAwM2Vwc3AgPSBOVUxMO1xuIFx0a2ZyZWUocHNwKTtcbiB9XG4mIzQzO1xuJiM0MztpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtXHUwMDNlcHNwO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChwcml2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0aWYgKCFwc3AgfHwgIXBzcC1cdTAwM2Vmcy1cdTAwM2VjaGVjay5mdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKHBzcC1cdTAwM2Vmcywgc2hhbXBvX2VuYWJsZWQocHJpdikpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG5pbmRleCAzZjQ0MWU3ZGQ1NWFjLi43NmY2YzY5ZGUwZTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC00OSw2ICYjNDM7NDksNyBAQCBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBpbnQgbWx4NWVfcHNwX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG5AQCAtNjEsNSAmIzQzOzYyLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01MWDVfRU5fUFNQICovXG4gI2VuZGlmIC8qIF9fTUxYNUVfQUNDRUxfUFNQX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbmluZGV4IDM0OGZkN2E5NjI2MTUuLjJiZWZmZWUxNDI3OGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbkBAIC0xMTgsMTAgJiM0MzsxMTgsMjUgQEAgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpcbiB7XG4gXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHR1MTYgZGV2X2lkID0gcHJpdi1cdTAwM2Vwc3AtXHUwMDNlcHNkLVx1MDAzZWlkO1xuLVx0Ym9vbCBzdHJpcF9pY3YgPSB0cnVlO1xuLVx0dTggZ2VuZXJhdGlvbiA9IDA7XG4mIzQzO1x0c3RydWN0IHBzcF9za2JfZXh0ICpwc2U7XG4mIzQzO1xuJiM0MztcdGlmIChtbHg1ZV9wc3BfaXNfZGVjYXAoY3FlKSkge1xuJiM0MztcdFx0LyogVURQICYjNDM7IFBTUCBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlciByZW1vdmVkIGJ5IEhXLlxuJiM0MztcdFx0ICogQ29uc3RydWN0IHRoZSBQU1AgZXh0ZW5zaW9uIGZyb20gQ1FFIG1ldGFkYXRhLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghcHNlKSlcbiYjNDM7XHRcdFx0Z290byBkcm9wO1xuJiM0MztcbiYjNDM7XHRcdHBzZS1cdTAwM2VzcGkgPSBtbHg1ZV9wc3BfZ2V0X3NwaShjcWUpO1xuJiM0MztcdFx0cHNlLVx1MDAzZXZlcnNpb24gPSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTtcbiYjNDM7XHRcdHBzZS1cdTAwM2VkZXZfaWQgPSBkZXZfaWQ7XG4mIzQzO1x0XHRwc2UtXHUwMDNlZ2VuZXJhdGlvbiA9IDA7XG4mIzQzO1x0XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4tXHRpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIGdlbmVyYXRpb24sIHN0cmlwX2ljdikpXG4mIzQzO1x0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCAwLCB0cnVlKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuIFx0c2tiLVx1MDAzZWRlY3J5cHRlZCA9IDE7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuaW5kZXggMmIwODBjMzljYzM3ZS4uNDFiNjAyNTliM2JjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuQEAgLTksMTAgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcHNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW4vdHhyeC5oXCYjMzQ7XG4tXG4tLyogQml0MzA6IFBTUCBtYXJrZXIsIEJpdDIyLTA6IFBTUCBvYmogaWQgKi9cbi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX01BUktFUihtZXRhZGF0YSkgICgoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDMwKSBcdTAwMjYgMHgzKSA9PSAweDMpXG4tI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcdTAwMjYgR0VOTUFTSygyMiwgMCkpXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcbiBcdHUzMiB0YWlsZW47XG5AQCAtODIsNyAmIzQzOzc5LDI5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX3BzcF90eF9pZHNfbGVuKHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGVcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHRyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuJiM0MztcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1AgfHxcbiYjNDM7XHRcdHByb3RvID09IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUDtcbiYjNDM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3BfaXNfZGVjYXAoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiYjNDM7e1xuJiM0MztcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKG1seDVlX2FjY2VsX2Zsb3dfdGFnKGNxZSkgXHUwMDI2IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSykgXHUwMDNlXHUwMDNlXG4mIzQzO1x0XHRNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX1NISUZUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIF9fYmUzMiBtbHg1ZV9wc3BfZ2V0X3NwaShzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNxZS1cdTAwM2VmdF9tZXRhZGF0YTtcbiB9XG4gXG4gYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTEwLDYgJiM0MzsxMjksMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5pbmRleCAzYjlkNDJjN2U5YzI4Li4zYzZlZjUwMGQwZmIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYyODYsNyAmIzQzOzYyODYsMTMgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIGludCBtbHg1ZV91cGRhdGVfbmljX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdHJldHVybiBtbHg1ZV9yZWZyZXNoX3RpcnMocHJpdi1cdTAwM2VtZGV2LCBmYWxzZSwgZmFsc2UpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1seDVlX3JlZnJlc2hfdGlycyhwcml2LVx1MDAzZW1kZXYsIGZhbHNlLCBmYWxzZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtbHg1ZV9hY2NlbF91cGRhdGVfcngocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWx4NWVfcHJvZmlsZSBtbHg1ZV9uaWNfcHJvZmlsZSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jXG5pbmRleCBmYjcxMTBiMWI2ODM0Li5jN2VhYWIzZjc5NjdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jXG5AQCAtMjIyMSw2ICYjNDM7MjIyMSwzMyBAQCBzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIHBhZ2Vfc2l6ZSAqIG5yX2ZyYWdzICYjNDM7IGRhdGFfYmNudCBcdTAwM2M9IEdST19MRUdBQ1lfTUFYX1NJWkU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fcHNwX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19NTFg1X0VOX1BTUFxuJiM0MztcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9QU1ApO1xuJiM0MztcdGJvb2wgaXNfcHNwID0gbWx4NWVfcHNwX2lzX3J4X2Zsb3coY3FlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseSghaXNfcHNwIFx1MDAyNlx1MDAyNiAhcHNlKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBObyBtYXRjaCBvbiBQU1Agc3RhdHVzIGNoYW5nZSAobm8gY3J5cHRvIC1cdTAwM2UgY3J5cHRvIG9yIHZpY2UtdmVyc2EpLiAqL1xuJiM0MztcdGlmICh1bmxpa2VseShpc19wc3AgIT0gISFwc2UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBTUEkgYW5kIHZlcnNpb24gYXJlIG9ubHkgYXZhaWxhYmxlIGluIENRRSBtZXRhZGF0YSBmb3IgZGVjYXAgZmxvd3MuXG4mIzQzO1x0ICogTm9uLWRlY2FwIFBTUCBjYW5ub3QgYmUgbWF0Y2hlZCBoZXJlLCBmb3JjZSBhIGZsdXNoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseSghbWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBObyBtYXRjaCBvbiBzZWN1cml0eSBwYXJhbWV0ZXJzIGNoYW5nZS4gKi9cbiYjNDM7XHRyZXR1cm4gcHNlLVx1MDAzZXNwaSA9PSBtbHg1ZV9wc3BfZ2V0X3NwaShjcWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0cHNlLVx1MDAzZXZlcnNpb24gPT0gbWx4NWVfcHNwX2dldF92ZXJzaW9uKGNxZSk7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3cnFfc2hhbXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuIFx0dTE2IGRhdGFfYmNudFx0XHQ9IG1wd3JxX2dldF9jcWVfYnl0ZV9jbnQoY3FlKSAtIGNxZS1cdTAwM2VzaGFtcG8uaGVhZGVyX3NpemU7XG5AQCAtMjI1OCw4ICYjNDM7MjI4NSw5IEBAIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3cnFfc2hhbXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxXG4gXHRkYXRhX29mZnNldCA9IHdxZV9vZmZzZXQgXHUwMDI2IChwYWdlX3NpemUgLSAxKTtcbiBcdHBhZ2VfaWR4ID0gd3FlX29mZnNldCBcdTAwM2VcdTAwM2UgcnEtXHUwMDNlbXB3cWUucGFnZV9zaGlmdDtcbiBcdGlmICgqc2tiIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEobWF0Y2ggXHUwMDI2XHUwMDI2IG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsXG4tXHRcdFx0XHRcdFx0XHQgcGFnZV9zaXplKSkpIHtcbiYjNDM7XHQgICAgIShtYXRjaCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2UoKnNrYiwgZGF0YV9iY250LCBwYWdlX3NpemUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIG1seDVlX2h3X2dyb19wc3BfbWF0Y2goKnNrYiwgY3FlKSkpIHtcbiBcdFx0bWF0Y2ggPSBmYWxzZTtcbiBcdFx0bWx4NWVfc2hhbXBvX2ZsdXNoX3NrYihycSwgY3FlLCBtYXRjaCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xuaW5kZXggMWJjN2I5MDE5MTI0YS4uNzAxOTVmY2RkZmM4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xuQEAgLTQ4MTEsMTQgJiM0Mzs0ODExLDE0IEBAIHN0YXRpYyBib29sIGlzX2Zsb3dfcnVsZV9kdXBsaWNhdGVfYWxsb3dlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIG5ldGlmX2lzX2xhZ19wb3J0KGRldikgXHUwMDI2XHUwMDI2IHJwcml2IFx1MDAyNlx1MDAyNiBycHJpdi1cdTAwM2VyZXAtXHUwMDNldnBvcnQgIT0gTUxYNV9WUE9SVF9VUExJTks7XG4gfVxuIFxuLS8qIEFzIElQc2VjIGFuZCBUQyBvcmRlciBpcyBub3QgYWxpZ25lZCBiZXR3ZWVuIHNvZnR3YXJlIGFuZCBoYXJkd2FyZS1vZmZsb2FkLFxuLSAqIGVpdGhlciBJUHNlYyBvZmZsb2FkIG9yIFRDIG9mZmxvYWQsIG5vdCBib3RoLCBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS5cbiYjNDM7LyogVEMgb2ZmbG9hZCBhbmQgYWNjZWwgcHJvdG9jb2xzIGNhbiBvdmVyd3JpdGUgZWFjaCBvdGhlciYjMzk7cyBmbG93X3RhZyB3aXRoXG4mIzQzOyAqIHN0ZWVyaW5nIHJ1bGVzIGFuZCB0aGV5IGNhbm5vdCBzaW11bHRhbmVvdXNseSBvcGVyYXRlIG9uIHRoZSBzYW1lIGludGVyZmFjZS5cbiYjNDM7ICogQWRkaXRpb25hbGx5LCBhcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmRcbiYjNDM7ICogaGFyZHdhcmUtb2ZmbG9hZCwgb25seSBvbmUgaXMgYWxsb3dlZCBmb3IgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gICovXG4tc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0MztzdGF0aWMgYm9vbCBpc190Y19hY2NlbF9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfTUxYNV9FTl9JUFNFQykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdGlmIChmaWx0ZXIgIT0gcHJpdi1cdTAwM2VuZXRkZXYpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC00ODI4LDI3ICYjNDM7NDgyOCwzNSBAQCBzdGF0aWMgYm9vbCBpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7c3RhdGljIGludCBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbi1cdGlmICghaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXG4mIzQzO1x0aWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAobWRldi1cdTAwM2VudW1fYmxvY2tfdGMpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja19pcHNlYyYjNDM7JiM0Mzs7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4mIzQzO1x0aWYgKG1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fdGMpXG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCYjNDM7JiM0Mzs7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7c3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4tXHRpZiAoIWlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKVxuJiM0MztcdGlmICghaXNfdGNfYWNjZWxfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNlbWRldi1cdTAwM2VudW1fYmxvY2tfaXBzZWMtLTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFwcml2LVx1MDAzZW1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpKVxuJiM0MztcdFx0cHJpdi1cdTAwM2VtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX2FjY2VsLS07XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIH1cbiBcbiBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbkBAIC00ODYzLDcgJiM0Mzs0ODcxLDcgQEAgaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4gXHRpZiAoIW1seDVfZXN3X2hvbGQocHJpdi1cdTAwM2VtZGV2KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdGVyciA9IG1seDVlX3RjX2Jsb2NrX2lwc2VjX29mZmxvYWQoZGV2LCBwcml2KTtcbiYjNDM7XHRlcnIgPSBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVzd19yZWxlYXNlO1xuIFxuQEAgLTQ5MTIsNyAmIzQzOzQ5MjAsNyBAQCBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBlcnJfZnJlZTpcbiBcdG1seDVlX2Zsb3dfcHV0KHByaXYsIGZsb3cpO1xuIG91dDpcbi1cdG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuJiM0MztcdG1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpO1xuIFx0bWx4NV9lc3dfcHV0KHByaXYtXHUwMDNlbWRldik7XG4gZXN3X3JlbGVhc2U6XG4gXHRtbHg1X2Vzd19yZWxlYXNlKHByaXYtXHUwMDNlbWRldik7XG5AQCAtNDk1NSw3ICYjNDM7NDk2Myw3IEBAIGludCBtbHg1ZV9kZWxldGVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIFx0dHJhY2VfbWx4NWVfZGVsZXRlX2Zsb3dlcihmKTtcbiBcdG1seDVlX2Zsb3dfcHV0KHByaXYsIGZsb3cpO1xuIFxuLVx0bWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7XG4mIzQzO1x0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRtbHg1X2Vzd19wdXQocHJpdi1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbmluZGV4IGUxYjhjYjc4MzY5ZjEuLjUzYjYwNDNlMzNkMjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZXN3aXRjaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlbi90Y19jdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW4vdGNfdHVuLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlbi90Yy9pbnRfcG9ydC5oXCYjMzQ7XG5AQCAtMzcwLDExICYjNDM7MzcxLDEzIEBAIHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqbWx4NWVfdGNfdGFibGVfYWxsb2Modm9pZCk7XG4gdm9pZCBtbHg1ZV90Y190YWJsZV9mcmVlKHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqdGMpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9jcWVfcmVnYl9jaGFpbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuIHtcbi1cdHUzMiBjaGFpbiwgcmVnX2I7XG4mIzQzO1x0dTMyIGZsb3dfdGFnLCByZWdfYiwgY2hhaW47XG4gXG4mIzQzO1x0Zmxvd190YWcgPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpO1xuIFx0cmVnX2IgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpO1xuIFxuLVx0aWYgKHJlZ19iIFx1MDAzZVx1MDAzZSAoTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX0JJVFMgJiM0MzsgRVNXX1pPTkVfSURfQklUUykpXG4mIzQzO1x0aWYgKGZsb3dfdGFnICE9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX05PTkUgfHxcbiYjNDM7XHQgICAgKHJlZ19iIFx1MDAzZVx1MDAzZSAoTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX0JJVFMgJiM0MzsgRVNXX1pPTkVfSURfQklUUykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjaGFpbiA9IHJlZ19iIFx1MDAyNiBNTFg1RV9UQ19UQUJMRV9DSEFJTl9UQUdfTUFTSztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuY1xuaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbHg1L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZnNfY29yZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bGliL21hY3NlY19mcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttbHg1X2NvcmUuaFwmIzM0O1xuIFxuIC8qIE1BQ3NlYyBUWCBmbG93IHN0ZWVyaW5nICovXG5AQCAtNDUsOSAmIzQzOzQ2LDYgQEBcbiAjZGVmaW5lIE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhPVVRfU0NJIDB4OFxuICNkZWZpbmUgTUxYNV9TRUNUQUdfSEVBREVSX1NJWkVfV0lUSF9TQ0kgKE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhPVVRfU0NJICYjNDM7IE1BQ1NFQ19TQ0lfTEVOKVxuIFxuLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi9cbi0jZGVmaW5lIG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpICgoZnNfaWQpIHwgQklUKDMwKSlcbi1cbiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHtcbiBcdF9fYmUxNiBldGhlcnR5cGU7XG4gXHR1OCB0Y2lfYW47XG5AQCAtMTc1NywxMSAmIzQzOzE3NTUsMTAgQEAgbWFjc2VjX2ZzX3J4X2FkZF9ydWxlKHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzLFxuIFx0cnhfdGFibGVzID0gXHUwMDI2cnhfZnMtXHUwMDNldGFibGVzO1xuIFx0ZnRfY3J5cHRvID0gXHUwMDI2cnhfdGFibGVzLVx1MDAzZWZ0X2NyeXB0bztcbiBcbi1cdC8qIFNldCBiaXRbMzEgLSAzMF0gbWFjc2VjIG1hcmtlciAtIDB4MDEgKi9cbiBcdC8qIFNldCBiaXRbMTUtMF0gZnMgaWQgKi9cbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcbi1cdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZGF0YSwgbWFjc2VjX2ZzX3NldF9yeF9mc19pZChmc19pZCkpO1xuJiM0MztcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZGF0YSwgZnNfaWQpO1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApO1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDMyKTtcbiBcbkBAIC0xNzc4LDYgJiM0MzsxNzc1LDkgQEAgbWFjc2VjX2ZzX3J4X2FkZF9ydWxlKHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzLFxuIFx0LyogUnggY3J5cHRvIHRhYmxlIHdpdGggU0NJIHJ1bGUgKi9cbiBcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXHUwMDI2Zmxvd19hY3QsIGF0dHJzLCB0cnVlKTtcbiBcbiYjNDM7XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbiYjNDM7XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQztcbiYjNDM7XG4gXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxuQEAgLTE4MDMsNiAmIzQzOzE4MDMsOSBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsXG4gXG4gXHRcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXHUwMDI2Zmxvd19hY3QsIGF0dHJzLCBmYWxzZSk7XG4gXG4mIzQzO1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbiYjNDM7XHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDO1xuJiM0MztcbiBcdFx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4gXHRcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4gXHRcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG5AQCAtMjE2MCw4ICYjNDM7MjE2Myw4IEBAIHN0YXRpYyBpbnQgbWx4NV9tYWNzZWNfZnNfYWRkX3JvY2VfcnVsZV9yeChzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywgdTMyXG4gXG4gXHRzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU18yO1xuIFx0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWEsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUpO1xuLVx0TUxYNV9TRVQoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX3ZhbHVlLCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181LFxuLVx0XHQgbWFjc2VjX2ZzX3NldF9yeF9mc19pZChmc19pZCkpO1xuJiM0MztcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbiYjNDM7XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181LCBmc19pZCk7XG4gXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQUxMT1c7XG4gXHRuZXdfcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZnMtXHUwMDNlcm9jZS5mdF9tYWNzZWNfb3BfY2hlY2ssIHNwZWMsIFx1MDAyNmZsb3dfYWN0LFxuIFx0XHRcdFx0ICAgICAgIE5VTEwsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXG5pbmRleCAxNWFjYWZmNDM2NDE3Li5iOGI4YjQxMmQ1YzNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaFxuQEAgLTYsMTEgJiM0Mzs2LDEwIEBAXG4gXG4gI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQ1xuIFxuLS8qIEJpdDMxIC0gMzA6IE1BQ3NlYyBtYXJrZXIsIEJpdDE1LTA6IE1BQ3NlYyBpZCAqL1xuLSNkZWZpbmUgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVggVVNIUlRfTUFYIC8qIE11c3QgYmUgcG93ZXIgb2YgdHdvICovXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgID09IDB4MSlcbi0jZGVmaW5lIE1MWDVfTUFDU0VDX1JYX01FVEFEQVRfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXG4mIzQzOy8qIE1BQ3NlYyBmc19pZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzE1OjBdICovXG4mIzQzOyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYIFVTSFJUX01BWCAvKiBNdXN0IGJlIHBvd2VyIG9mIHR3byAqL1xuJiM0MzsjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYXG4mIzQzOyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXG4gXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cbiAjZGVmaW5lIE1MWDVfRVRIX1dRRV9GVF9NRVRBX01BQ1NFQ19NQVNLIFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbmluZGV4IDY0M2I0YWFjMjAzMzYuLjQwNmMwZjdlNjNkODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG5AQCAtMTgxMCw2ICYjNDM7MTgxMCw3IEBAIGludCBtbHg1X21kZXZfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgcHJvZmlsZV9pZHgpXG4gXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XG4gXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZkZXYtXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCwgXHUwMDI2ZGV2LVx1MDAzZWxvY2tfa2V5KTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlbWx4NWVfcmVzLnVwbGlua19uZXRkZXZfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2V3Y19zdGF0ZV9sb2NrKTtcbiBcbkBAIC0xODk4LDYgJiM0MzsxODk5LDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VhbGxvY19tdXRleCk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLndjX2hlYWQubG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2VpbnRmX3N0YXRlX211dGV4KTtcbiBcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXHUwMDI2ZGV2LVx1MDAzZWxvY2tfa2V5KTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkyNSw2ICYjNDM7MTkyNyw3IEBAIHZvaWQgbWx4NV9tZGV2X3VuaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJmcmVncy5yZWdfaGVhZC5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZXdjX3N0YXRlX2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlbWx4NWVfcmVzLnVwbGlua19uZXRkZXZfbG9jayk7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZWludGZfc3RhdGVfbXV0ZXgpO1xuIFx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbmluZGV4IGIxODcxYzA4MjFkMGIuLjJkOWJjNzUyZTQzMWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTc4OCw4ICYjNDM7Nzg4LDExIEBAIHN0cnVjdCBtbHg1X2NvcmVfZGV2IHtcbiBcdHUzMiAgICAgICAgICAgICAgICAgICAgICB2c2NfYWRkcjtcbiBcdHN0cnVjdCBtbHg1X2h2X3ZoY2FcdCpodl92aGNhO1xuIFx0c3RydWN0IG1seDVfaHdtb25cdCpod21vbjtcbi1cdHU2NFx0XHRcdG51bV9ibG9ja190Yztcbi1cdHU2NFx0XHRcdG51bV9ibG9ja19pcHNlYztcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IG11dGV4IGxvY2s7XG4mIzQzO1x0XHR1NjQgbnVtX3RjO1xuJiM0MztcdFx0dTY0IG51bV9hY2NlbDtcbiYjNDM7XHR9IG9mZmxvYWRfYmxvY2s7XG4gI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQ1xuIFx0c3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnM7XG4gXHQvKiBNQUNzZWMgbm90aWZpZXIgY2hhaW4gdG8gc3luYyBNQUNzZWMgY29yZSBhbmQgSUIgZGF0YWJhc2UgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbmluZGV4IDMxNTY0OGE3NzBkMDAuLjliODk5NzIzYTYzNWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuQEAgLTE2LDExICYjNDM7MTYsMTIgQEAgZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF90cnVlLCBrc2Z0X2VxLCBrc2Z0X25lLCBrc2Z0X2d0LCBrc2Z0X3JhaXNlc1xuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9ub25lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcbi1mcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeFxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeCwgS3NmdFhmYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIE5ldERydkNvbnRFbnZcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0bGluaywgTmxFcnJvciwgUFNQRmFtaWx5LCBSdG5sRmFtaWx5XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBOZXRsaW5rLCBObEVycm9yLCBOZXRkZXZGYW1pbHksIFBTUEZhbWlseSwgUnRubEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBia2csIGV0aHRvb2wsIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlbiwgQ21kRXhpdEZhaWx1cmVcbiBmcm9tIGxpYi5weSBpbXBvcnQgaXBcbiBcbiBcbkBAIC0zMCwxNSAmIzQzOzMxLDI1IEBAIGRlZiBfZ2V0X291dHEocyk6XG4gICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKFwmIzM0O0lcJiMzNDssIG91dHEpWzBdXG4gXG4gXG4mIzQzO2RlZiBfcmVjdl9leGFjdChzb2NrLCBuKTpcbiYjNDM7ICAgIGJ1ZiA9IGImIzM5OyYjMzk7XG4mIzQzOyAgICB3aGlsZSBsZW4oYnVmKSBcdTAwM2MgbjpcbiYjNDM7ICAgICAgICBjaHVuayA9IHNvY2sucmVjdihuIC0gbGVuKGJ1ZikpXG4mIzQzOyAgICAgICAgaWYgbm90IGNodW5rOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgICAgIGJ1ZiAmIzQzOz0gY2h1bmtcbiYjNDM7ICAgIHJldHVybiBidWZcbiYjNDM7XG4mIzQzO1xuIGRlZiBfc2VuZF93aXRoX2FjayhjZmcsIG1zZyk6XG4tICAgIGNmZy5jb21tX3NvY2suc2VuZChtc2cpXG4tICAgIHJlc3BvbnNlID0gY2ZnLmNvbW1fc29jay5yZWN2KDQpXG4mIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKVxuJiM0MzsgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KVxuICAgICBpZiByZXNwb25zZSAhPSBiJiMzOTthY2tcXDAmIzM5OzpcbiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcJiMzNDtVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZVwmIzM0OywgcmVzcG9uc2UpXG4gXG4gXG4gZGVmIF9yZW1vdGVfcmVhZF9sZW4oY2ZnKTpcbi0gICAgY2ZnLmNvbW1fc29jay5zZW5kKGImIzM5O3JlYWQgbGVuXFwwJiMzOTspXG4mIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzk7cmVhZCBsZW5cXDAmIzM5OylcbiAgICAgcmV0dXJuIGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJiMzOTt1dGYtOCYjMzk7KSlcbiBcbiBcbkBAIC05Nyw3ICYjNDM7MTA4LDcgQEAgZGVmIF9zZW5kX2NhcmVmdWwoY2ZnLCBzLCByb3VuZHMpOlxuIGRlZiBfY2hlY2tfZGF0YV9yeChjZmcsIGV4cF9sZW4pOlxuICAgICByZWFkX2xlbiA9IC0xXG4gICAgIGZvciBfIGluIHJhbmdlKDMwKTpcbi0gICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiJiMzOTtyZWFkIGxlblxcMCYjMzk7KVxuJiM0MzsgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiJiMzOTtyZWFkIGxlblxcMCYjMzk7KVxuICAgICAgICAgcmVhZF9sZW4gPSBpbnQoY2ZnLmNvbW1fc29jay5yZWN2KDEwMjQpWzotMV0uZGVjb2RlKCYjMzk7dXRmLTgmIzM5OykpXG4gICAgICAgICBpZiByZWFkX2xlbiA9PSBleHBfbGVuOlxuICAgICAgICAgICAgIGJyZWFrXG5AQCAtNTgzLDYgJiM0Mzs1OTQsMTA4IEBAIGRlZiBfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciBpcHYgaW4gKFwmIzM0OzRcJiMzNDssIFwmIzM0OzZcJiMzNDspOlxuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQoZlwmIzM0O3Z7dmVyfV9pcHtpcHZ9XCYjMzQ7LCB2ZXIsIGlwdilcbiBcbiYjNDM7ZGVmIF9lbmFibGVfbG9jYWxfaHdfZ3JvKGNmZyk6XG4mIzQzOyAgICBjZmcucmVxdWlyZV9jbWQoXCYjMzQ7ZXRodG9vbFwmIzM0OylcbiYjNDM7ICAgIGZlYXQgPSBldGh0b29sKGZcJiMzNDstayB7Y2ZnLmlmbmFtZX1cJiMzNDssIGpzb249VHJ1ZSlbMF1cbiYjNDM7ICAgIGdybyA9IGZlYXQuZ2V0KFwmIzM0O3J4LWdyby1od1wmIzM0OylcbiYjNDM7ICAgIGlmIG5vdCBncm8gb3IgXCYjMzQ7YWN0aXZlXCYjMzQ7IG5vdCBpbiBncm8gb3IgXCYjMzQ7Zml4ZWRcJiMzNDsgbm90IGluIGdybzpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O0hXIEdSTyBmZWF0dXJlIG5vdCByZXBvcnRlZCBieSBldGh0b29sXCYjMzQ7KVxuJiM0MzsgICAgaWYgZ3JvW1wmIzM0O2ZpeGVkXCYjMzQ7XSBhbmQgbm90IGdyb1tcJiMzNDthY3RpdmVcJiMzNDtdOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRYZmFpbEV4KFwmIzM0O0hXIEdSTyBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVwmIzM0OylcbiYjNDM7ICAgIGlmIG5vdCBncm9bXCYjMzQ7YWN0aXZlXCYjMzQ7XTpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGV0aHRvb2woZlwmIzM0Oy1LIHtjZmcuaWZuYW1lfSByeC1ncm8taHcgb25cJiMzNDspXG4mIzQzOyAgICAgICAgZXhjZXB0IENtZEV4aXRGYWlsdXJlIGFzIGU6XG4mIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7Q2Fubm90IGVuYWJsZSBIVyBHUk8gdmlhIGV0aHRvb2xcJiMzNDspIGZyb20gZVxuJiM0MzsgICAgICAgIGRlZmVyKGV0aHRvb2wsIGZcJiMzNDstSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9mZlwmIzM0OylcbiYjNDM7ICAgICAgICBmZWF0ID0gZXRodG9vbChmXCYjMzQ7LWsge2NmZy5pZm5hbWV9XCYjMzQ7LCBqc29uPVRydWUpWzBdXG4mIzQzOyAgICAgICAgZ3JvID0gZmVhdC5nZXQoXCYjMzQ7cngtZ3JvLWh3XCYjMzQ7LCB7fSlcbiYjNDM7ICAgICAgICBpZiBub3QgZ3JvLmdldChcJiMzNDthY3RpdmVcJiMzNDspOlxuJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O0hXIEdSTyBmYWlsZWQgdG8gYWN0aXZhdGVcJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9yZW1vdGVfc2VuZChjZmcsIHNpemUpOlxuJiM0MzsgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGImIzM5O2RhdGEgc2VuZFxcMCYjMzk7ICYjNDM7IHN0cnVjdC5wYWNrKCYjMzk7IUkmIzM5Oywgc2l6ZSkpXG4mIzQzOyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpXG4mIzQzOyAgICBpZiByZXNwb25zZSAhPSBiJiMzOTthY2tcXDAmIzM5OzpcbiYjNDM7ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXCYjMzQ7VW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgdG8gZGF0YSBzZW5kXCYjMzQ7LCByZXNwb25zZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JlY3ZfYWxsKHMsIGV4cGVjdGVkLCB0aW1lb3V0PTIwKTpcbiYjNDM7ICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KVxuJiM0MzsgICAgdG90YWwgPSAwXG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgd2hpbGUgdG90YWwgXHUwMDNjIGV4cGVjdGVkOlxuJiM0MzsgICAgICAgICAgICBkYXRhID0gcy5yZWN2KG1pbig2NTUzNiwgZXhwZWN0ZWQgLSB0b3RhbCkpXG4mIzQzOyAgICAgICAgICAgIGlmIG5vdCBkYXRhOlxuJiM0MzsgICAgICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgICAgICAgICAgdG90YWwgJiM0Mzs9IGxlbihkYXRhKVxuJiM0MzsgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OlxuJiM0MzsgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiYjNDM7ICAgICAgICAgICAgZlwmIzM0O1RpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgZlwmIzM0OyhyZXNwb25kZXIgbWF5IGhhdmUgZmFpbGVkIHRvIHNlbmQpXCYjMzQ7KVxuJiM0MzsgICAgaWYgdG90YWwgXHUwMDNjIGV4cGVjdGVkOlxuJiM0MzsgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiYjNDM7ICAgICAgICAgICAgZlwmIzM0O1Nob3J0IHJlYWQ6IGdvdCB7dG90YWx9L3tleHBlY3RlZH0gYnl0ZXMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDsocmVzcG9uZGVyIGNvbm5lY3Rpb24gY2xvc2VkIGVhcmx5KVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiB0b3RhbFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDsgVGVzdCBQU1AgZGF0YSB0cmFuc2ZlciB3aXRoIEhXIEdSTyBlbmFibGVkIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpXG4mIzQzOyAgICAjIFZlcnNpb24gMCBpcyByZXF1aXJlZCBieSBzcGVjLCBkb24mIzM5O3QgbGV0IGl0IHNraXBcbiYjNDM7ICAgIGlmIHZlcnNpb246XG4mIzQzOyAgICAgICAgbmFtZSA9IGNmZy5wc3BubC5jb25zdHNbXCYjMzQ7dmVyc2lvblwmIzM0O10uZW50cmllc19ieV92YWxbdmVyc2lvbl0ubmFtZVxuJiM0MzsgICAgICAgIGlmIG5hbWUgbm90IGluIGNmZy5wc3BfaW5mb1smIzM5O3BzcC12ZXJzaW9ucy1jYXAmIzM5O106XG4mIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7UFNQIHZlcnNpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgbmFtZSlcbiYjNDM7XG4mIzQzOyAgICBfZW5hYmxlX2xvY2FsX2h3X2dybyhjZmcpXG4mIzQzO1xuJiM0MzsgICAgcyA9IF9tYWtlX3BzcF9jb25uKGNmZywgdmVyc2lvbiwgaXB2ZXIpXG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgcnhfYXNzb2MgPSBjZmcucHNwbmwucnhfYXNzb2Moe1wmIzM0O3ZlcnNpb25cJiMzNDs6IHZlcnNpb24sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtkZXYtaWRcJiMzNDs6IGNmZy5wc3BfZGV2X2lkLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG4mIzQzOyAgICAgICAgcnggPSByeF9hc3NvY1smIzM5O3J4LWtleSYjMzk7XVxuJiM0MzsgICAgICAgIHR4ID0gX3NwaV94Y2hnKHMsIHJ4KVxuJiM0MzsgICAgICAgIGNmZy5wc3BubC50eF9hc3NvYyh7XCYjMzQ7ZGV2LWlkXCYjMzQ7OiBjZmcucHNwX2Rldl9pZCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDt2ZXJzaW9uXCYjMzQ7OiB2ZXJzaW9uLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3R4LWtleVwmIzM0OzogdHgsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG4mIzQzO1xuJiM0MzsgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1wmIzM0O2lmaW5kZXhcJiMzNDs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVswXVxuJiM0MzsgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7cXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwmIzM0OykgZnJvbSBlXG4mIzQzOyAgICAgICAgICAgIHJhaXNlXG4mIzQzOyAgICAgICAgaWYgKCYjMzk7cngtaHctZ3JvLXBhY2tldHMmIzM5OyBub3QgaW4gYmVmb3JlIG9yXG4mIzQzOyAgICAgICAgICAgICYjMzk7cngtaHctZ3JvLXdpcmUtcGFja2V0cyYjMzk7IG5vdCBpbiBiZWZvcmUpOlxuJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O3J4LWh3LWdyby1wYWNrZXRzIGNvdW50ZXIgbm90IGF2YWlsYWJsZVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgIyBSZW1vdGUgc2VuZHMgZGF0YSBpbiA4S0IgY2h1bmtzOyBHU08gb24gcmVtb3RlIFRYIHNlZ21lbnRzIHRoZW0sXG4mIzQzOyAgICAgICAgIyBIVyBHUk8gcmVhc3NlbWJsZXMgb24gbG9jYWwgUlhcbiYjNDM7ICAgICAgICBkYXRhX2xlbiA9IDEwICogNjU1MzZcbiYjNDM7ICAgICAgICBfcmVtb3RlX3NlbmQoY2ZnLCBkYXRhX2xlbilcbiYjNDM7ICAgICAgICByZWN2X2xlbiA9IF9yZWN2X2FsbChzLCBkYXRhX2xlbilcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHJlY3ZfbGVuLCBkYXRhX2xlbilcbiYjNDM7XG4mIzQzOyAgICAgICAgY2ZnLndhaXRfaHdfc3RhdHNfc2V0dGxlKClcbiYjNDM7ICAgICAgICBhZnRlciA9IGNmZy5uZXRubC5xc3RhdHNfZ2V0KHtcJiMzNDtpZmluZGV4XCYjMzQ7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlbMF1cbiYjNDM7ICAgICAgICBrc2Z0X2d0KGFmdGVyWyYjMzk7cngtaHctZ3JvLXBhY2tldHMmIzM5O10sXG4mIzQzOyAgICAgICAgICAgICAgICBiZWZvcmVbJiMzOTtyeC1ody1ncm8tcGFja2V0cyYjMzk7XSlcbiYjNDM7ICAgICAgICBrc2Z0X2d0KGFmdGVyWyYjMzk7cngtaHctZ3JvLXdpcmUtcGFja2V0cyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgIGJlZm9yZVsmIzM5O3J4LWh3LWdyby13aXJlLXBhY2tldHMmIzM5O10pXG4mIzQzOyAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgIF9jbG9zZV9wc3BfY29ubihjZmcsIHMpXG4mIzQzO1xuJiM0MztAa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKSlcbiYjNDM7ZGVmIGRhdGFfaHdfZ3JvKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IFRlc3QgUFNQIGRhdGEgdHJhbnNmZXIgd2l0aCBIVyBHUk8gZW5hYmxlZCBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuJiM0MzsgICAgX2RhdGFfaHdfZ3JvKGNmZywgdmVyc2lvbiwgaXB2ZXIpXG4mIzQzO1xuIFxuIGRlZiBfZ2V0X2lwX3ZhcmlhbnRzKCk6XG4gICAgIGZvciBpcHYgaW4gKFwmIzM0OzRcJiMzNDssIFwmIzM0OzZcJiMzNDspOlxuQEAgLTkzNyw3ICYjNDM7MTA1MCw2IEBAIGRlZiBfc2V0dXBfcHNwX2F0dHJpYnV0ZXMoY2ZnKTpcbiAgICAgY2ZnLnBzcF9kZXZfcGVlcl9uc2lkID0gX2dldF9uc2lkKGNmZy5uZXRucy5uYW1lKVxuIFxuIFxuLVxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiBcJiMzNDtcJiMzNDtcJiMzNDtcbiBcbkBAIC05NTQsNiAmIzQzOzEwNjYsNyBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiBcbiAgICAgd2l0aCBlbnYgYXMgY2ZnOlxuICAgICAgICAgY2ZnLnBzcG5sID0gUFNQRmFtaWx5KClcbiYjNDM7ICAgICAgICBjZmcubmV0bmwgPSBOZXRkZXZGYW1pbHkoKVxuIFxuICAgICAgICAgaWYgaGFzX2NvbnQ6XG4gICAgICAgICAgICAgX3NldHVwX3BzcF9hdHRyaWJ1dGVzKGNmZylcbkBAIC05NzMsNyAmIzQzOzEwODYsNyBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fcG9ydCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xKVxuIFxuLSAgICAgICAgICAgICAgICBjYXNlcyA9IFtkYXRhX2Jhc2ljX3NlbmQsIGRhdGFfbXNzX2FkanVzdF1cbiYjNDM7ICAgICAgICAgICAgICAgIGNhc2VzID0gW2RhdGFfYmFzaWNfc2VuZCwgZGF0YV9od19ncm8sIGRhdGFfbXNzX2FkanVzdF1cbiBcbiAgICAgICAgICAgICAgICAgaWYgaGFzX2NvbnQ6XG4gICAgICAgICAgICAgICAgICAgICBjYXNlcyAmIzQzOz0gW1xuQEAgLTk5MCw3ICYjNDM7MTEwMyw3IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlX3BmeD17XCYjMzQ7ZGV2X1wmIzM0OywgXCYjMzQ7ZGF0YV9cJiMzNDssIFwmIzM0O2Fzc29jX1wmIzM0OywgXCYjMzQ7cmVtb3ZhbF9cJiMzNDt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXG4gXG4tICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiXCYjMzQ7ZXhpdFxcMFwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiXCYjMzQ7ZXhpdFxcMFwmIzM0OylcbiAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5jbG9zZSgpXG4gICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgIGlmIHNydiBhbmQgKHNydi5zdGRvdXQgb3Igc3J2LnN0ZGVycik6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jXG5pbmRleCBhMjZlNzYyOGJiYjEzLi45YTY3NWJmNDQ5ZjVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmNcbkBAIC0xLDUgJiM0MzsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3BvbGwuaFx1MDAzZVxuQEAgLTExOCw2ICYjNDM7MTE5LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfc3RyKGludCBzb2NrLCBpbnQgdmFsdWUpXG4gXHRzZW5kKHNvY2ssIGJ1ZiwgcmV0ICYjNDM7IDEsIE1TR19XQUlUQUxMKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc2VuZF9kYXRhKGludCBzb2NrLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBzYnVmWzgxOTJdID0gezB9O1xuJiM0MztcdHNzaXplX3Qgc2VudDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0c2l6ZV90IGNodW5rID0gbGVuO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjaHVuayBcdTAwM2Ugc2l6ZW9mKHNidWYpKVxuJiM0MztcdFx0XHRjaHVuayA9IHNpemVvZihzYnVmKTtcbiYjNDM7XG4mIzQzO1x0XHRzZW50ID0gc2VuZChzb2NrLCBzYnVmLCBjaHVuaywgTVNHX05PU0lHTkFMKTtcbiYjNDM7XHRcdGlmIChzZW50IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0VSUjogJXM6ICVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoc2VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFUlI6ICVzOiBwZWVyIGNsb3NlZFxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRsZW4gLT0gc2VudDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcbiBcdCAgICBpbnQgc2VydmVyX3NvY2ssIGludCBjb21tX3NvY2spXG5AQCAtMTg1LDIyICYjNDM7MjE0LDIyIEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHRvZmYgJiM0Mzs9IG47XG4tXHRcdFx0biA9IG9mZjtcbiBcbiAjZGVmaW5lIF9fY29uc3VtZShzeilcdFx0XHRcdFx0XHRcXFxuIFx0XHQoe1x0XHRcdFx0XHRcdFxcXG4tXHRcdFx0aWYgKG4gPT0gKHN6KSkge1x0XHRcdFxcXG4tXHRcdFx0XHRvZmYgPSAwO1x0XHRcdFxcXG4tXHRcdFx0fSBlbHNlIHtcdFx0XHRcdFxcXG4tXHRcdFx0XHRvZmYgLT0gKHN6KTtcdFx0XHRcXFxuLVx0XHRcdFx0bWVtbW92ZShidWYsIFx1MDAyNmJ1Zlsoc3opXSwgb2ZmKTtcdFxcXG4tXHRcdFx0fVx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRvZmYgLT0gKHN6KTtcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdG1lbW1vdmUoYnVmLCBcdTAwMjZidWZbKHN6KV0sIG9mZik7XHRcdFxcXG4gXHRcdH0pXG4gXG4tI2RlZmluZSBjbWQoX25hbWUpXHRcdFx0XHRcdFx0XHRcXFxuJiM0MzsvKiBPbmx5IG1hdGNoIG9uY2UgdGhlIGNvbW1hbmQgYW5kIGl0cyBfZXh0cmFfc3ogYnl0ZSBwYXlsb2FkIGFyZSBib3RoXG4mIzQzOyAqIGJ1ZmZlcmVkLCBvdGhlcndpc2UgYSBzcGxpdCByZWFkIHdvdWxkIGNvbnN1bWUgdGhlIG5hbWUgYW5kIHN0cmFuZFxuJiM0MzsgKiB0aGUgcGF5bG9hZCwgZGVzeW5jaHJvbml6aW5nIHRoZSBwYXJzZXIgZm9yIGdvb2QuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGNtZChfbmFtZSwgX2V4dHJhX3N6KVx0XHRcdFx0XHRcdFxcXG4gXHRcdCh7XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRcdHNzaXplX3Qgc3ogPSBzaXplb2YoX25hbWUpO1x0XHRcdFxcXG4tXHRcdFx0Ym9vbCBtYXRjaCA9IG4gXHUwMDNlPSBzeiBcdTAwMjZcdTAwMjZcdCFtZW1jbXAoYnVmLCBfbmFtZSwgc3opOyBcXFxuJiM0MztcdFx0XHRib29sIG1hdGNoID0gb2ZmIFx1MDAzZT0gc3ogJiM0MzsgKF9leHRyYV9zeikgXHUwMDI2XHUwMDI2XHRcdFxcXG4mIzQzO1x0XHRcdFx0IW1lbWNtcChidWYsIF9uYW1lLCBzeik7XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0XHRpZiAobWF0Y2gpIHtcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdGRiZyhcJiMzNDtjb21tYW5kOiBcJiMzNDsgX25hbWUgXCYjMzQ7XFxuXCYjMzQ7KTtcdFx0XFxcbkBAIC0yMTMsMTAgJiM0MzsyNDIsMTAgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0ZG8ge1xuIFx0XHRcdFx0Y29uc3VtZWQgPSBmYWxzZTtcbiBcbi1cdFx0XHRcdGlmIChjbWQoXCYjMzQ7cmVhZCBsZW5cJiMzNDspKVxuJiM0MztcdFx0XHRcdGlmIChjbWQoXCYjMzQ7cmVhZCBsZW5cJiMzNDssIDApKVxuIFx0XHRcdFx0XHRzZW5kX3N0cihjb21tX3NvY2ssIGRhdGFfcmVhZCk7XG4gXG4tXHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgZWNob1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgZWNob1wmIzM0OywgMCkpIHtcbiBcdFx0XHRcdFx0aWYgKGRhdGFfc29jayBcdTAwM2U9IDApXG4gXHRcdFx0XHRcdFx0c2VuZChkYXRhX3NvY2ssIFwmIzM0O2VjaG9cJiMzNDssIDUsXG4gXHRcdFx0XHRcdFx0ICAgICBNU0dfV0FJVEFMTCk7XG5AQCAtMjI0LDcgJiM0MzsyNTMsMjcgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dBUk46IGVjaG8gYnV0IG5vIGRhdGEgc29ja1xcblwmIzM0Oyk7XG4gXHRcdFx0XHRcdHNlbmRfYWNrKGNvbW1fc29jayk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgY2xvc2VcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGNtZChcJiMzNDtkYXRhIHNlbmRcJiMzNDssIDQpKSB7XG4mIzQzO1x0XHRcdFx0XHRfX3UzMiBsZW47XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNmxlbiwgYnVmLCBzaXplb2YobGVuKSk7XG4mIzQzO1x0XHRcdFx0XHRfX2NvbnN1bWUoc2l6ZW9mKGxlbikpO1xuJiM0MztcdFx0XHRcdFx0bGVuID0gbnRvaGwobGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0XHRpZiAoZGF0YV9zb2NrIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XHRcdFx0XHRcdFwmIzM0O1dBUk46IHNlbmQgYnV0IG5vIGRhdGEgc29ja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0XHRcdHNlbmRfZXJyKGNvbW1fc29jayk7XG4mIzQzO1x0XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHRcdHNlbmRfYWNrKGNvbW1fc29jayk7XG4mIzQzO1x0XHRcdFx0XHRpZiAoc2VuZF9kYXRhKGRhdGFfc29jaywgbGVuKSlcbiYjNDM7XHRcdFx0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XCYjMzQ7V0FSTjogc2VuZCBpbmNvbXBsZXRlIGZvciAldSBieXRlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRsZW4pO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgY2xvc2VcJiMzNDssIDApKSB7XG4gXHRcdFx0XHRcdGlmIChkYXRhX3NvY2sgXHUwMDNlPSAwKSB7XG4gXHRcdFx0XHRcdFx0Y2xvc2UoZGF0YV9zb2NrKTtcbiBcdFx0XHRcdFx0XHRkYXRhX3NvY2sgPSAtMTtcbkBAIC0yMzMsMjYgJiM0MzsyODIsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0XHRcdFx0cmFjZV9jbG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCYjMzQ7Y29ubiBwc3BcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGNtZChcJiMzNDtjb25uIHBzcFwmIzM0OywgMikpIHtcbiBcdFx0XHRcdFx0aWYgKGFjY2VwdF9jZmcgIT0gQUNDRVBUX0NGR19OT05FKVxuIFx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXQVJOOiBvbGQgY29ubiBjb25maWcgc3RpbGwgc2V0IVxcblwmIzM0Oyk7XG4gXHRcdFx0XHRcdGFjY2VwdF9jZmcgPSBBQ0NFUFRfQ0ZHX1BTUDtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdFx0LyogbmV4dCB0d28gYnl0ZXMgYXJlIHZlcnNpb25zICovXG4tXHRcdFx0XHRcdGlmIChvZmYgXHUwMDNlPSAyKSB7XG4tXHRcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNnBzcF92ZXJzLCBidWYsIDIpO1xuLVx0XHRcdFx0XHRcdF9fY29uc3VtZSgyKTtcbi1cdFx0XHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTjogc2hvcnQgY29ubiBwc3AgY29tbWFuZCFcXG5cJiMzNDspO1xuLVx0XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0XHRtZW1jcHkoXHUwMDI2cHNwX3ZlcnMsIGJ1ZiwgMik7XG4mIzQzO1x0XHRcdFx0XHRfX2NvbnN1bWUoMik7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAoY21kKFwmIzM0O2Nvbm4gY2xyXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRcdGlmIChjbWQoXCYjMzQ7Y29ubiBjbHJcJiMzNDssIDApKSB7XG4gXHRcdFx0XHRcdGlmIChhY2NlcHRfY2ZnICE9IEFDQ0VQVF9DRkdfTk9ORSlcbiBcdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTjogb2xkIGNvbm4gY29uZmlnIHN0aWxsIHNldCFcXG5cJiMzNDspO1xuIFx0XHRcdFx0XHRhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCYjMzQ7ZXhpdFwmIzM0OykpXG4mIzQzO1x0XHRcdFx0aWYgKGNtZChcJiMzNDtleGl0XCYjMzQ7LCAwKSlcbiBcdFx0XHRcdFx0c2hvdWxkX3F1aXQgPSB0cnVlO1xuICN1bmRlZiBjbWRcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwOTozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQ0ZGE0MTE5ODgyNzgwM2NjNjBiM2QwZDZlNWNhMWM4MGNhNGU5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDk6MzQ6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oCmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oCkBAIC05OCw2ICYjNDM7OTgsNyBAQCBlbnVtIHsKICNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUCkKIAlNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgJiM0MzsgMSwKIAlNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMLAomIzQzOwlNTFg1RV9BQ0NFTF9GU19QU1BfREVDQVBfRlRfTEVWRUwsCiAJTUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaAppbmRleCAzZjIxMmU0NmZjMmY5Li5hMGJiMTljYzk1NmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaApAQCAtMjE4LDYgJiM0MzsyMTgsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLAogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttZGV2LSZndDtvZmZsb2FkX2Jsb2NrLmxvY2spOwomIzQzOwlpZiAobWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpCiYjNDM7CQlyZXQgPSAtRUJVU1k7CiYjNDM7CWVsc2UKJiM0MzsJCW1kZXYtJmd0O29mZmxvYWRfYmxvY2subnVtX3RjJiM0MzsmIzQzOzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldikKJiM0Mzt7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttZGV2LSZndDtvZmZsb2FkX2Jsb2NrLmxvY2spOwomIzQzOwlpZiAoIVdBUk5fT05fT05DRSghbWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fdGMpKQomIzQzOwkJbWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fdGMtLTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXJldHVybiBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7CkBAIC0yMjksNiAmIzQzOzI1MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAltbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19NTFg1X0VOX1BTUAomIzQzOwlyZXR1cm4gbWx4NWVfcHNwX3VwZGF0ZV9yeChwcml2KTsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gMDsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3R4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXJldHVybiBtbHg1ZV9rdGxzX2luaXRfdHgocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ0MjJmOTZmZmNlZDAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaApAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIExpbnV4LU9wZW5JQiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OICZhbXA7IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX01MWDVFX0ZMT1dfVEFHX0hfXwomIzQzOyNkZWZpbmUgX19NTFg1RV9GTE9XX1RBR19IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWx4NS9kZXZpY2UuaCZndDsKJiM0MzsKJiM0MzsvKiBVbmlmaWVkIGFjY2VsIGZsb3dfdGFnIGxheW91dCBpbiBDUUUgc29wX2Ryb3BfcXBuIFsyMzowXToKJiM0MzsgKgomIzQzOyAqICAgWzIzOjIxXSA9IHByb3RvY29sIElEICgzIGJpdHMpOgomIzQzOyAqICAgICAgICAgICAgICAwID0gbm9uZSAoZGVmYXVsdCkKJiM0MzsgKiAgICAgICAgICAgICAgMSA9IElQc2VjCiYjNDM7ICogICAgICAgICAgICAgIDIgPSBNQUNzZWMKJiM0MzsgKiAgICAgICAgICAgICAgMyA9IFBTUCAoSFcgZGVjcnlwdGVkLCBQU1AgaGVhZGVyIHByZXNlbnQpCiYjNDM7ICogICAgICAgICAgICAgIDQgPSBQU1AgZGVjYXAgKEhXIGRlY3J5cHRlZCAmYW1wOyBkZWNhcHN1bGF0ZWQpCiYjNDM7ICogICAgICAgICAgICAgIDUtNyA9IHJlc2VydmVkCiYjNDM7ICogICBbMjA6MTddID0gUFNQIHZlcnNpb24gKDQgYml0cywgdmFsaWQgd2hlbiBwcm90byA9PSBQU1AgZGVjYXApCiYjNDM7ICogICAxNiAgICAgID0gcmVzZXJ2ZWQKJiM0MzsgKiAgIFsxNTowXSAgPSB1c2VkIGJ5IG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gVEMpLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFTSwkJR0VOTUFTSygyMywgMjEpCiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19OT05FCQkoMCAmbHQ7Jmx0OyAyMSkKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDCSgxICZsdDsmbHQ7IDIxKQomIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDCSgyICZsdDsmbHQ7IDIxKQomIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQCQkoMyAmbHQ7Jmx0OyAyMSkKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUAkoNCAmbHQ7Jmx0OyAyMSkKJiM0MzsKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQJMTcKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSwkoMHhGICZsdDsmbHQ7IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWx4NWVfYWNjZWxfZmxvd190YWcoc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBiZTMyX3RvX2NwdShjcWUtJmd0O3NvcF9kcm9wX3FwbikgJmFtcDsgMHhGRkZGRkY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWx4NWVfYWNjZWxfZmxvd190YWcoY3FlKSAmYW1wOyBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX19NTFg1RV9GTE9XX1RBR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmMKaW5kZXggMzI5NjA4YzU5MzEzYi4uMDgxY2IyZjMxYmUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmMKQEAgLTQsNiAmIzQzOzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtlbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vZnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtlc3dpdGNoLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpcHNlYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZnNfY29yZS5oJiMzNDsKQEAgLTE4OSw3ICYjNDM7MTkxLDcgQEAgc3RhdGljIHZvaWQgaXBzZWNfcnhfcnVsZV9hZGRfbWF0Y2hfb2JqKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnksCiAJCQkJIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzIpOwogCQlNTFg1X1NFVChmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtJmd0O21hdGNoX3ZhbHVlLAogCQkJIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzIsCi0JCQkgc2FfZW50cnktJmd0O2lwc2VjX29ial9pZCB8IEJJVCgzMSkpOwomIzQzOwkJCSBzYV9lbnRyeS0mZ3Q7aXBzZWNfb2JqX2lkKTsKIAogCQlzcGVjLSZndDttYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjsKIAl9CkBAIC0yMDY1LDcgJiM0MzsyMDY3LDcgQEAgc3RhdGljIGludCByeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KQogCWlmICghYXR0cnMtJmd0O2Ryb3ApIHsKIAkJaWYgKHJ4ICE9IGlwc2VjLSZndDtyeF9lc3cpCiAJCQllcnIgPSBzZXR1cF9tb2RpZnlfaGVhZGVyKGlwc2VjLCBhdHRycy0mZ3Q7dHlwZSwKLQkJCQkJCSAgc2FfZW50cnktJmd0O2lwc2VjX29ial9pZCB8IEJJVCgzMSksCiYjNDM7CQkJCQkJICBzYV9lbnRyeS0mZ3Q7aXBzZWNfb2JqX2lkLAogCQkJCQkJICBYRlJNX0RFVl9PRkZMT0FEX0lOLCAmYW1wO2Zsb3dfYWN0KTsKIAkJZWxzZQogCQkJZXJyID0gbWx4NV9lc3dfaXBzZWNfcnhfc2V0dXBfbW9kaWZ5X2hlYWRlcihzYV9lbnRyeSwgJmFtcDtmbG93X2FjdCk7CkBAIC0yMDk4LDYgJiM0MzsyMTAwLDEwIEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSkKIAkJZmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QOwogCWVsc2UKIAkJZmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDsKJiM0MzsJaWYgKCFhdHRycy0mZ3Q7ZHJvcCAmYW1wOyZhbXA7IHJ4ICE9IGlwc2VjLSZndDtyeF9lc3cpIHsKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRzsKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDOwomIzQzOwl9CiAJZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTsKIAlkZXN0WzBdLmZ0ID0gcngtJmd0O2Z0LnN0YXR1czsKIAlkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSOwpAQCAtMjU3NCw1MyAmIzQzOzI1ODAsMTkgQEAgdm9pZCBtbHg1ZV9hY2NlbF9pcHNlY19mc19yZWFkX3N0YXRzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCB2b2lkICppcHNlY19zdGF0cykKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENICi1zdGF0aWMgaW50IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpCi17Ci0Jc3RydWN0IG1seDVfZXN3aXRjaCAqZXN3ID0gbWRldi0mZ3Q7cHJpdi5lc3dpdGNoOwotCWludCBlcnIgPSAwOwotCi0JaWYgKGVzdykgewotCQllcnIgPSBtbHg1X2Vzd19sb2NrKGVzdyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChtZGV2LSZndDtudW1fYmxvY2tfaXBzZWMpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQltZGV2LSZndDtudW1fYmxvY2tfdGMmIzQzOyYjNDM7OwotCi11bmxvY2s6Ci0JaWYgKGVzdykKLQkJbWx4NV9lc3dfdW5sb2NrKGVzdyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldikKLXsKLQlpZiAobWRldi0mZ3Q7bnVtX2Jsb2NrX2lwc2VjKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbWRldi0mZ3Q7bnVtX2Jsb2NrX3RjJiM0MzsmIzQzOzsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpCiYjNDM7c3RhdGljIGJvb2wgYWNjZWxfaXBzZWNfc2hvdWxkX2Jsb2NrX3RjKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpCiB7Ci0JbWRldi0mZ3Q7bnVtX2Jsb2NrX3RjLS07CiYjNDM7CXJldHVybiBzYV9lbnRyeS0mZ3Q7YXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCB8fAomIzQzOwkJc2FfZW50cnktJmd0O2F0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOOwogfQogCiBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSkKIHsKJiM0MzsJYm9vbCBibG9ja190YyA9IGFjY2VsX2lwc2VjX3Nob3VsZF9ibG9ja190YyhzYV9lbnRyeSk7CiAJaW50IGVycjsKIAotCWlmIChzYV9lbnRyeS0mZ3Q7YXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkgewotCQllcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiYjNDM7CWlmIChibG9ja190YykgewomIzQzOwkJZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChzYV9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yNjM2LDggJiM0MzsyNjA4LDggQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpCiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JaWYgKHNhX2VudHJ5LSZndDthdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKQotCQltbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktJmd0O2lwc2VjLSZndDttZGV2KTsKJiM0MzsJaWYgKGJsb2NrX3RjKQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjY1MSw4ICYjNDM7MjYyMyw4IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSkKIAlpZiAoaXBzZWNfcnVsZS0mZ3Q7cGt0X3JlZm9ybWF0KQogCQltbHg1X3BhY2tldF9yZWZvcm1hdF9kZWFsbG9jKG1kZXYsIGlwc2VjX3J1bGUtJmd0O3BrdF9yZWZvcm1hdCk7CiAKLQlpZiAoc2FfZW50cnktJmd0O2F0dHJzLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpCi0JCW1seDVlX2lwc2VjX3VuYmxvY2tfdGNfb2ZmbG9hZChtZGV2KTsKJiM0MzsJaWYgKGFjY2VsX2lwc2VjX3Nob3VsZF9ibG9ja190YyhzYV9lbnRyeSkpCiYjNDM7CQltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWRldik7CiAKIAlpZiAoc2FfZW50cnktJmd0O2F0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX09VVCkgewogCQl0eF9mdF9wdXQoc2FfZW50cnktJmd0O2lwc2VjLCBzYV9lbnRyeS0mZ3Q7YXR0cnMudHlwZSk7CkBAIC0yNjg2LDcgJiM0MzsyNjU4LDcgQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KQogewogCWludCBlcnI7CiAKLQllcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwomIzQzOwllcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI3MDEsNyAmIzQzOzI2NzMsNyBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpCiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwomIzQzOwltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjcxMiw3ICYjNDM7MjY4NCw3IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpCiAKIAltbHg1X2RlbF9mbG93X3J1bGVzKGlwc2VjX3J1bGUtJmd0O3J1bGUpOwogCi0JbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwomIzQzOwltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiAKIAlpZiAocG9sX2VudHJ5LSZndDthdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTikgewogCQlyeF9mdF9wdXRfcG9saWN5KHBvbF9lbnRyeS0mZ3Q7aXBzZWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaAppbmRleCA0NWIwZDE5ZTczNWNiLi42ZGVhNTk3OGE0MGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmgKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2VuLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtlbi90eHJ4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAKLS8qIEJpdDMxOiBJUHNlYyBtYXJrZXIsIEJpdDMwOiByZXNlcnZlZCwgQml0MjktMjQ6IElQc2VjIHN5bmRyb21lLCBCaXQyMy0wOiBJUHNlYyBvYmogaWQgKi8KLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpICZndDsmZ3Q7IDMwKSAmYW1wOyAweDMpID09IDB4MikKLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9TWU5EUk9NKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgJmd0OyZndDsgMjQpICZhbXA7IEdFTk1BU0soNSwgMCkpCiYjNDM7LyogSVBzZWMgb2JqIGlkIGluIGZ0X21ldGFkYXRhIGJpdHNbMjM6MF0gKi8KICNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSAmYW1wOyBHRU5NQVNLKDIzLCAwKSkKIAogc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0YXRlIHsKQEAgLTc0LDcgJiM0Mzs3Myw5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX2lwc2VjX3R4X2lkc19sZW4oc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1X2lwc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIHsKLQlyZXR1cm4gTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIoYmUzMl90b19jcHUoY3FlLSZndDtmdF9tZXRhZGF0YSkpOwomIzQzOwl1MzIgcHJvdG8gPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9pcHNlY19lc2VnX21ldGEoc3RydWN0IG1seDVfd3FlX2V0aF9zZWcgKmVzZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmMKaW5kZXggZGFmZjUzYmE3ZDA5Zi4uYWE3YTI4OTU0ODYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICYjMzQ7ZW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xpYi9hc28uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xpYi9jcnlwdG8uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvbWFjc2VjLmgmIzM0OwogCiAjZGVmaW5lIE1MWDVfTUFDU0VDX0VQTl9TQ09QRV9NSUQgMHg4MDAwMDAwMEwKQEAgLTMyNCw2ICYjNDM7MzI1LDggQEAgc3RhdGljIHZvaWQgbWx4NWVfbWFjc2VjX2NsZWFudXBfc2FfZnMoc3RydWN0IG1seDVlX21hY3NlYyAqbWFjc2VjLAogCW1seDVfbWFjc2VjX2ZzX2RlbF9ydWxlKG1hY3NlYy0mZ3Q7bWRldi0mZ3Q7bWFjc2VjX2ZzLCBzYS0mZ3Q7bWFjc2VjX3J1bGUsIGFjdGlvbiwgbmV0ZGV2LAogCQkJCWZzX2lkKTsKIAlzYS0mZ3Q7bWFjc2VjX3J1bGUgPSBOVUxMOwomIzQzOwlpZiAoIWlzX3R4KQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1hY3NlYy0mZ3Q7bWRldik7CiB9CiAKIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYywKQEAgLTM0Myw2ICYjNDM7MzQ2LDcgQEAgc3RhdGljIGludCBtbHg1ZV9tYWNzZWNfaW5pdF9zYV9mcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCwKIAljb25zdCBzdHJ1Y3QgbWFjc2VjX3R4X3NjICp0eF9zYyA9ICZhbXA7Y3R4LSZndDtzZWN5LSZndDt0eF9zYzsKIAlzdHJ1Y3QgbWx4NV9tYWNzZWNfcnVsZV9hdHRycyBydWxlX2F0dHJzOwogCXVuaW9uIG1seDVfbWFjc2VjX3J1bGUgKm1hY3NlY19ydWxlOwomIzQzOwlpbnQgZXJyID0gMDsKIAogCWlmIChpc190eCAmYW1wOyZhbXA7IHR4X3NjLSZndDtlbmNvZGluZ19zYSAhPSBzYS0mZ3Q7YXNzb2NfbnVtKQogCQlyZXR1cm4gMDsKQEAgLTM1MywxMyAmIzQzOzM1NywyNiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhX2ZzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LAogCXJ1bGVfYXR0cnMuYWN0aW9uID0gKGlzX3R4KSA/IE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9FTkNSWVBUIDoKIAkJCQkgICAgICBNTFg1X0FDQ0VMX01BQ1NFQ19BQ1RJT05fREVDUllQVDsKIAomIzQzOwlpZiAoIWlzX3R4KSB7CiYjNDM7CQllcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHByaXYtJmd0O21kZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiAJbWFjc2VjX3J1bGUgPSBtbHg1X21hY3NlY19mc19hZGRfcnVsZShtYWNzZWNfZnMsIGN0eCwgJmFtcDtydWxlX2F0dHJzLCBmc19pZCk7Ci0JaWYgKCFtYWNzZWNfcnVsZSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmICghbWFjc2VjX3J1bGUpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dF91bmJsb2NrX3RjOwomIzQzOwl9CiAKIAlzYS0mZ3Q7bWFjc2VjX3J1bGUgPSBtYWNzZWNfcnVsZTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dF91bmJsb2NrX3RjOgomIzQzOwlpZiAoIWlzX3R4KQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHByaXYtJmd0O21kZXYpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LApAQCAtNzM1LDEyICYjNDM7NzUyLDEyIEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2FkZF9yeHNjKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4KQogCSAqIGEgbm9uLU5VTEwgbWRfZHN0IHdpdGggdW5pbml0aWFsaXNlZCBjb250ZW50cy4KIAkgKi8KIAllcnIgPSB4YV9hbGxvYygmYW1wO21hY3NlYy0mZ3Q7c2NfeGFycmF5LCAmYW1wO3NjX3hhcnJheV9lbGVtZW50LSZndDtmc19pZCwgc2NfeGFycmF5X2VsZW1lbnQsCi0JCSAgICAgICBYQV9MSU1JVCgxLCBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWCksIEdGUF9LRVJORUwpOwomIzQzOwkJICAgICAgIFhBX0xJTUlUKDEsIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCksIEdGUF9LRVJORUwpOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciA9PSAtRUJVU1kpCiAJCQluZXRkZXZfZXJyKGN0eC0mZ3Q7bmV0ZGV2LAogCQkJCSAgICYjMzQ7TUFDc2VjIG9mZmxvYWQ6IHVuYWJsZSB0byBjcmVhdGUgZW50cnkgZm9yIFJYIFNDICglZCBSeCBTQ3MgYWxyZWFkeSBhbGxvY2F0ZWQpXG4mIzM0OywKLQkJCQkgICBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWCk7CiYjNDM7CQkJCSAgIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCk7CiAJCWdvdG8gZGVzdHJveV9tZF9kc3Q7CiAJfQogCkBAIC0xMTM3LDcgJiM0MzsxMTU0LDEyIEBAIHN0YXRpYyBpbnQgbWFjc2VjX3VwZF9zZWN5X2h3X2FkZHJlc3Moc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsCiAJc3RydWN0IG1seDVlX21hY3NlY19zYSAqcnhfc2E7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAlpbnQgaSwgZXJyID0gMDsKJiM0MzsJYm9vbCBibG9ja190YzsKIAomIzQzOwkvKiBCZXN0LWVmZm9ydCBUQyBibG9jayBhY3Jvc3MgdGhlIG9wZXJhdGlvbiwgdG8gcHJldmVudCBhIG1pc3RpbWVkIFRDCiYjNDM7CSAqIGZpbHRlciBhZGQgZnJvbSBwcmV2ZW50aW5nIHRoZSAybmQgbG9vcCBmcm9tIGhhcHBlbmluZy4KJiM0MzsJICovCiYjNDM7CWJsb2NrX3RjID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwcml2LSZndDttZGV2KSA9PSAwOwogCiAJbGlzdCA9ICZhbXA7bWFjc2VjX2RldmljZS0mZ3Q7bWFjc2VjX3J4X3NjX2xpc3RfaGVhZDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfc2MsIHRtcCwgbGlzdCwgcnhfc2NfbGlzdF9lbGVtZW50KSB7CkBAIC0xMTY4LDYgJiM0MzsxMTkwLDggQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCwKIAogCW1lbWNweShtYWNzZWNfZGV2aWNlLSZndDtkZXZfYWRkciwgZGV2LSZndDtkZXZfYWRkciwgZGV2LSZndDthZGRyX2xlbik7CiBvdXQ6CiYjNDM7CWlmIChibG9ja190YykKJiM0MzsJCW1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwcml2LSZndDttZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzAwLDcgJiM0MzsxNzI0LDcgQEAgdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJaWYgKCFtYWNzZWMpCiAJCXJldHVybjsKIAotCWZzX2lkID0gTUxYNV9NQUNTRUNfUlhfTUVUQURBVF9IQU5ETEUobWFjc2VjX21ldGFfZGF0YSk7CiYjNDM7CWZzX2lkID0gTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1hY3NlY19tZXRhX2RhdGEpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXNjX3hhcnJheV9lbGVtZW50ID0geGFfbG9hZCgmYW1wO21hY3NlYy0mZ3Q7c2NfeGFycmF5LCBmc19pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmgKaW5kZXggMjdkZjcyZTIzMTA2ZC4uNTcxNjI0ZjJkYjE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuaApAQCAtOSw2ICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWx4NS9kcml2ZXIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzdF9tZXRhZGF0YS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xpYi9tYWNzZWNfZnMuaCYjMzQ7CiAKIHN0cnVjdCBtbHg1ZV9wcml2OwpAQCAtMzEsNyAmIzQzOzMyLDkgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX21hY3NlY19za2JfaXNfb2ZmbG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIHsKLQlyZXR1cm4gTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7ZnRfbWV0YWRhdGEpKTsKJiM0MzsJdTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByb3RvID09IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQzsKIH0KIAogdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMKaW5kZXggNzNiMjMyMzc5MjYzYS4uYWQ4ZGJkOGMyZjI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYwpAQCAtNiw3ICYjNDM7Niw5IEBACiAjaW5jbHVkZSAmIzM0O21seDVfY29yZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cHNwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtsaWIvY3J5cHRvLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZW5fYWNjZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL3BzcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL3BzcF9yeHR4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtmc19jb3JlLmgmIzM0OwogCiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHsKQEAgLTIxLDYgJiM0MzsyMywxMyBAQCBlbnVtIGFjY2VsX3BzcF9zeW5kcm9tZSB7CiAJUFNQX0JBRF9UUkFJTEVSLAogfTsKIAomIzQzO3N0YXRpYyBjb25zdCB1OCBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW10gPSB7CiYjNDM7CVBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8xMjgsCiYjNDM7CVBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8yNTYsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TIEFSUkFZX1NJWkUocHNwX3N1cHBvcnRlZF92ZXJzaW9ucykKJiM0MzsKIHN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUgewogCXN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpuczsKIAlzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDsKQEAgLTQxLDcgJiM0Mzs1MCw3IEBAIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSB7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiAJc3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlOwotCXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKnJ4X21vZGlmeV9oZHI7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiB9OwogCkBAIC01Miw2ICYjNDM7NjEsMTUgQEAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVkcF9ydWxlc1tBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTsKIH07CiAKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY2FwX3RhYmxlIHsKJiM0MzsJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmRyb3BfZ3JvdXA7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiYjNDM7CXN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdCAqcmVmb3JtYXQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlW01MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TXTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVuc3VwcG9ydGVkX3J1bGU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBtbHg1ZV9wc3BfZnMgewogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2OwogCXN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyOwpAQCAtNjMsMTIgJiM0Mzs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHsKIAlzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7CiAJc3RydWN0IG1seDVfZmMgKnJ4X2Vycl9jb3VudGVyOwogCXN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjsKJiM0MzsJLyogV2hlbiBzZXQsIHN0ZWVyaW5nIGlzIGNvbmZpZ3VyZWQgdG8gZGVjYXBzdWxhdGUgUFNQIChyZW1vdmUgVURQJiM0MztQU1AKJiM0MzsJICogaGVhZGVycyBhbmQgUFNQIHRyYWlsZXIpIGFuZCBoYW5kIG9mZiB0aGUgU1BJIGluIGNxZS5mdF9tZXRhZGF0YS4KJiM0MzsJICovCiYjNDM7CWJvb2wgZGVjYXBfZW5hYmxlZDsKIAogCXN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSBkZWNyeXB0W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdOwogCXN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7CiAJc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSByeDsKIH07CiAKJiM0MztzdGF0aWMgYm9vbCBzaGFtcG9fZW5hYmxlZChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtjaGFubmVscy5wYXJhbXMucGFja2V0X21lcmdlLnR5cGUgPT0KJiM0MzsJCU1MWDVFX1BBQ0tFVF9NRVJHRV9TSEFNUE87CiYjNDM7fQomIzQzOwogLyogUFNQIFJYIGZsb3cgc3RlZXJpbmcgKi8KIHN0YXRpYyBlbnVtIG1seDVfdHJhZmZpY190eXBlcyBmc19wc3AydHQoZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpKQogewpAQCAtMTEwLDYgJiM0MzsxMzksMTUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICoqbW9kaGRyKQomIzQzO3sKJiM0MzsJaWYgKCptb2RoZHIpIHsKJiM0MzsJCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGRldiwgKm1vZGhkcik7CiYjNDM7CQkqbW9kaGRyID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LAogCQkJCQkgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cCkKIHsKQEAgLTQwMiwxNSAmIzQzOzQ0MCwxNjEgQEAgaW50IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYwomIzQzO3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKCZhbXA7ZGVjYXAtJmd0O3Vuc3VwcG9ydGVkX3J1bGUpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7IGkmIzQzOyYjNDM7KQomIzQzOwkJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtkZWNhcC0mZ3Q7cnVsZVtpXSk7CiYjNDM7CWlmIChkZWNhcC0mZ3Q7cmVmb3JtYXQpIHsKJiM0MzsJCW1seDVfcGFja2V0X3JlZm9ybWF0X2RlYWxsb2MoZnMtJmd0O21kZXYsIGRlY2FwLSZndDtyZWZvcm1hdCk7CiYjNDM7CQlkZWNhcC0mZ3Q7cmVmb3JtYXQgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtJmd0O21kZXYsICZhbXA7ZGVjYXAtJmd0O21vZGlmeV9oZHIpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKCZhbXA7ZGVjYXAtJmd0O2Ryb3BfZ3JvdXApOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9mdCgmYW1wO2RlY2FwLSZndDtmdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX2Z0ZV9wc3BfdmVyc2lvbihzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHU4IHZlcnNpb24pCiYjNDM7ewomIzQzOwl2b2lkICptaXNjX3BhcmFtc182OwomIzQzOwomIzQzOwltZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7CiYjNDM7CXNwZWMtJmd0O21hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU182OwomIzQzOwltaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfY3JpdGVyaWEsCiYjNDM7CQkJCSAgICAgbWlzY19wYXJhbWV0ZXJzXzYpOwomIzQzOwlNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uKTsKJiM0MzsJbWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtJmd0O21hdGNoX3ZhbHVlLAomIzQzOwkJCQkgICAgIG1pc2NfcGFyYW1ldGVyc182KTsKJiM0MzsJTUxYNV9TRVQoZnRlX21hdGNoX3NldF9taXNjNiwgbWlzY19wYXJhbXNfNiwgcHNwX3ZlcnNpb24sIHZlcnNpb24pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMKJiM0MztpbnQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKJiM0MzsJCQkJICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKQomIzQzO3sKJiM0MzsJdTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfcGt0X3JlZm9ybWF0X3BhcmFtcyByZWZvcm1hdF9wYXJhbXMgPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtJmd0O21kZXY7CiYjNDM7CXN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdCAqcmVmb3JtYXQ7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlOwomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiYjNDM7CWludCBpLCBlcnIgPSAwOwomIzQzOwomIzQzOwlzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTsKJiM0MzsJaWYgKCFzcGVjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBGVCAqLwomIzQzOwlmdF9hdHRyLm1heF9mdGUgPSAxICYjNDM7IE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TOwomIzQzOwlmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX0RFQ0FQX0ZUX0xFVkVMOwomIzQzOwlmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTzsKJiM0MzsJZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7ZGVjYXAtJmd0O2Z0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBmdCBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9zcGVjOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBkcm9wIGdyb3VwICovCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNhcC0mZ3Q7ZnQsICZhbXA7ZGVjYXAtJmd0O2Ryb3BfZ3JvdXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsCiYjNDM7CQkJICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgcnggZHJvcF9ncm91cCBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWRkIGRlZmF1bHQgZHJvcCBydWxlICovCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGRlY2FwLSZndDtmdCwgTlVMTCwgZnMtJmd0O3J4X2JhZF9jb3VudGVyLAomIzQzOwkJCQkgICAgICAmYW1wO2RlY2FwLSZndDt1bnN1cHBvcnRlZF9ydWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIGRlY2FwIHVuc3VwcG9ydGVkIHZlcnNpb25zIGRyb3AgcnVsZSBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbW9kaWZ5X2hkcjogY29weSBTUEkgZnJvbSBSRUdfQ18wIHRvIFJFR19CICovCiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpOwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsCiYjNDM7CQkgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0NfMCk7CiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19vZmZzZXQsIDApOwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi8KJiM0MzsJTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLAomIzQzOwkJIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTsKJiM0MzsJTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMCk7CiYjNDM7CiYjNDM7CW1vZGlmeV9oZHIgPSBtbHg1X21vZGlmeV9oZWFkZXJfYWxsb2MobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwsCiYjNDM7CQkJCQkgICAgICAxLCBhY3Rpb24pOwomIzQzOwlpZiAoSVNfRVJSKG1vZGlmeV9oZHIpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpOwomIzQzOwkJZ290byBvdXRfZXJyOwomIzQzOwl9CiYjNDM7CWRlY2FwLSZndDttb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjsKJiM0MzsKJiM0MzsJLyogcGt0X3JlZm9ybWF0OiBkZWNhcCBQU1AgdHJhbnNwb3J0ICovCiYjNDM7CXJlZm9ybWF0X3BhcmFtcy50eXBlID0gTUxYNV9SRUZPUk1BVF9UWVBFX1JFTU9WRV9QU1BfVFJBTlNQT1JUOwomIzQzOwlyZWZvcm1hdCA9IG1seDVfcGFja2V0X3JlZm9ybWF0X2FsbG9jKG1kZXYsICZhbXA7cmVmb3JtYXRfcGFyYW1zLAomIzQzOwkJCQkJICAgICAgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwpOwomIzQzOwlpZiAoSVNfRVJSKHJlZm9ybWF0KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihyZWZvcm1hdCk7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiYjNDM7CX0KJiM0MzsJZGVjYXAtJmd0O3JlZm9ybWF0ID0gcmVmb3JtYXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IHZlcnNpb24gPSBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW2ldOwomIzQzOwkJc3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTsKJiM0MzsKJiM0MzsJCS8qIG1hdGNoKHZlcnNpb24pID0mZ3Q7IGRlY2FwLCBjb3B5IFNQSSwgZndkIHRvIHJ4IEZUICovCiYjNDM7CQlzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3BlYywgdmVyc2lvbik7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogT3ZlcnJpZGUgdGhlIGZsb3cgdGFnIHNldCBpbiB0aGUgZGVjcnlwdCB0YWJsZSB3aXRoCiYjNDM7CQkgKiB0aGUgZGVjYXAgUFNQIG1hcmtlciBhbmQgdmVyc2lvbi4KJiM0MzsJCSAqLwomIzQzOwkJc3BlYy0mZ3Q7Zmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7CiYjNDM7CQlzcGVjLSZndDtmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVAgfAomIzQzOwkJCSgodTMyKXZlcnNpb24gJmx0OyZsdDsgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVCk7CiYjNDM7CiYjNDM7CQlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fUEFDS0VUX1JFRk9STUFUIHwKJiM0MzsJCQlNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8CiYjNDM7CQkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUOwomIzQzOwkJZmxvd19hY3QucGt0X3JlZm9ybWF0ID0gcmVmb3JtYXQ7CiYjNDM7CQlmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjsKJiM0MzsJCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7CiYjNDM7CQlkZXN0LmZ0ID0gZnMtJmd0O3J4LmZ0OwomIzQzOwomIzQzOwkJcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjYXAtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCAmYW1wO2Rlc3QsIDEpOwomIzQzOwkJaWYgKElTX0VSUihydWxlKSkgewomIzQzOwkJCWVyciA9IFBUUl9FUlIocnVsZSk7CiYjNDM7CQkJZ290byBvdXRfZXJyOwomIzQzOwkJfQomIzQzOwkJZGVjYXAtJmd0O3J1bGVbaV0gPSBydWxlOwomIzQzOwl9CiYjNDM7CWdvdG8gb3V0X3NwZWM7CiYjNDM7CiYjNDM7b3V0X2VycjoKJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIGRlY2FwKTsKJiM0MztvdXRfc3BlYzoKJiM0MzsJa3ZmcmVlKHNwZWMpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAogCQkJCSAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdCkKIHsKIAlhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZSgmYW1wO2RlY3J5cHQtJmd0O3J1bGUpOwotCWlmIChkZWNyeXB0LSZndDtyeF9tb2RpZnlfaGRyKSB7Ci0JCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCBkZWNyeXB0LSZndDtyeF9tb2RpZnlfaGRyKTsKLQkJZGVjcnlwdC0mZ3Q7cnhfbW9kaWZ5X2hkciA9IE5VTEw7Ci0JfQomIzQzOwlhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLSZndDttZGV2LCAmYW1wO2RlY3J5cHQtJmd0O21vZGlmeV9oZHIpOwogCWFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKCZhbXA7ZGVjcnlwdC0mZ3Q7bWlzc19ydWxlKTsKIAlhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKCZhbXA7ZGVjcnlwdC0mZ3Q7bWlzc19ncm91cCk7CiAJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoJmFtcDtkZWNyeXB0LSZndDtmdCk7CkBAIC00MzEsMTEgJiM0Mzs2MTUsMTEgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAogCQkJCSAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KQogewogCXU4IGFjdGlvbltNTFg1X1VOX1NaX0JZVEVTKHNldF9hZGRfY29weV9hY3Rpb25faW5fYXV0byldID0ge307Ci0Jc3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkciA9IE5VTEw7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKIAlzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLSZndDttZGV2OwogCU1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGhkcjsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiAJaW50IGVyciA9IDA7CkBAIC00NzksMzAgJiM0Mzs2NjMsMzYgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAogCX0KIAlkZWNyeXB0LSZndDttaXNzX3J1bGUgPSBydWxlOwogCi0JLyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi8KLQlzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7Ci0JZmxvd19hY3QuY3J5cHRvLnR5cGUgPSBNTFg1X0ZMT1dfQ09OVEVYVF9FTkNSWVBUX0RFQ1JZUFRfVFlQRV9QU1A7Ci0JLyogU2V0IGJpdFszMSwgMzBdIFBTUCBtYXJrZXIgKi8KLSNkZWZpbmUgTUxYNUVfUFNQX01BUktFUl9CSVQgKEJJVCgzMCkgfCBCSVQoMzEpKQotCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTsKLQlNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7Ci0JTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBNTFg1RV9QU1BfTUFSS0VSX0JJVCk7Ci0JTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApOwotCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7Ci0KLQltb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLCAxLCBhY3Rpb24pOwotCWlmIChJU19FUlIobW9kaWZ5X2hkcikpIHsKLQkJZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gYWxsb2MgcHNwIHNldCBtb2RpZnlfaGVhZGVyX2lkIGVycj0lZFxuJiMzNDssIGVycik7Ci0JCW1vZGlmeV9oZHIgPSBOVUxMOwomIzQzOwkvKiBDcmVhdGUgbW9kaWZ5X2hkciB0byBjb3B5IFNQSSB0byBSRUdfQ18wICovCiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpOwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsCiYjNDM7CQkgTUxYNV9BQ1RJT05fSU5fRklFTERfUFNQX0hFQURFUl8xKTsKJiM0MzsJTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7CiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMCk7ICAvKiAwID0gMzIgYml0cyAqLwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsCiYjNDM7CQkgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0NfMCk7CiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApOwomIzQzOwomIzQzOwltb2RoZHIgPSBtbHg1X21vZGlmeV9oZWFkZXJfYWxsb2MobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwsIDEsCiYjNDM7CQkJCQkgIGFjdGlvbik7CiYjNDM7CWlmIChJU19FUlIobW9kaGRyKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihtb2RoZHIpOwogCQlnb3RvIG91dF9lcnI7CiAJfQotCWRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyOwomIzQzOwlkZWNyeXB0LSZndDttb2RpZnlfaGRyID0gbW9kaGRyOwogCi0JZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFI7Ci0JZmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiYjNDM7CS8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovCiYjNDM7CXNldHVwX2Z0ZV91ZHBfcHNwKHNwZWMsIFBTUF9ERUZBVUxUX1VEUF9QT1JUKTsKJiM0MzsKJiM0MzsJLyogU2V0IFBTUCBtYXJrZXIgdmlhIGZsb3dfdGFnICovCiYjNDM7CXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbGFncyA9IEZMT1dfQ09OVEVYVF9IQVNfVEFHOwomIzQzOwlzcGVjLSZndDtmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1A7CiYjNDM7CiYjNDM7CWZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQOwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfAomIzQzOwkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfAomIzQzOwkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUOwomIzQzOwlmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaGRyOwogCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7CiAJZGVzdC5mdCA9IGZzLSZndDtjaGVjay5mdDsKIAlydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKQEAgLTUyMyw5ICYjNDM7NzEzLDUwIEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfcmVjb25maWd1cmUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgICBib29sIGRlY2FwX3dhbnRlZCkKJiM0Mzt7CiYjNDM7CWJvb2wgZGVjYXBfc3VwcG9ydGVkID0KJiM0MzsJCU1MWDVfQ0FQX0ZMT1dUQUJMRShmcy0mZ3Q7bWRldiwKJiM0MzsJCQkJICAgZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlZm9ybWF0X2RlbF9wc3BfdHJhbnNwb3J0KTsKJiM0MzsJYm9vbCBkZWNhcF9lbmFibGUgPSBkZWNhcF93YW50ZWQgJmFtcDsmYW1wOyBkZWNhcF9zdXBwb3J0ZWQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgdGhlIGRlY2FwIHRhYmxlIGlmIG5lZWRlZC4gKi8KJiM0MzsJaWYgKGRlY2FwX2VuYWJsZSAmYW1wOyZhbXA7ICFmcy0mZ3Q7ZGVjYXAuZnQpIHsKJiM0MzsJCWVyciA9IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoZnMsICZhbXA7ZnMtJmd0O2RlY2FwKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQltbHg1X2NvcmVfd2Fybihmcy0mZ3Q7bWRldiwKJiM0MzsJCQkJICAgICAgICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGUmIzM0OywKJiM0MzsJCQkJICAgICAgIGVycik7CiYjNDM7CQkJZGVjYXBfZW5hYmxlID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGRlY2FwX2VuYWJsZSA9PSBmcy0mZ3Q7ZGVjYXBfZW5hYmxlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBSZWRpcmVjdCB0cmFmZmljIHRvIHRoZSBjb3JyZWN0IHRhYmxlLiAqLwomIzQzOwlkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwomIzQzOwlkZXN0LmZ0ID0gZGVjYXBfZW5hYmxlID8gZnMtJmd0O2RlY2FwLmZ0IDogZnMtJmd0O3J4LmZ0OwomIzQzOwllcnIgPSBtbHg1X21vZGlmeV9ydWxlX2Rlc3RpbmF0aW9uKGZzLSZndDtjaGVjay5ydWxlLCAmYW1wO2Rlc3QsIE5VTEwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveV9mdDsKJiM0MzsKJiM0MzsJZnMtJmd0O2RlY2FwX2VuYWJsZWQgPSBkZWNhcF9lbmFibGU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9kZXN0cm95X2Z0OgomIzQzOwlpZiAoZGVjYXBfZW5hYmxlKQomIzQzOwkJYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsICZhbXA7ZnMtJmd0O2RlY2FwKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIHsKIAlzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtJmd0O2ZzLCBmYWxzZSk7CiYjNDM7CWJvb2wgdGNfYmxvY2tlZCA9IGZzLSZndDtyeC5mdDsKIAlpbnQgaTsKIAogCS8qIGRpc2Nvbm5lY3QgKi8KQEAgLTUzNCwxOSAmIzQzOzc2NSwyOSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAkJYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgJmFtcDtmcy0mZ3Q7ZGVjcnlwdFtpXSk7CiAJfQogCWFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KCZhbXA7ZnMtJmd0O2NoZWNrKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsICZhbXA7ZnMtJmd0O2RlY2FwKTsKIAlhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveSgmYW1wO2ZzLSZndDtyeCk7CiYjNDM7CWlmICh0Y19ibG9ja2VkKQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLSZndDttZGV2KTsKIH0KIAogc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAomIzQzOwkJCQkgIGJvb2wgZGVjYXBfZW5hYmxlLAogCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKIAlpbnQgaSwgZXJyOwogCiYjNDM7CWVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoZnMtJmd0O21kZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7VEMgb2ZmbG9hZCBhY3RpdmUsIGNhbm5vdCBlbmFibGUgUFNQJiMzNDspOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCWVyciA9IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoZnMsICZhbXA7ZnMtJmd0O3J4KTsKIAlpZiAoZXJyKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtGYWlsZWQgY3JlYXRpbmcgUlggc3RlZXJpbmcgdGFibGUmIzM0Oyk7Ci0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl91bmJsb2NrX3RjOwogCX0KIAogCWVyciA9IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoZnMsICZhbXA7ZnMtJmd0O2NoZWNrKTsKQEAgLTU3Myw2ICYjNDM7ODE0LDEyIEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAkJbWx4NV90dGNfZndkX2Rlc3QodHRjLCBmc19wc3AydHQoaSksICZhbXA7ZGVzdCk7CiAJfQogCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShmcywgZGVjYXBfZW5hYmxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ZhaWxlZCBSWCBzdGVlcmluZyBjb25maWcgZm9yIEhXIEdSTyYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX2RlY3J5cHRfZnQ7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyX2RlY3J5cHRfZnQ6CkBAIC01ODMsNiAmIzQzOzgzMCw4IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAlhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveSgmYW1wO2ZzLSZndDtjaGVjayk7CiBlcnJfZnQ6CiAJYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7cngpOwomIzQzO2Vycl91bmJsb2NrX3RjOgomIzQzOwltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQoZnMtJmd0O21kZXYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTgzOSw3ICYjNDM7MTA4OCw4IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShwcml2LSZndDtwc3AtJmd0O2ZzLCBleHRhY2spOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtJmd0O3BzcC0mZ3Q7ZnMsIHNoYW1wb19lbmFibGVkKHByaXYpLAomIzQzOwkJCQkgICAgIGV4dGFjayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTExNiwzICYjNDM7MTM2NiwxNCBAQCB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogCXByaXYtJmd0O3BzcCA9IE5VTEw7CiAJa2ZyZWUocHNwKTsKIH0KJiM0MzsKJiM0MztpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtJmd0O3BzcDsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Fzc2VydF9sb2NrZWQocHJpdi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJaWYgKCFwc3AgfHwgIXBzcC0mZ3Q7ZnMtJmd0O2NoZWNrLmZ0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBhY2NlbF9wc3BfZnNfcnhfcmVjb25maWd1cmUocHNwLSZndDtmcywgc2hhbXBvX2VuYWJsZWQocHJpdikpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaAppbmRleCAzZjQ0MWU3ZGQ1NWFjLi43NmY2YzY5ZGUwZTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oCkBAIC00OSw2ICYjNDM7NDksNyBAQCBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwomIzQzO2ludCBtbHg1ZV9wc3BfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KQEAgLTYxLDUgJiM0Mzs2Miw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfTUxYNV9FTl9QU1AgKi8KICNlbmRpZiAvKiBfX01MWDVFX0FDQ0VMX1BTUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMKaW5kZXggMzQ4ZmQ3YTk2MjYxNS4uMmJlZmZlZTE0Mjc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMKQEAgLTExOCwxMCAmIzQzOzExOCwyNSBAQCBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKgogewogCXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MTYgZGV2X2lkID0gcHJpdi0mZ3Q7cHNwLSZndDtwc2QtJmd0O2lkOwotCWJvb2wgc3RyaXBfaWN2ID0gdHJ1ZTsKLQl1OCBnZW5lcmF0aW9uID0gMDsKJiM0MzsJc3RydWN0IHBzcF9za2JfZXh0ICpwc2U7CiYjNDM7CiYjNDM7CWlmIChtbHg1ZV9wc3BfaXNfZGVjYXAoY3FlKSkgewomIzQzOwkJLyogVURQICYjNDM7IFBTUCBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlciByZW1vdmVkIGJ5IEhXLgomIzQzOwkJICogQ29uc3RydWN0IHRoZSBQU1AgZXh0ZW5zaW9uIGZyb20gQ1FFIG1ldGFkYXRhLgomIzQzOwkJICovCiYjNDM7CQlwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTsKJiM0MzsJCWlmICh1bmxpa2VseSghcHNlKSkKJiM0MzsJCQlnb3RvIGRyb3A7CiYjNDM7CiYjNDM7CQlwc2UtJmd0O3NwaSA9IG1seDVlX3BzcF9nZXRfc3BpKGNxZSk7CiYjNDM7CQlwc2UtJmd0O3ZlcnNpb24gPSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTsKJiM0MzsJCXBzZS0mZ3Q7ZGV2X2lkID0gZGV2X2lkOwomIzQzOwkJcHNlLSZndDtnZW5lcmF0aW9uID0gMDsKJiM0MzsJCXNrYi0mZ3Q7ZGVjcnlwdGVkID0gMTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCi0JaWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCBnZW5lcmF0aW9uLCBzdHJpcF9pY3YpKQomIzQzOwlpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIDAsIHRydWUpKQogCQlnb3RvIGRyb3A7CiAKIAlza2ItJmd0O2RlY3J5cHRlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCmluZGV4IDJiMDgwYzM5Y2MzN2UuLjQxYjYwMjU5YjNiYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCkBAIC05LDEwICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3BzcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtlbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vdHhyeC5oJiMzNDsKLQotLyogQml0MzA6IFBTUCBtYXJrZXIsIEJpdDIyLTA6IFBTUCBvYmogaWQgKi8KLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSAmZ3Q7Jmd0OyAzMCkgJmFtcDsgMHgzKSA9PSAweDMpCi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpICZhbXA7IEdFTk1BU0soMjIsIDApKQomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAKIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUgewogCXUzMiB0YWlsZW47CkBAIC04Miw3ICYjNDM7NzksMjkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWx4NWVfcHNwX3R4X2lkc19sZW4oc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIHsKLQlyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7ZnRfbWV0YWRhdGEpKTsKJiM0MzsJdTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByb3RvID09IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUCB8fAomIzQzOwkJcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwl1MzIgcHJvdG8gPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHU4IG1seDVlX3BzcF9nZXRfdmVyc2lvbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpICZhbXA7IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSykgJmd0OyZndDsKJiM0MzsJCU1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgX19iZTMyIG1seDVlX3BzcF9nZXRfc3BpKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3FlLSZndDtmdF9tZXRhZGF0YTsKIH0KIAogYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xMTAsNiAmIzQzOzEyOSwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkJICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jCmluZGV4IDNiOWQ0MmM3ZTljMjguLjNjNmVmNTAwZDBmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwpAQCAtNjI4Niw3ICYjNDM7NjI4NiwxMyBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAogc3RhdGljIGludCBtbHg1ZV91cGRhdGVfbmljX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewotCXJldHVybiBtbHg1ZV9yZWZyZXNoX3RpcnMocHJpdi0mZ3Q7bWRldiwgZmFsc2UsIGZhbHNlKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWx4NWVfcmVmcmVzaF90aXJzKHByaXYtJmd0O21kZXYsIGZhbHNlLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHByaXYpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1seDVlX3Byb2ZpbGUgbWx4NWVfbmljX3Byb2ZpbGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jCmluZGV4IGZiNzExMGIxYjY4MzQuLmM3ZWFhYjNmNzk2N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jCkBAIC0yMjIxLDYgJiM0MzsyMjIxLDMzIEBAIHN0YXRpYyBib29sIG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gcGFnZV9zaXplICogbnJfZnJhZ3MgJiM0MzsgZGF0YV9iY250ICZsdDs9IEdST19MRUdBQ1lfTUFYX1NJWkU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fcHNwX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTUxYNV9FTl9QU1AKJiM0MzsJc3RydWN0IHBzcF9za2JfZXh0ICpwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7CiYjNDM7CWJvb2wgaXNfcHNwID0gbWx4NWVfcHNwX2lzX3J4X2Zsb3coY3FlKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseSghaXNfcHNwICZhbXA7JmFtcDsgIXBzZSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogTm8gbWF0Y2ggb24gUFNQIHN0YXR1cyBjaGFuZ2UgKG5vIGNyeXB0byAtJmd0OyBjcnlwdG8gb3IgdmljZS12ZXJzYSkuICovCiYjNDM7CWlmICh1bmxpa2VseShpc19wc3AgIT0gISFwc2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBTUEkgYW5kIHZlcnNpb24gYXJlIG9ubHkgYXZhaWxhYmxlIGluIENRRSBtZXRhZGF0YSBmb3IgZGVjYXAgZmxvd3MuCiYjNDM7CSAqIE5vbi1kZWNhcCBQU1AgY2Fubm90IGJlIG1hdGNoZWQgaGVyZSwgZm9yY2UgYSBmbHVzaC4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseSghbWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBObyBtYXRjaCBvbiBzZWN1cml0eSBwYXJhbWV0ZXJzIGNoYW5nZS4gKi8KJiM0MzsJcmV0dXJuIHBzZS0mZ3Q7c3BpID09IG1seDVlX3BzcF9nZXRfc3BpKGNxZSkgJmFtcDsmYW1wOwomIzQzOwkJcHNlLSZndDt2ZXJzaW9uID09IG1seDVlX3BzcF9nZXRfdmVyc2lvbihjcWUpOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiB0cnVlOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3cnFfc2hhbXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiB7CiAJdTE2IGRhdGFfYmNudAkJPSBtcHdycV9nZXRfY3FlX2J5dGVfY250KGNxZSkgLSBjcWUtJmd0O3NoYW1wby5oZWFkZXJfc2l6ZTsKQEAgLTIyNTgsOCAmIzQzOzIyODUsOSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcQogCWRhdGFfb2Zmc2V0ID0gd3FlX29mZnNldCAmYW1wOyAocGFnZV9zaXplIC0gMSk7CiAJcGFnZV9pZHggPSB3cWVfb2Zmc2V0ICZndDsmZ3Q7IHJxLSZndDttcHdxZS5wYWdlX3NoaWZ0OwogCWlmICgqc2tiICZhbXA7JmFtcDsKLQkgICAgIShtYXRjaCAmYW1wOyZhbXA7IG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsCi0JCQkJCQkJIHBhZ2Vfc2l6ZSkpKSB7CiYjNDM7CSAgICAhKG1hdGNoICZhbXA7JmFtcDsKJiM0MzsJICAgICAgbWx4NWVfaHdfZ3JvX3NrYl9oYXNfZW5vdWdoX3NwYWNlKCpza2IsIGRhdGFfYmNudCwgcGFnZV9zaXplKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIG1seDVlX2h3X2dyb19wc3BfbWF0Y2goKnNrYiwgY3FlKSkpIHsKIAkJbWF0Y2ggPSBmYWxzZTsKIAkJbWx4NWVfc2hhbXBvX2ZsdXNoX3NrYihycSwgY3FlLCBtYXRjaCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYwppbmRleCAxYmM3YjkwMTkxMjRhLi43MDE5NWZjZGRmYzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYwpAQCAtNDgxMSwxNCAmIzQzOzQ4MTEsMTQgQEAgc3RhdGljIGJvb2wgaXNfZmxvd19ydWxlX2R1cGxpY2F0ZV9hbGxvd2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIG5ldGlmX2lzX2xhZ19wb3J0KGRldikgJmFtcDsmYW1wOyBycHJpdiAmYW1wOyZhbXA7IHJwcml2LSZndDtyZXAtJmd0O3Zwb3J0ICE9IE1MWDVfVlBPUlRfVVBMSU5LOwogfQogCi0vKiBBcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUtb2ZmbG9hZCwKLSAqIGVpdGhlciBJUHNlYyBvZmZsb2FkIG9yIFRDIG9mZmxvYWQsIG5vdCBib3RoLCBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS4KJiM0MzsvKiBUQyBvZmZsb2FkIGFuZCBhY2NlbCBwcm90b2NvbHMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90aGVyJiMzOTtzIGZsb3dfdGFnIHdpdGgKJiM0MzsgKiBzdGVlcmluZyBydWxlcyBhbmQgdGhleSBjYW5ub3Qgc2ltdWx0YW5lb3VzbHkgb3BlcmF0ZSBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuCiYjNDM7ICogQWRkaXRpb25hbGx5LCBhcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmQKJiM0MzsgKiBoYXJkd2FyZS1vZmZsb2FkLCBvbmx5IG9uZSBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS4KICAqLwotc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO3N0YXRpYyBib29sIGlzX3RjX2FjY2VsX2NoZWNrX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfTUxYNV9FTl9JUFNFQykpCi0JCXJldHVybiBmYWxzZTsKLQogCWlmIChmaWx0ZXIgIT0gcHJpdi0mZ3Q7bmV0ZGV2KQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTQ4MjgsMjcgJiM0Mzs0ODI4LDM1IEBAIHN0YXRpYyBib29sIGlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4CiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0MztzdGF0aWMgaW50IG1seDVlX3RjX2Jsb2NrX2FjY2VsX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwKJiM0MzsJCQkJCXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi0mZ3Q7bWRldjsKJiM0MzsJaW50IHJldCA9IDA7CiAKLQlpZiAoIWlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKQomIzQzOwlpZiAoIWlzX3RjX2FjY2VsX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKQogCQlyZXR1cm4gMDsKIAotCWlmIChtZGV2LSZndDtudW1fYmxvY2tfdGMpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZGV2LSZndDtudW1fYmxvY2tfaXBzZWMmIzQzOyYjNDM7OwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKJiM0MzsJaWYgKG1kZXYtJmd0O29mZmxvYWRfYmxvY2subnVtX3RjKQomIzQzOwkJcmV0ID0gLUVCVVNZOwomIzQzOwllbHNlCiYjNDM7CQltZGV2LSZndDtvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCYjNDM7JiM0Mzs7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21kZXYtJmd0O29mZmxvYWRfYmxvY2subG9jayk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO3N0YXRpYyB2b2lkIG1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLAomIzQzOwkJCQkJICAgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7Ci0JaWYgKCFpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSkKJiM0MzsJaWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSkKIAkJcmV0dXJuOwogCi0JcHJpdi0mZ3Q7bWRldi0mZ3Q7bnVtX2Jsb2NrX2lwc2VjLS07CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDttZGV2LSZndDtvZmZsb2FkX2Jsb2NrLmxvY2spOwomIzQzOwlpZiAoIVdBUk5fT05fT05DRSghcHJpdi0mZ3Q7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpKQomIzQzOwkJcHJpdi0mZ3Q7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fYWNjZWwtLTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKIH0KIAogaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCkBAIC00ODYzLDcgJiM0Mzs0ODcxLDcgQEAgaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiAJaWYgKCFtbHg1X2Vzd19ob2xkKHByaXYtJmd0O21kZXYpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZXJyID0gbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpOwomIzQzOwllcnIgPSBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7CiAJaWYgKGVycikKIAkJZ290byBlc3dfcmVsZWFzZTsKIApAQCAtNDkxMiw3ICYjNDM7NDkyMCw3IEBAIGludCBtbHg1ZV9jb25maWd1cmVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LAogZXJyX2ZyZWU6CiAJbWx4NWVfZmxvd19wdXQocHJpdiwgZmxvdyk7CiBvdXQ6Ci0JbWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7CiYjNDM7CW1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpOwogCW1seDVfZXN3X3B1dChwcml2LSZndDttZGV2KTsKIGVzd19yZWxlYXNlOgogCW1seDVfZXN3X3JlbGVhc2UocHJpdi0mZ3Q7bWRldik7CkBAIC00OTU1LDcgJiM0Mzs0OTYzLDcgQEAgaW50IG1seDVlX2RlbGV0ZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiAJdHJhY2VfbWx4NWVfZGVsZXRlX2Zsb3dlcihmKTsKIAltbHg1ZV9mbG93X3B1dChwcml2LCBmbG93KTsKIAotCW1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpOwomIzQzOwltbHg1ZV90Y191bmJsb2NrX2FjY2VsX29mZmxvYWQoZGV2LCBwcml2KTsKIAltbHg1X2Vzd19wdXQocHJpdi0mZ3Q7bWRldik7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmgKaW5kZXggZTFiOGNiNzgzNjlmMS4uNTNiNjA0M2UzM2QyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Vzd2l0Y2guaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9hY2NlbC9mbG93X3RhZy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vdGNfY3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuL3RjX3R1bi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vdGMvaW50X3BvcnQuaCYjMzQ7CkBAIC0zNzAsMTEgJiM0MzszNzEsMTMgQEAgc3RydWN0IG1seDVlX3RjX3RhYmxlICptbHg1ZV90Y190YWJsZV9hbGxvYyh2b2lkKTsKIHZvaWQgbWx4NWVfdGNfdGFibGVfZnJlZShzdHJ1Y3QgbWx4NWVfdGNfdGFibGUgKnRjKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9jcWVfcmVnYl9jaGFpbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKQogewotCXUzMiBjaGFpbiwgcmVnX2I7CiYjNDM7CXUzMiBmbG93X3RhZywgcmVnX2IsIGNoYWluOwogCiYjNDM7CWZsb3dfdGFnID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTsKIAlyZWdfYiA9IGJlMzJfdG9fY3B1KGNxZS0mZ3Q7ZnRfbWV0YWRhdGEpOwogCi0JaWYgKHJlZ19iICZndDsmZ3Q7IChNTFg1RV9UQ19UQUJMRV9DSEFJTl9UQUdfQklUUyAmIzQzOyBFU1dfWk9ORV9JRF9CSVRTKSkKJiM0MzsJaWYgKGZsb3dfdGFnICE9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX05PTkUgfHwKJiM0MzsJICAgIChyZWdfYiAmZ3Q7Jmd0OyAoTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX0JJVFMgJiM0MzsgRVNXX1pPTkVfSURfQklUUykpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAljaGFpbiA9IHJlZ19iICZhbXA7IE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19NQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmMKaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbHg1L21hY3NlYy5oJmd0OwogI2luY2x1ZGUgJiMzNDtmc19jb3JlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtsaWIvbWFjc2VjX2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O21seDVfY29yZS5oJiMzNDsKIAogLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi8KQEAgLTQ1LDkgJiM0Mzs0Niw2IEBACiAjZGVmaW5lIE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhPVVRfU0NJIDB4OAogI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIX1NDSSAoTUxYNV9TRUNUQUdfSEVBREVSX1NJWkVfV0lUSE9VVF9TQ0kgJiM0MzsgTUFDU0VDX1NDSV9MRU4pCiAKLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi8KLSNkZWZpbmUgbWFjc2VjX2ZzX3NldF9yeF9mc19pZChmc19pZCkgKChmc19pZCkgfCBCSVQoMzApKQotCiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHsKIAlfX2JlMTYgZXRoZXJ0eXBlOwogCXU4IHRjaV9hbjsKQEAgLTE3NTcsMTEgJiM0MzsxNzU1LDEwIEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywKIAlyeF90YWJsZXMgPSAmYW1wO3J4X2ZzLSZndDt0YWJsZXM7CiAJZnRfY3J5cHRvID0gJmFtcDtyeF90YWJsZXMtJmd0O2Z0X2NyeXB0bzsKIAotCS8qIFNldCBiaXRbMzEgLSAzMF0gbWFjc2VjIG1hcmtlciAtIDB4MDEgKi8KIAkvKiBTZXQgYml0WzE1LTBdIGZzIGlkICovCiAJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpOwogCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTsKLQlNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpKTsKJiM0MzsJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBmc19pZCk7CiAJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApOwogCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7CiAKQEAgLTE3NzgsNiAmIzQzOzE3NzUsOSBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsCiAJLyogUnggY3J5cHRvIHRhYmxlIHdpdGggU0NJIHJ1bGUgKi8KIAltYWNzZWNfZnNfcnhfc2V0dXBfZnRlKHNwZWMsICZhbXA7Zmxvd19hY3QsIGF0dHJzLCB0cnVlKTsKIAomIzQzOwlzcGVjLSZndDtmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7CiYjNDM7CXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQzsKJiM0MzsKIAlmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjsKIAlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfAogCQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfApAQCAtMTgwMyw2ICYjNDM7MTgwMyw5IEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywKIAogCQltYWNzZWNfZnNfcnhfc2V0dXBfZnRlKHNwZWMsICZhbXA7Zmxvd19hY3QsIGF0dHJzLCBmYWxzZSk7CiAKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRzsKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQzsKJiM0MzsKIAkJZmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiAJCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8CiAJCQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfApAQCAtMjE2MCw4ICYjNDM7MjE2Myw4IEBAIHN0YXRpYyBpbnQgbWx4NV9tYWNzZWNfZnNfYWRkX3JvY2VfcnVsZV9yeChzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywgdTMyCiAKIAlzcGVjLSZndDttYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjsKIAlNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfY3JpdGVyaWEsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUpOwotCU1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfdmFsdWUsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUsCi0JCSBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7CiYjNDM7CU1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfdmFsdWUsCiYjNDM7CQkgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfNSwgZnNfaWQpOwogCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9BTExPVzsKIAluZXdfcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZnMtJmd0O3JvY2UuZnRfbWFjc2VjX29wX2NoZWNrLCBzcGVjLCAmYW1wO2Zsb3dfYWN0LAogCQkJCSAgICAgICBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oCmluZGV4IDE1YWNhZmY0MzY0MTcuLmI4YjhiNDEyZDVjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaApAQCAtNiwxMSAmIzQzOzYsMTAgQEAKIAogI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQwogCi0vKiBCaXQzMSAtIDMwOiBNQUNzZWMgbWFya2VyLCBCaXQxNS0wOiBNQUNzZWMgaWQgKi8KLSNkZWZpbmUgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVggVVNIUlRfTUFYIC8qIE11c3QgYmUgcG93ZXIgb2YgdHdvICovCi0jZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgKLSNkZWZpbmUgTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSAmZ3Q7Jmd0OyAzMCkgJmFtcDsgMHgzKSAgPT0gMHgxKQotI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpICZhbXA7IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spCiYjNDM7LyogTUFDc2VjIGZzX2lkIGluIGZ0X21ldGFkYXRhIGJpdHNbMTU6MF0gKi8KJiM0MzsjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCBVU0hSVF9NQVggLyogTXVzdCBiZSBwb3dlciBvZiB0d28gKi8KJiM0MzsjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYCiYjNDM7I2RlZmluZSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSAmYW1wOyBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLKQogCiAvKiBNQUNzZWMgVFggZmxvdyBzdGVlcmluZyAqLwogI2RlZmluZSBNTFg1X0VUSF9XUUVfRlRfTUVUQV9NQUNTRUNfTUFTSyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYwppbmRleCA2NDNiNGFhYzIwMzM2Li40MDZjMGY3ZTYzZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKQEAgLTE4MTAsNiAmIzQzOzE4MTAsNyBAQCBpbnQgbWx4NV9tZGV2X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHByb2ZpbGVfaWR4KQogCWxvY2tkZXBfcmVnaXN0ZXJfa2V5KCZhbXA7ZGV2LSZndDtsb2NrX2tleSk7CiAJbXV0ZXhfaW5pdCgmYW1wO2Rldi0mZ3Q7aW50Zl9zdGF0ZV9tdXRleCk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmFtcDtkZXYtJmd0O2ludGZfc3RhdGVfbXV0ZXgsICZhbXA7ZGV2LSZndDtsb2NrX2tleSk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtkZXYtJmd0O29mZmxvYWRfYmxvY2subG9jayk7CiAJbXV0ZXhfaW5pdCgmYW1wO2Rldi0mZ3Q7bWx4NWVfcmVzLnVwbGlua19uZXRkZXZfbG9jayk7CiAJbXV0ZXhfaW5pdCgmYW1wO2Rldi0mZ3Q7d2Nfc3RhdGVfbG9jayk7CiAKQEAgLTE4OTgsNiAmIzQzOzE4OTksNyBAQCBpbnQgbWx4NV9tZGV2X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHByb2ZpbGVfaWR4KQogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDthbGxvY19tdXRleCk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO3ByaXYtJmd0O2JmcmVncy53Y19oZWFkLmxvY2spOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtiZnJlZ3MucmVnX2hlYWQubG9jayk7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDtkZXYtJmd0O29mZmxvYWRfYmxvY2subG9jayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO2Rldi0mZ3Q7aW50Zl9zdGF0ZV9tdXRleCk7CiAJbG9ja2RlcF91bnJlZ2lzdGVyX2tleSgmYW1wO2Rldi0mZ3Q7bG9ja19rZXkpOwogCXJldHVybiBlcnI7CkBAIC0xOTI1LDYgJiM0MzsxOTI3LDcgQEAgdm9pZCBtbHg1X21kZXZfdW5pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJbXV0ZXhfZGVzdHJveSgmYW1wO3ByaXYtJmd0O2JmcmVncy5yZWdfaGVhZC5sb2NrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7ZGV2LSZndDt3Y19zdGF0ZV9sb2NrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7ZGV2LSZndDttbHg1ZV9yZXMudXBsaW5rX25ldGRldl9sb2NrKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2Rldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7ZGV2LSZndDtpbnRmX3N0YXRlX211dGV4KTsKIAlsb2NrZGVwX3VucmVnaXN0ZXJfa2V5KCZhbXA7ZGV2LSZndDtsb2NrX2tleSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgKaW5kZXggYjE4NzFjMDgyMWQwYi4uMmQ5YmM3NTJlNDMxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaApAQCAtNzg4LDggJiM0Mzs3ODgsMTEgQEAgc3RydWN0IG1seDVfY29yZV9kZXYgewogCXUzMiAgICAgICAgICAgICAgICAgICAgICB2c2NfYWRkcjsKIAlzdHJ1Y3QgbWx4NV9odl92aGNhCSpodl92aGNhOwogCXN0cnVjdCBtbHg1X2h3bW9uCSpod21vbjsKLQl1NjQJCQludW1fYmxvY2tfdGM7Ci0JdTY0CQkJbnVtX2Jsb2NrX2lwc2VjOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG11dGV4IGxvY2s7CiYjNDM7CQl1NjQgbnVtX3RjOwomIzQzOwkJdTY0IG51bV9hY2NlbDsKJiM0MzsJfSBvZmZsb2FkX2Jsb2NrOwogI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQwogCXN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzOwogCS8qIE1BQ3NlYyBub3RpZmllciBjaGFpbiB0byBzeW5jIE1BQ3NlYyBjb3JlIGFuZCBJQiBkYXRhYmFzZSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5CmluZGV4IDMxNTY0OGE3NzBkMDAuLjliODk5NzIzYTYzNWEgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkKQEAgLTE2LDExICYjNDM7MTYsMTIgQEAgZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3RydWUsIGtzZnRfZXEsIGtzZnRfbmUsIGtzZnRfZ3QsIGtzZnRfcmFpc2VzCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3Rfbm9uZQogZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnQKLWZyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IEtzZnRTa2lwRXgsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIE5ldERydkNvbnRFbnYKLWZyb20gbGliLnB5IGltcG9ydCBOZXRsaW5rLCBObEVycm9yLCBQU1BGYW1pbHksIFJ0bmxGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgTmV0bGluaywgTmxFcnJvciwgTmV0ZGV2RmFtaWx5LCBQU1BGYW1pbHksIFJ0bmxGYW1pbHkKIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyCiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCByYW5kX3BvcnQsIHdhaXRfcG9ydF9saXN0ZW4KJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBldGh0b29sLCByYW5kX3BvcnQsIHdhaXRfcG9ydF9saXN0ZW4sIENtZEV4aXRGYWlsdXJlCiBmcm9tIGxpYi5weSBpbXBvcnQgaXAKIAogCkBAIC0zMCwxNSAmIzQzOzMxLDI1IEBAIGRlZiBfZ2V0X291dHEocyk6CiAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJiMzNDtJJiMzNDssIG91dHEpWzBdCiAKIAomIzQzO2RlZiBfcmVjdl9leGFjdChzb2NrLCBuKToKJiM0MzsgICAgYnVmID0gYiYjMzk7JiMzOTsKJiM0MzsgICAgd2hpbGUgbGVuKGJ1ZikgJmx0OyBuOgomIzQzOyAgICAgICAgY2h1bmsgPSBzb2NrLnJlY3YobiAtIGxlbihidWYpKQomIzQzOyAgICAgICAgaWYgbm90IGNodW5rOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgICAgICBidWYgJiM0Mzs9IGNodW5rCiYjNDM7ICAgIHJldHVybiBidWYKJiM0MzsKJiM0MzsKIGRlZiBfc2VuZF93aXRoX2FjayhjZmcsIG1zZyk6Ci0gICAgY2ZnLmNvbW1fc29jay5zZW5kKG1zZykKLSAgICByZXNwb25zZSA9IGNmZy5jb21tX3NvY2sucmVjdig0KQomIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKQomIzQzOyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpCiAgICAgaWYgcmVzcG9uc2UgIT0gYiYjMzk7YWNrXDAmIzM5OzoKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCYjMzQ7VW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UmIzM0OywgcmVzcG9uc2UpCiAKIAogZGVmIF9yZW1vdGVfcmVhZF9sZW4oY2ZnKToKLSAgICBjZmcuY29tbV9zb2NrLnNlbmQoYiYjMzk7cmVhZCBsZW5cMCYjMzk7KQomIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzk7cmVhZCBsZW5cMCYjMzk7KQogICAgIHJldHVybiBpbnQoY2ZnLmNvbW1fc29jay5yZWN2KDEwMjQpWzotMV0uZGVjb2RlKCYjMzk7dXRmLTgmIzM5OykpCiAKIApAQCAtOTcsNyAmIzQzOzEwOCw3IEBAIGRlZiBfc2VuZF9jYXJlZnVsKGNmZywgcywgcm91bmRzKToKIGRlZiBfY2hlY2tfZGF0YV9yeChjZmcsIGV4cF9sZW4pOgogICAgIHJlYWRfbGVuID0gLTEKICAgICBmb3IgXyBpbiByYW5nZSgzMCk6Ci0gICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiJiMzOTtyZWFkIGxlblwwJiMzOTspCiYjNDM7ICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzk7cmVhZCBsZW5cMCYjMzk7KQogICAgICAgICByZWFkX2xlbiA9IGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJiMzOTt1dGYtOCYjMzk7KSkKICAgICAgICAgaWYgcmVhZF9sZW4gPT0gZXhwX2xlbjoKICAgICAgICAgICAgIGJyZWFrCkBAIC01ODMsNiAmIzQzOzU5NCwxMDggQEAgZGVmIF9nZXRfcHNwX3Zlcl9pcF92YXJpYW50cygpOgogICAgICAgICBmb3IgaXB2IGluICgmIzM0OzQmIzM0OywgJiMzNDs2JiMzNDspOgogICAgICAgICAgICAgeWllbGQgS3NmdE5hbWVkVmFyaWFudChmJiMzNDt2e3Zlcn1faXB7aXB2fSYjMzQ7LCB2ZXIsIGlwdikKIAomIzQzO2RlZiBfZW5hYmxlX2xvY2FsX2h3X2dybyhjZmcpOgomIzQzOyAgICBjZmcucmVxdWlyZV9jbWQoJiMzNDtldGh0b29sJiMzNDspCiYjNDM7ICAgIGZlYXQgPSBldGh0b29sKGYmIzM0Oy1rIHtjZmcuaWZuYW1lfSYjMzQ7LCBqc29uPVRydWUpWzBdCiYjNDM7ICAgIGdybyA9IGZlYXQuZ2V0KCYjMzQ7cngtZ3JvLWh3JiMzNDspCiYjNDM7ICAgIGlmIG5vdCBncm8gb3IgJiMzNDthY3RpdmUmIzM0OyBub3QgaW4gZ3JvIG9yICYjMzQ7Zml4ZWQmIzM0OyBub3QgaW4gZ3JvOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O0hXIEdSTyBmZWF0dXJlIG5vdCByZXBvcnRlZCBieSBldGh0b29sJiMzNDspCiYjNDM7ICAgIGlmIGdyb1smIzM0O2ZpeGVkJiMzNDtdIGFuZCBub3QgZ3JvWyYjMzQ7YWN0aXZlJiMzNDtdOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFhmYWlsRXgoJiMzNDtIVyBHUk8gbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM0OykKJiM0MzsgICAgaWYgbm90IGdyb1smIzM0O2FjdGl2ZSYjMzQ7XToKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBldGh0b29sKGYmIzM0Oy1LIHtjZmcuaWZuYW1lfSByeC1ncm8taHcgb24mIzM0OykKJiM0MzsgICAgICAgIGV4Y2VwdCBDbWRFeGl0RmFpbHVyZSBhcyBlOgomIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtDYW5ub3QgZW5hYmxlIEhXIEdSTyB2aWEgZXRodG9vbCYjMzQ7KSBmcm9tIGUKJiM0MzsgICAgICAgIGRlZmVyKGV0aHRvb2wsIGYmIzM0Oy1LIHtjZmcuaWZuYW1lfSByeC1ncm8taHcgb2ZmJiMzNDspCiYjNDM7ICAgICAgICBmZWF0ID0gZXRodG9vbChmJiMzNDstayB7Y2ZnLmlmbmFtZX0mIzM0OywganNvbj1UcnVlKVswXQomIzQzOyAgICAgICAgZ3JvID0gZmVhdC5nZXQoJiMzNDtyeC1ncm8taHcmIzM0Oywge30pCiYjNDM7ICAgICAgICBpZiBub3QgZ3JvLmdldCgmIzM0O2FjdGl2ZSYjMzQ7KToKJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7SFcgR1JPIGZhaWxlZCB0byBhY3RpdmF0ZSYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmVtb3RlX3NlbmQoY2ZnLCBzaXplKToKJiM0MzsgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGImIzM5O2RhdGEgc2VuZFwwJiMzOTsgJiM0Mzsgc3RydWN0LnBhY2soJiMzOTshSSYjMzk7LCBzaXplKSkKJiM0MzsgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KQomIzQzOyAgICBpZiByZXNwb25zZSAhPSBiJiMzOTthY2tcMCYjMzk7OgomIzQzOyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCYjMzQ7VW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgdG8gZGF0YSBzZW5kJiMzNDssIHJlc3BvbnNlKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmVjdl9hbGwocywgZXhwZWN0ZWQsIHRpbWVvdXQ9MjApOgomIzQzOyAgICBzLnNldHRpbWVvdXQodGltZW91dCkKJiM0MzsgICAgdG90YWwgPSAwCiYjNDM7ICAgIHRyeToKJiM0MzsgICAgICAgIHdoaWxlIHRvdGFsICZsdDsgZXhwZWN0ZWQ6CiYjNDM7ICAgICAgICAgICAgZGF0YSA9IHMucmVjdihtaW4oNjU1MzYsIGV4cGVjdGVkIC0gdG90YWwpKQomIzQzOyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICAgICAgICAgIHRvdGFsICYjNDM7PSBsZW4oZGF0YSkKJiM0MzsgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgomIzQzOyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAomIzQzOyAgICAgICAgICAgIGYmIzM0O1RpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0OyhyZXNwb25kZXIgbWF5IGhhdmUgZmFpbGVkIHRvIHNlbmQpJiMzNDspCiYjNDM7ICAgIGlmIHRvdGFsICZsdDsgZXhwZWN0ZWQ6CiYjNDM7ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiYjNDM7ICAgICAgICAgICAgZiYjMzQ7U2hvcnQgcmVhZDogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0OyhyZXNwb25kZXIgY29ubmVjdGlvbiBjbG9zZWQgZWFybHkpJiMzNDspCiYjNDM7ICAgIHJldHVybiB0b3RhbAomIzQzOwomIzQzOwomIzQzO2RlZiBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIF9pbml0X3BzcF9kZXYoY2ZnKQomIzQzOyAgICAjIFZlcnNpb24gMCBpcyByZXF1aXJlZCBieSBzcGVjLCBkb24mIzM5O3QgbGV0IGl0IHNraXAKJiM0MzsgICAgaWYgdmVyc2lvbjoKJiM0MzsgICAgICAgIG5hbWUgPSBjZmcucHNwbmwuY29uc3RzWyYjMzQ7dmVyc2lvbiYjMzQ7XS5lbnRyaWVzX2J5X3ZhbFt2ZXJzaW9uXS5uYW1lCiYjNDM7ICAgICAgICBpZiBuYW1lIG5vdCBpbiBjZmcucHNwX2luZm9bJiMzOTtwc3AtdmVyc2lvbnMtY2FwJiMzOTtdOgomIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtQU1AgdmVyc2lvbiBub3Qgc3VwcG9ydGVkJiMzNDssIG5hbWUpCiYjNDM7CiYjNDM7ICAgIF9lbmFibGVfbG9jYWxfaHdfZ3JvKGNmZykKJiM0MzsKJiM0MzsgICAgcyA9IF9tYWtlX3BzcF9jb25uKGNmZywgdmVyc2lvbiwgaXB2ZXIpCiYjNDM7ICAgIHRyeToKJiM0MzsgICAgICAgIHJ4X2Fzc29jID0gY2ZnLnBzcG5sLnJ4X2Fzc29jKHsmIzM0O3ZlcnNpb24mIzM0OzogdmVyc2lvbiwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtkZXYtaWQmIzM0OzogY2ZnLnBzcF9kZXZfaWQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7c29jay1mZCYjMzQ7OiBzLmZpbGVubygpfSkKJiM0MzsgICAgICAgIHJ4ID0gcnhfYXNzb2NbJiMzOTtyeC1rZXkmIzM5O10KJiM0MzsgICAgICAgIHR4ID0gX3NwaV94Y2hnKHMsIHJ4KQomIzQzOyAgICAgICAgY2ZnLnBzcG5sLnR4X2Fzc29jKHsmIzM0O2Rldi1pZCYjMzQ7OiBjZmcucHNwX2Rldl9pZCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dmVyc2lvbiYjMzQ7OiB2ZXJzaW9uLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eC1rZXkmIzM0OzogdHgsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7CiYjNDM7ICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoeyYjMzQ7aWZpbmRleCYjMzQ7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlbMF0KJiM0MzsgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6CiYjNDM7ICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7cXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSYjMzQ7KSBmcm9tIGUKJiM0MzsgICAgICAgICAgICByYWlzZQomIzQzOyAgICAgICAgaWYgKCYjMzk7cngtaHctZ3JvLXBhY2tldHMmIzM5OyBub3QgaW4gYmVmb3JlIG9yCiYjNDM7ICAgICAgICAgICAgJiMzOTtyeC1ody1ncm8td2lyZS1wYWNrZXRzJiMzOTsgbm90IGluIGJlZm9yZSk6CiYjNDM7ICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O3J4LWh3LWdyby1wYWNrZXRzIGNvdW50ZXIgbm90IGF2YWlsYWJsZSYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgIyBSZW1vdGUgc2VuZHMgZGF0YSBpbiA4S0IgY2h1bmtzOyBHU08gb24gcmVtb3RlIFRYIHNlZ21lbnRzIHRoZW0sCiYjNDM7ICAgICAgICAjIEhXIEdSTyByZWFzc2VtYmxlcyBvbiBsb2NhbCBSWAomIzQzOyAgICAgICAgZGF0YV9sZW4gPSAxMCAqIDY1NTM2CiYjNDM7ICAgICAgICBfcmVtb3RlX3NlbmQoY2ZnLCBkYXRhX2xlbikKJiM0MzsgICAgICAgIHJlY3ZfbGVuID0gX3JlY3ZfYWxsKHMsIGRhdGFfbGVuKQomIzQzOyAgICAgICAga3NmdF9lcShyZWN2X2xlbiwgZGF0YV9sZW4pCiYjNDM7CiYjNDM7ICAgICAgICBjZmcud2FpdF9od19zdGF0c19zZXR0bGUoKQomIzQzOyAgICAgICAgYWZ0ZXIgPSBjZmcubmV0bmwucXN0YXRzX2dldCh7JiMzNDtpZmluZGV4JiMzNDs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVswXQomIzQzOyAgICAgICAga3NmdF9ndChhZnRlclsmIzM5O3J4LWh3LWdyby1wYWNrZXRzJiMzOTtdLAomIzQzOyAgICAgICAgICAgICAgICBiZWZvcmVbJiMzOTtyeC1ody1ncm8tcGFja2V0cyYjMzk7XSkKJiM0MzsgICAgICAgIGtzZnRfZ3QoYWZ0ZXJbJiMzOTtyeC1ody1ncm8td2lyZS1wYWNrZXRzJiMzOTtdLAomIzQzOyAgICAgICAgICAgICAgICBiZWZvcmVbJiMzOTtyeC1ody1ncm8td2lyZS1wYWNrZXRzJiMzOTtdKQomIzQzOyAgICBmaW5hbGx5OgomIzQzOyAgICAgICAgX2Nsb3NlX3BzcF9jb25uKGNmZywgcykKJiM0MzsKJiM0MztAa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKSkKJiM0MztkZWYgZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQomIzQzOyAgICBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcikKJiM0MzsKIAogZGVmIF9nZXRfaXBfdmFyaWFudHMoKToKICAgICBmb3IgaXB2IGluICgmIzM0OzQmIzM0OywgJiMzNDs2JiMzNDspOgpAQCAtOTM3LDcgJiM0MzsxMDUwLDYgQEAgZGVmIF9zZXR1cF9wc3BfYXR0cmlidXRlcyhjZmcpOgogICAgIGNmZy5wc3BfZGV2X3BlZXJfbnNpZCA9IF9nZXRfbnNpZChjZmcubmV0bnMubmFtZSkKIAogCi0KIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiAmIzM0OyYjMzQ7JiMzNDsKIApAQCAtOTU0LDYgJiM0MzsxMDY2LDcgQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogCiAgICAgd2l0aCBlbnYgYXMgY2ZnOgogICAgICAgICBjZmcucHNwbmwgPSBQU1BGYW1pbHkoKQomIzQzOyAgICAgICAgY2ZnLm5ldG5sID0gTmV0ZGV2RmFtaWx5KCkKIAogICAgICAgICBpZiBoYXNfY29udDoKICAgICAgICAgICAgIF9zZXR1cF9wc3BfYXR0cmlidXRlcyhjZmcpCkBAIC05NzMsNyAmIzQzOzEwODYsNyBAQCBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fcG9ydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEpCiAKLSAgICAgICAgICAgICAgICBjYXNlcyA9IFtkYXRhX2Jhc2ljX3NlbmQsIGRhdGFfbXNzX2FkanVzdF0KJiM0MzsgICAgICAgICAgICAgICAgY2FzZXMgPSBbZGF0YV9iYXNpY19zZW5kLCBkYXRhX2h3X2dybywgZGF0YV9tc3NfYWRqdXN0XQogCiAgICAgICAgICAgICAgICAgaWYgaGFzX2NvbnQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2VzICYjNDM7PSBbCkBAIC05OTAsNyAmIzQzOzExMDMsNyBAQCBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZV9wZng9eyYjMzQ7ZGV2XyYjMzQ7LCAmIzM0O2RhdGFfJiMzNDssICYjMzQ7YXNzb2NfJiMzNDssICYjMzQ7cmVtb3ZhbF8mIzM0O30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCApKQogCi0gICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kKGImIzM0O2V4aXRcMCYjMzQ7KQomIzQzOyAgICAgICAgICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzQ7ZXhpdFwwJiMzNDspCiAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzcnYgYW5kIChzcnYuc3Rkb3V0IG9yIHNydi5zdGRlcnIpOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jCmluZGV4IGEyNmU3NjI4YmJiMTMuLjlhNjc1YmY0NDlmNWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmMKQEAgLTEsNSAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3BvbGwuaCZndDsKQEAgLTExOCw2ICYjNDM7MTE5LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfc3RyKGludCBzb2NrLCBpbnQgdmFsdWUpCiAJc2VuZChzb2NrLCBidWYsIHJldCAmIzQzOyAxLCBNU0dfV0FJVEFMTCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNlbmRfZGF0YShpbnQgc29jaywgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgc2J1Zls4MTkyXSA9IHswfTsKJiM0MzsJc3NpemVfdCBzZW50OwomIzQzOwomIzQzOwl3aGlsZSAobGVuICZndDsgMCkgewomIzQzOwkJc2l6ZV90IGNodW5rID0gbGVuOwomIzQzOwomIzQzOwkJaWYgKGNodW5rICZndDsgc2l6ZW9mKHNidWYpKQomIzQzOwkJCWNodW5rID0gc2l6ZW9mKHNidWYpOwomIzQzOwomIzQzOwkJc2VudCA9IHNlbmQoc29jaywgc2J1ZiwgY2h1bmssIE1TR19OT1NJR05BTCk7CiYjNDM7CQlpZiAoc2VudCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0VSUjogJXM6ICVzXG4mIzM0OywgX19mdW5jX18sCiYjNDM7CQkJCXN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJaWYgKHNlbnQgPT0gMCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0VSUjogJXM6IHBlZXIgY2xvc2VkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsJCWxlbiAtPSBzZW50OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cywKIAkgICAgaW50IHNlcnZlcl9zb2NrLCBpbnQgY29tbV9zb2NrKQpAQCAtMTg1LDIyICYjNDM7MjE0LDIyIEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLAogCQkJfQogCiAJCQlvZmYgJiM0Mzs9IG47Ci0JCQluID0gb2ZmOwogCiAjZGVmaW5lIF9fY29uc3VtZShzeikJCQkJCQlcCiAJCSh7CQkJCQkJXAotCQkJaWYgKG4gPT0gKHN6KSkgewkJCVwKLQkJCQlvZmYgPSAwOwkJCVwKLQkJCX0gZWxzZSB7CQkJCVwKLQkJCQlvZmYgLT0gKHN6KTsJCQlcCi0JCQkJbWVtbW92ZShidWYsICZhbXA7YnVmWyhzeildLCBvZmYpOwlcCi0JCQl9CQkJCQlcCiYjNDM7CQkJb2ZmIC09IChzeik7CQkJCVwKJiM0MzsJCQltZW1tb3ZlKGJ1ZiwgJmFtcDtidWZbKHN6KV0sIG9mZik7CQlcCiAJCX0pCiAKLSNkZWZpbmUgY21kKF9uYW1lKQkJCQkJCQlcCiYjNDM7LyogT25seSBtYXRjaCBvbmNlIHRoZSBjb21tYW5kIGFuZCBpdHMgX2V4dHJhX3N6IGJ5dGUgcGF5bG9hZCBhcmUgYm90aAomIzQzOyAqIGJ1ZmZlcmVkLCBvdGhlcndpc2UgYSBzcGxpdCByZWFkIHdvdWxkIGNvbnN1bWUgdGhlIG5hbWUgYW5kIHN0cmFuZAomIzQzOyAqIHRoZSBwYXlsb2FkLCBkZXN5bmNocm9uaXppbmcgdGhlIHBhcnNlciBmb3IgZ29vZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGNtZChfbmFtZSwgX2V4dHJhX3N6KQkJCQkJCVwKIAkJKHsJCQkJCQkJXAogCQkJc3NpemVfdCBzeiA9IHNpemVvZihfbmFtZSk7CQkJXAotCQkJYm9vbCBtYXRjaCA9IG4gJmd0Oz0gc3ogJmFtcDsmYW1wOwkhbWVtY21wKGJ1ZiwgX25hbWUsIHN6KTsgXAomIzQzOwkJCWJvb2wgbWF0Y2ggPSBvZmYgJmd0Oz0gc3ogJiM0MzsgKF9leHRyYV9zeikgJmFtcDsmYW1wOwkJXAomIzQzOwkJCQkhbWVtY21wKGJ1ZiwgX25hbWUsIHN6KTsJCVwKIAkJCQkJCQkJCVwKIAkJCWlmIChtYXRjaCkgewkJCQkJXAogCQkJCWRiZygmIzM0O2NvbW1hbmQ6ICYjMzQ7IF9uYW1lICYjMzQ7XG4mIzM0Oyk7CQlcCkBAIC0yMTMsMTAgJiM0MzsyNDIsMTAgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsCiAJCQlkbyB7CiAJCQkJY29uc3VtZWQgPSBmYWxzZTsKIAotCQkJCWlmIChjbWQoJiMzNDtyZWFkIGxlbiYjMzQ7KSkKJiM0MzsJCQkJaWYgKGNtZCgmIzM0O3JlYWQgbGVuJiMzNDssIDApKQogCQkJCQlzZW5kX3N0cihjb21tX3NvY2ssIGRhdGFfcmVhZCk7CiAKLQkJCQlpZiAoY21kKCYjMzQ7ZGF0YSBlY2hvJiMzNDspKSB7CiYjNDM7CQkJCWlmIChjbWQoJiMzNDtkYXRhIGVjaG8mIzM0OywgMCkpIHsKIAkJCQkJaWYgKGRhdGFfc29jayAmZ3Q7PSAwKQogCQkJCQkJc2VuZChkYXRhX3NvY2ssICYjMzQ7ZWNobyYjMzQ7LCA1LAogCQkJCQkJICAgICBNU0dfV0FJVEFMTCk7CkBAIC0yMjQsNyAmIzQzOzI1MywyNyBAQCBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cywKIAkJCQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dBUk46IGVjaG8gYnV0IG5vIGRhdGEgc29ja1xuJiMzNDspOwogCQkJCQlzZW5kX2Fjayhjb21tX3NvY2spOwogCQkJCX0KLQkJCQlpZiAoY21kKCYjMzQ7ZGF0YSBjbG9zZSYjMzQ7KSkgewomIzQzOwkJCQlpZiAoY21kKCYjMzQ7ZGF0YSBzZW5kJiMzNDssIDQpKSB7CiYjNDM7CQkJCQlfX3UzMiBsZW47CiYjNDM7CiYjNDM7CQkJCQltZW1jcHkoJmFtcDtsZW4sIGJ1Ziwgc2l6ZW9mKGxlbikpOwomIzQzOwkJCQkJX19jb25zdW1lKHNpemVvZihsZW4pKTsKJiM0MzsJCQkJCWxlbiA9IG50b2hsKGxlbik7CiYjNDM7CiYjNDM7CQkJCQlpZiAoZGF0YV9zb2NrICZsdDsgMCkgewomIzQzOwkJCQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJCQkmIzM0O1dBUk46IHNlbmQgYnV0IG5vIGRhdGEgc29ja1xuJiMzNDspOwomIzQzOwkJCQkJCXNlbmRfZXJyKGNvbW1fc29jayk7CiYjNDM7CQkJCQkJY29udGludWU7CiYjNDM7CQkJCQl9CiYjNDM7CiYjNDM7CQkJCQlzZW5kX2Fjayhjb21tX3NvY2spOwomIzQzOwkJCQkJaWYgKHNlbmRfZGF0YShkYXRhX3NvY2ssIGxlbikpCiYjNDM7CQkJCQkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJCQkJCSYjMzQ7V0FSTjogc2VuZCBpbmNvbXBsZXRlIGZvciAldSBieXRlc1xuJiMzNDssCiYjNDM7CQkJCQkJCWxlbik7CiYjNDM7CQkJCX0KJiM0MzsJCQkJaWYgKGNtZCgmIzM0O2RhdGEgY2xvc2UmIzM0OywgMCkpIHsKIAkJCQkJaWYgKGRhdGFfc29jayAmZ3Q7PSAwKSB7CiAJCQkJCQljbG9zZShkYXRhX3NvY2spOwogCQkJCQkJZGF0YV9zb2NrID0gLTE7CkBAIC0yMzMsMjYgJiM0MzsyODIsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsCiAJCQkJCQlyYWNlX2Nsb3NlID0gdHJ1ZTsKIAkJCQkJfQogCQkJCX0KLQkJCQlpZiAoY21kKCYjMzQ7Y29ubiBwc3AmIzM0OykpIHsKJiM0MzsJCQkJaWYgKGNtZCgmIzM0O2Nvbm4gcHNwJiMzNDssIDIpKSB7CiAJCQkJCWlmIChhY2NlcHRfY2ZnICE9IEFDQ0VQVF9DRkdfTk9ORSkKIAkJCQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dBUk46IG9sZCBjb25uIGNvbmZpZyBzdGlsbCBzZXQhXG4mIzM0Oyk7CiAJCQkJCWFjY2VwdF9jZmcgPSBBQ0NFUFRfQ0ZHX1BTUDsKIAkJCQkJc2VuZF9hY2soY29tbV9zb2NrKTsKIAkJCQkJLyogbmV4dCB0d28gYnl0ZXMgYXJlIHZlcnNpb25zICovCi0JCQkJCWlmIChvZmYgJmd0Oz0gMikgewotCQkJCQkJbWVtY3B5KCZhbXA7cHNwX3ZlcnMsIGJ1ZiwgMik7Ci0JCQkJCQlfX2NvbnN1bWUoMik7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXQVJOOiBzaG9ydCBjb25uIHBzcCBjb21tYW5kIVxuJiMzNDspOwotCQkJCQl9CiYjNDM7CQkJCQltZW1jcHkoJmFtcDtwc3BfdmVycywgYnVmLCAyKTsKJiM0MzsJCQkJCV9fY29uc3VtZSgyKTsKIAkJCQl9Ci0JCQkJaWYgKGNtZCgmIzM0O2Nvbm4gY2xyJiMzNDspKSB7CiYjNDM7CQkJCWlmIChjbWQoJiMzNDtjb25uIGNsciYjMzQ7LCAwKSkgewogCQkJCQlpZiAoYWNjZXB0X2NmZyAhPSBBQ0NFUFRfQ0ZHX05PTkUpCiAJCQkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXQVJOOiBvbGQgY29ubiBjb25maWcgc3RpbGwgc2V0IVxuJiMzNDspOwogCQkJCQlhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjsKIAkJCQkJc2VuZF9hY2soY29tbV9zb2NrKTsKIAkJCQl9Ci0JCQkJaWYgKGNtZCgmIzM0O2V4aXQmIzM0OykpCiYjNDM7CQkJCWlmIChjbWQoJiMzNDtleGl0JiMzNDssIDApKQogCQkJCQlzaG91bGRfcXVpdCA9IHRydWU7CiAjdW5kZWYgY21kCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MzUKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMTM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IE1lbGxhbm94IG1seDUgRHJpdmVyIC0gTm90IEZ1enphYmxlIGluIFN0YW5kYXJkIFFFTVUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmeWluZyB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIgdG8gc3VwcG9ydCBQU1AgaGFyZHdhcmUgR1JPL2RlY2Fwc3VsYXRpb24uIEl0JiMzOTtzIGFkZGluZyBuZXcgZmVhdHVyZXMsIG1vZGlmeWluZyBleGlzdGluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBUQyBvZmZsb2FkLCBpbnRyb2R1Y2luZyBhIHVuaWZpZWQgZmxvdyB0YWcsIGFuZCB1cGRhdGluZyBzZXZlcmFsIGZpbGVzIChgaXBzZWNfZnMuY2AsIGBtYWNzZWMuY2AsIGBwc3AuY2AsIGBlbl9yeC5jYCwgYGVuX3RjLmNgKSB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVyZSBhcmUgYWxzbyBhc3NvY2lhdGVkIHRlc3RzIGluIGBwc3AucHlgIGFuZCBgcHNwX3Jlc3BvbmRlci5jYC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBidW5jaCBvZiBjb3JlIE1lbGxhbm94IGZpbGVzLgoKVGhlIGNvZGUgaXMgZm9jdXNlZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2AuIFRoaXMgaXMgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBDb25uZWN0WC00LzUvNi83IG5ldHdvcmsgY2FyZHMsIGEgaGlnaC1lbmQgU21hcnROSUMuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgdGhlIGtleS4KCkxldCBtZSB0aGlua+KApiBJcyBgbWx4NWAgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzICp0aGUqIE1lbGxhbm94IENvbm5lY3RYIGRyaXZlci4gQW5kIGRvZXMgUUVNVSBlbXVsYXRlIE1lbGxhbm94IENvbm5lY3RYLTQmIzQzOyBOSUNzPyBOb3BlLiBRRU1VIGhhcyBzb21lIGVtdWxhdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCByZWxldmFudCBoZXJlLiBTbywgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gZXhpc3RzIGZvciBgbWx4NWAsIHBlcmlvZC4KCkkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyIHVzdWFsbHkgZG9lc24mIzM5O3QgZnV6eiBoYXJkd2FyZSBkcml2ZXJzIHVubGVzcyB0aGVyZSYjMzk7cyBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgdkRQQS4gVGhpcyBzZWVtcyB0byBiZSBldGhlcm5ldCBhY2NlbGVyYXRpb24gZm9yIElQc2VjL01BQ3NlYy9QU1AsIHdoaWNoLCBhcyBJIHNlZSBpdCwgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE5JQy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSwgb25jZSBhZ2Fpbi4gQ2hlY2tpbmcgY2FyZWZ1bGx5LCBJIGRvbiYjMzk7dCBzZWUgYW55IFFFTVUgZW11bGF0aW9uIGZvciBgbWx4NWAgaW4gdGhlIHN0YW5kYXJkIFFFTVUuCgpHaXZlbiBhbGwgb2YgdGhhdCwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGBtbHg1YCBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgKGEgU21hcnROSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkpIHRoYXQgcmVsaWVzIG9uIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBBbmQgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQsIHRoZSBjaGFuZ2VzIGFyZSBhbGwgaW4gYG1seDVgIGFuZCBzZWxmdGVzdHMgdGhhdCByZWx5IG9uIHRoYXQuIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoYXQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDk6MzQ6MTMuODY5NjM1MTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzNzcxNDQxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDk6MzQ6MTMuODY5NjQwNDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU5NzQ4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNDRkYTQxMTk4ODI3ODAzY2M2MGIzZDBkNmU1Y2ExYzgwY2E0ZTk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDk6MzQ6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbkBAIC05OCw2ICs5OCw3IEBAIGVudW0ge1xcbiAjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXFxuIFxcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXFxuIFxcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUwsXFxuK1xcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9ERUNBUF9GVF9MRVZFTCxcXG4gXFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxcbiAjZW5kaWZcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxcbmluZGV4IDNmMjEyZTQ2ZmMyZjkuLmEwYmIxOWNjOTU2ZGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxcbkBAIC0yMTgsNiArMjE4LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF90eF9maW5pc2goc3RydWN0IG1seDVlX3R4cXNxICpzcSxcXG4gI2VuZGlmXFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xcbitcXHRpZiAobWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpXFxuK1xcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YysrO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKCFtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YykpXFxuK1xcdFxcdG1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjLS07XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3J4KHByaXYpO1xcbkBAIC0yMjksNiArMjUxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiBcXHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTUxYNV9FTl9QU1BcXG4rXFx0cmV0dXJuIG1seDVlX3BzcF91cGRhdGVfcngocHJpdik7XFxuKyNlbHNlXFxuK1xcdHJldHVybiAwO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF90eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNDIyZjk2ZmZjZWQwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oXFxuQEAgLTAsMCArMSw0NSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBMaW51eC1PcGVuSUIgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2LCBOVklESUEgQ09SUE9SQVRJT04gXFx1MDAyNiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xcbitcXG4rI2lmbmRlZiBfX01MWDVFX0ZMT1dfVEFHX0hfX1xcbisjZGVmaW5lIF9fTUxYNUVfRkxPV19UQUdfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWx4NS9kZXZpY2UuaFxcdTAwM2VcXG4rXFxuKy8qIFVuaWZpZWQgYWNjZWwgZmxvd190YWcgbGF5b3V0IGluIENRRSBzb3BfZHJvcF9xcG4gWzIzOjBdOlxcbisgKlxcbisgKiAgIFsyMzoyMV0gPSBwcm90b2NvbCBJRCAoMyBiaXRzKTpcXG4rICogICAgICAgICAgICAgIDAgPSBub25lIChkZWZhdWx0KVxcbisgKiAgICAgICAgICAgICAgMSA9IElQc2VjXFxuKyAqICAgICAgICAgICAgICAyID0gTUFDc2VjXFxuKyAqICAgICAgICAgICAgICAzID0gUFNQIChIVyBkZWNyeXB0ZWQsIFBTUCBoZWFkZXIgcHJlc2VudClcXG4rICogICAgICAgICAgICAgIDQgPSBQU1AgZGVjYXAgKEhXIGRlY3J5cHRlZCBcXHUwMDI2IGRlY2Fwc3VsYXRlZClcXG4rICogICAgICAgICAgICAgIDUtNyA9IHJlc2VydmVkXFxuKyAqICAgWzIwOjE3XSA9IFBTUCB2ZXJzaW9uICg0IGJpdHMsIHZhbGlkIHdoZW4gcHJvdG8gPT0gUFNQIGRlY2FwKVxcbisgKiAgIDE2ICAgICAgPSByZXNlcnZlZFxcbisgKiAgIFsxNTowXSAgPSB1c2VkIGJ5IG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gVEMpLlxcbisgKi9cXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLXFx0XFx0R0VOTUFTSygyMywgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTk9ORVxcdFxcdCgwIFxcdTAwM2NcXHUwMDNjIDIxKVxcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDXFx0KDIgXFx1MDAzY1xcdTAwM2MgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQXFx0XFx0KDMgXFx1MDAzY1xcdTAwM2MgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQXFx0KDQgXFx1MDAzY1xcdTAwM2MgMjEpXFxuK1xcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlRcXHQxN1xcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTS1xcdCgweEYgXFx1MDAzY1xcdTAwM2MgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVClcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIG1seDVlX2FjY2VsX2Zsb3dfdGFnKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuK3tcXG4rXFx0cmV0dXJuIGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlc29wX2Ryb3BfcXBuKSBcXHUwMDI2IDB4RkZGRkZGO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHUzMiBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHJldHVybiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFxcdTAwMjYgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFTSztcXG4rfVxcbitcXG4rI2VuZGlmIC8qIF9fTUxYNUVfRkxPV19UQUdfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcXG5pbmRleCAzMjk2MDhjNTkzMTNiLi4wODFjYjJmMzFiZTAxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcXG5AQCAtNCw2ICs0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlbl9hY2NlbC9lbl9hY2NlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZW5fYWNjZWwvZmxvd190YWcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVzd2l0Y2guaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlwc2VjLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJmc19jb3JlLmhcXFwiXFxuQEAgLTE4OSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBpcHNlY19yeF9ydWxlX2FkZF9tYXRjaF9vYmooc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSxcXG4gXFx0XFx0XFx0XFx0IG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzIpO1xcbiBcXHRcXHRNTFg1X1NFVChmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXFx1MDAzZW1hdGNoX3ZhbHVlLFxcbiBcXHRcXHRcXHQgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfMixcXG4tXFx0XFx0XFx0IHNhX2VudHJ5LVxcdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpKTtcXG4rXFx0XFx0XFx0IHNhX2VudHJ5LVxcdTAwM2VpcHNlY19vYmpfaWQpO1xcbiBcXG4gXFx0XFx0c3BlYy1cXHUwMDNlbWF0Y2hfY3JpdGVyaWFfZW5hYmxlIHw9IE1MWDVfTUFUQ0hfTUlTQ19QQVJBTUVURVJTXzI7XFxuIFxcdH1cXG5AQCAtMjA2NSw3ICsyMDY3LDcgQEAgc3RhdGljIGludCByeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxcbiBcXHRpZiAoIWF0dHJzLVxcdTAwM2Vkcm9wKSB7XFxuIFxcdFxcdGlmIChyeCAhPSBpcHNlYy1cXHUwMDNlcnhfZXN3KVxcbiBcXHRcXHRcXHRlcnIgPSBzZXR1cF9tb2RpZnlfaGVhZGVyKGlwc2VjLCBhdHRycy1cXHUwMDNldHlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBzYV9lbnRyeS1cXHUwMDNlaXBzZWNfb2JqX2lkIHwgQklUKDMxKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzYV9lbnRyeS1cXHUwMDNlaXBzZWNfb2JqX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIFhGUk1fREVWX09GRkxPQURfSU4sIFxcdTAwMjZmbG93X2FjdCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gbWx4NV9lc3dfaXBzZWNfcnhfc2V0dXBfbW9kaWZ5X2hlYWRlcihzYV9lbnRyeSwgXFx1MDAyNmZsb3dfYWN0KTtcXG5AQCAtMjA5OCw2ICsyMTAwLDEwIEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcXG4gXFx0XFx0Zmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZsb3dfYWN0LmFjdGlvbiB8PSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XFxuK1xcdGlmICghYXR0cnMtXFx1MDAzZWRyb3AgXFx1MDAyNlxcdTAwMjYgcnggIT0gaXBzZWMtXFx1MDAzZXJ4X2Vzdykge1xcbitcXHRcXHRzcGVjLVxcdTAwM2VmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdFxcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDO1xcbitcXHR9XFxuIFxcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuIFxcdGRlc3RbMF0uZnQgPSByeC1cXHUwMDNlZnQuc3RhdHVzO1xcbiBcXHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xcbkBAIC0yNTc0LDUzICsyNTgwLDE5IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfcmVhZF9zdGF0cyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgdm9pZCAqaXBzZWNfc3RhdHMpXFxuIFxcdH1cXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcXG4tc3RhdGljIGludCBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBtbHg1X2Vzd2l0Y2ggKmVzdyA9IG1kZXYtXFx1MDAzZXByaXYuZXN3aXRjaDtcXG4tXFx0aW50IGVyciA9IDA7XFxuLVxcbi1cXHRpZiAoZXN3KSB7XFxuLVxcdFxcdGVyciA9IG1seDVfZXN3X2xvY2soZXN3KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG1kZXYtXFx1MDAzZW51bV9ibG9ja19pcHNlYykge1xcbi1cXHRcXHRlcnIgPSAtRUJVU1k7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHR9XFxuLVxcbi1cXHRtZGV2LVxcdTAwM2VudW1fYmxvY2tfdGMrKztcXG4tXFxuLXVubG9jazpcXG4tXFx0aWYgKGVzdylcXG4tXFx0XFx0bWx4NV9lc3dfdW5sb2NrKGVzdyk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyBpbnQgbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcXG4te1xcbi1cXHRpZiAobWRldi1cXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKVxcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi1cXG4tXFx0bWRldi1cXHUwMDNlbnVtX2Jsb2NrX3RjKys7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tc3RhdGljIHZvaWQgbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbitzdGF0aWMgYm9vbCBhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcXG4ge1xcbi1cXHRtZGV2LVxcdTAwM2VudW1fYmxvY2tfdGMtLTtcXG4rXFx0cmV0dXJuIHNhX2VudHJ5LVxcdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUIHx8XFxuK1xcdFxcdHNhX2VudHJ5LVxcdTAwM2VhdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTjtcXG4gfVxcbiBcXG4gaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXFxuIHtcXG4rXFx0Ym9vbCBibG9ja190YyA9IGFjY2VsX2lwc2VjX3Nob3VsZF9ibG9ja190YyhzYV9lbnRyeSk7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoc2FfZW50cnktXFx1MDAzZWF0dHJzLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tXFx0XFx0ZXJyID0gbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzYV9lbnRyeS1cXHUwMDNlaXBzZWMtXFx1MDAzZW1kZXYpO1xcbitcXHRpZiAoYmxvY2tfdGMpIHtcXG4rXFx0XFx0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChzYV9lbnRyeS1cXHUwMDNlaXBzZWMtXFx1MDAzZW1kZXYpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTI2MzYsOCArMjYwOCw4IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9vdXQ6XFxuLVxcdGlmIChzYV9lbnRyeS1cXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcXG4tXFx0XFx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuK1xcdGlmIChibG9ja190YylcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTI2NTEsOCArMjYyMyw4IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcXG4gXFx0aWYgKGlwc2VjX3J1bGUtXFx1MDAzZXBrdF9yZWZvcm1hdClcXG4gXFx0XFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhtZGV2LCBpcHNlY19ydWxlLVxcdTAwM2Vwa3RfcmVmb3JtYXQpO1xcbiBcXG4tXFx0aWYgKHNhX2VudHJ5LVxcdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxcbi1cXHRcXHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQobWRldik7XFxuK1xcdGlmIChhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpKVxcbitcXHRcXHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWRldik7XFxuIFxcbiBcXHRpZiAoc2FfZW50cnktXFx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX09VVCkge1xcbiBcXHRcXHR0eF9mdF9wdXQoc2FfZW50cnktXFx1MDAzZWlwc2VjLCBzYV9lbnRyeS1cXHUwMDNlYXR0cnMudHlwZSk7XFxuQEAgLTI2ODYsNyArMjY1OCw3IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcG9sKHN0cnVjdCBtbHg1ZV9pcHNlY19wb2xfZW50cnkgKnBvbF9lbnRyeSlcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0ZXJyID0gbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4rXFx0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTI3MDEsNyArMjY3Myw3IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcG9sKHN0cnVjdCBtbHg1ZV9pcHNlY19wb2xfZW50cnkgKnBvbF9lbnRyeSlcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfb3V0Olxcbi1cXHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuK1xcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMjcxMiw3ICsyNjg0LDcgQEAgdm9pZCBtbHg1ZV9hY2NlbF9pcHNlY19mc19kZWxfcG9sKHN0cnVjdCBtbHg1ZV9pcHNlY19wb2xfZW50cnkgKnBvbF9lbnRyeSlcXG4gXFxuIFxcdG1seDVfZGVsX2Zsb3dfcnVsZXMoaXBzZWNfcnVsZS1cXHUwMDNlcnVsZSk7XFxuIFxcbi1cXHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuK1xcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4gXFxuIFxcdGlmIChwb2xfZW50cnktXFx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKSB7XFxuIFxcdFxcdHJ4X2Z0X3B1dF9wb2xpY3kocG9sX2VudHJ5LVxcdTAwM2VpcHNlYyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcXG5pbmRleCA0NWIwZDE5ZTczNWNiLi42ZGVhNTk3OGE0MGU4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oXFxuQEAgLTM4LDEwICszOCw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3R4cnguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2Zsb3dfdGFnLmhcXFwiXFxuIFxcbi0vKiBCaXQzMTogSVBzZWMgbWFya2VyLCBCaXQzMDogcmVzZXJ2ZWQsIEJpdDI5LTI0OiBJUHNlYyBzeW5kcm9tZSwgQml0MjMtMDogSVBzZWMgb2JqIGlkICovXFxuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFxcdTAwM2VcXHUwMDNlIDMwKSBcXHUwMDI2IDB4MykgPT0gMHgyKVxcbi0jZGVmaW5lIE1MWDVfSVBTRUNfTUVUQURBVEFfU1lORFJPTShtZXRhZGF0YSkgKCgobWV0YWRhdGEpIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IEdFTk1BU0soNSwgMCkpXFxuKy8qIElQc2VjIG9iaiBpZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzIzOjBdICovXFxuICNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcXHUwMDI2IEdFTk1BU0soMjMsIDApKVxcbiBcXG4gc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0YXRlIHtcXG5AQCAtNzQsNyArNzMsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtbHg1ZV9pcHNlY190eF9pZHNfbGVuKHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9pcHNlY19zdFxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXBzZWNfaXNfcnhfZmxvdyhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbiB7XFxuLVxcdHJldHVybiBNTFg1X0lQU0VDX01FVEFEQVRBX01BUktFUihiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWZ0X21ldGFkYXRhKSk7XFxuK1xcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XFxuK1xcbitcXHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9pcHNlY19lc2VnX21ldGEoc3RydWN0IG1seDVfd3FlX2V0aF9zZWcgKmVzZWcpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuY1xcbmluZGV4IGRhZmY1M2JhN2QwOWYuLmFhN2EyODk1NDg2MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcImVuLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsaWIvYXNvLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsaWIvY3J5cHRvLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlbl9hY2NlbC9lbl9hY2NlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZW5fYWNjZWwvbWFjc2VjLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE1MWDVfTUFDU0VDX0VQTl9TQ09QRV9NSUQgMHg4MDAwMDAwMExcXG5AQCAtMzI0LDYgKzMyNSw4IEBAIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhX2ZzKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcXG4gXFx0bWx4NV9tYWNzZWNfZnNfZGVsX3J1bGUobWFjc2VjLVxcdTAwM2VtZGV2LVxcdTAwM2VtYWNzZWNfZnMsIHNhLVxcdTAwM2VtYWNzZWNfcnVsZSwgYWN0aW9uLCBuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdGZzX2lkKTtcXG4gXFx0c2EtXFx1MDAzZW1hY3NlY19ydWxlID0gTlVMTDtcXG4rXFx0aWYgKCFpc190eClcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1hY3NlYy1cXHUwMDNlbWRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcXG5AQCAtMzQzLDYgKzM0Niw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2luaXRfc2FfZnMoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsXFxuIFxcdGNvbnN0IHN0cnVjdCBtYWNzZWNfdHhfc2MgKnR4X3NjID0gXFx1MDAyNmN0eC1cXHUwMDNlc2VjeS1cXHUwMDNldHhfc2M7XFxuIFxcdHN0cnVjdCBtbHg1X21hY3NlY19ydWxlX2F0dHJzIHJ1bGVfYXR0cnM7XFxuIFxcdHVuaW9uIG1seDVfbWFjc2VjX3J1bGUgKm1hY3NlY19ydWxlO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmIChpc190eCBcXHUwMDI2XFx1MDAyNiB0eF9zYy1cXHUwMDNlZW5jb2Rpbmdfc2EgIT0gc2EtXFx1MDAzZWFzc29jX251bSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTM1MywxMyArMzU3LDI2IEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2luaXRfc2FfZnMoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsXFxuIFxcdHJ1bGVfYXR0cnMuYWN0aW9uID0gKGlzX3R4KSA/IE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9FTkNSWVBUIDpcXG4gXFx0XFx0XFx0XFx0ICAgICAgTUxYNV9BQ0NFTF9NQUNTRUNfQUNUSU9OX0RFQ1JZUFQ7XFxuIFxcbitcXHRpZiAoIWlzX3R4KSB7XFxuK1xcdFxcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocHJpdi1cXHUwMDNlbWRldik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuIFxcdG1hY3NlY19ydWxlID0gbWx4NV9tYWNzZWNfZnNfYWRkX3J1bGUobWFjc2VjX2ZzLCBjdHgsIFxcdTAwMjZydWxlX2F0dHJzLCBmc19pZCk7XFxuLVxcdGlmICghbWFjc2VjX3J1bGUpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoIW1hY3NlY19ydWxlKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0X3VuYmxvY2tfdGM7XFxuK1xcdH1cXG4gXFxuIFxcdHNhLVxcdTAwM2VtYWNzZWNfcnVsZSA9IG1hY3NlY19ydWxlO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfdW5ibG9ja190YzpcXG4rXFx0aWYgKCFpc190eClcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHByaXYtXFx1MDAzZW1kZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxcbkBAIC03MzUsMTIgKzc1MiwxMiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19hZGRfcnhzYyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcXG4gXFx0ICogYSBub24tTlVMTCBtZF9kc3Qgd2l0aCB1bmluaXRpYWxpc2VkIGNvbnRlbnRzLlxcbiBcXHQgKi9cXG4gXFx0ZXJyID0geGFfYWxsb2MoXFx1MDAyNm1hY3NlYy1cXHUwMDNlc2NfeGFycmF5LCBcXHUwMDI2c2NfeGFycmF5X2VsZW1lbnQtXFx1MDAzZWZzX2lkLCBzY194YXJyYXlfZWxlbWVudCxcXG4tXFx0XFx0ICAgICAgIFhBX0xJTUlUKDEsIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdCAgICAgICBYQV9MSU1JVCgxLCBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRpZiAoZXJyID09IC1FQlVTWSlcXG4gXFx0XFx0XFx0bmV0ZGV2X2VycihjdHgtXFx1MDAzZW5ldGRldixcXG4gXFx0XFx0XFx0XFx0ICAgXFxcIk1BQ3NlYyBvZmZsb2FkOiB1bmFibGUgdG8gY3JlYXRlIGVudHJ5IGZvciBSWCBTQyAoJWQgUnggU0NzIGFscmVhZHkgYWxsb2NhdGVkKVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpO1xcbitcXHRcXHRcXHRcXHQgICBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVgpO1xcbiBcXHRcXHRnb3RvIGRlc3Ryb3lfbWRfZHN0O1xcbiBcXHR9XFxuIFxcbkBAIC0xMTM3LDcgKzExNTQsMTIgQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcXG4gXFx0c3RydWN0IG1seDVlX21hY3NlY19zYSAqcnhfc2E7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XFxuIFxcdGludCBpLCBlcnIgPSAwO1xcbitcXHRib29sIGJsb2NrX3RjO1xcbiBcXG4rXFx0LyogQmVzdC1lZmZvcnQgVEMgYmxvY2sgYWNyb3NzIHRoZSBvcGVyYXRpb24sIHRvIHByZXZlbnQgYSBtaXN0aW1lZCBUQ1xcbitcXHQgKiBmaWx0ZXIgYWRkIGZyb20gcHJldmVudGluZyB0aGUgMm5kIGxvb3AgZnJvbSBoYXBwZW5pbmcuXFxuK1xcdCAqL1xcbitcXHRibG9ja190YyA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocHJpdi1cXHUwMDNlbWRldikgPT0gMDtcXG4gXFxuIFxcdGxpc3QgPSBcXHUwMDI2bWFjc2VjX2RldmljZS1cXHUwMDNlbWFjc2VjX3J4X3NjX2xpc3RfaGVhZDtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X3NjLCB0bXAsIGxpc3QsIHJ4X3NjX2xpc3RfZWxlbWVudCkge1xcbkBAIC0xMTY4LDYgKzExOTAsOCBAQCBzdGF0aWMgaW50IG1hY3NlY191cGRfc2VjeV9od19hZGRyZXNzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxcbiBcXG4gXFx0bWVtY3B5KG1hY3NlY19kZXZpY2UtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4gb3V0OlxcbitcXHRpZiAoYmxvY2tfdGMpXFxuK1xcdFxcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwcml2LVxcdTAwM2VtZGV2KTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTcwMCw3ICsxNzI0LDcgQEAgdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGlmICghbWFjc2VjKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRfSEFORExFKG1hY3NlY19tZXRhX2RhdGEpO1xcbitcXHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRBX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2NfeGFycmF5X2VsZW1lbnQgPSB4YV9sb2FkKFxcdTAwMjZtYWNzZWMtXFx1MDAzZXNjX3hhcnJheSwgZnNfaWQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmhcXG5pbmRleCAyN2RmNzJlMjMxMDZkLi41NzE2MjRmMmRiMTUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuaFxcbkBAIC05LDYgKzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWx4NS9kcml2ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2Zsb3dfdGFnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsaWIvbWFjc2VjX2ZzLmhcXFwiXFxuIFxcbiBzdHJ1Y3QgbWx4NWVfcHJpdjtcXG5AQCAtMzEsNyArMzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX3NrYl9pc19vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4ge1xcbi1cXHRyZXR1cm4gTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlZnRfbWV0YWRhdGEpKTtcXG4rXFx0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcXG4rXFxuK1xcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XFxuIH1cXG4gXFxuIHZvaWQgbWx4NWVfbWFjc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcXG5pbmRleCA3M2IyMzIzNzkyNjNhLi5hZDhkYmQ4YzJmMjc5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbkBAIC02LDcgKzYsOSBAQFxcbiAjaW5jbHVkZSBcXFwibWx4NV9jb3JlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJwc3AuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImxpYi9jcnlwdG8uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2VuX2FjY2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJlbl9hY2NlbC9wc3AuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL3BzcF9yeHR4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJmc19jb3JlLmhcXFwiXFxuIFxcbiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHtcXG5AQCAtMjEsNiArMjMsMTMgQEAgZW51bSBhY2NlbF9wc3Bfc3luZHJvbWUge1xcbiBcXHRQU1BfQkFEX1RSQUlMRVIsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3QgdTggcHNwX3N1cHBvcnRlZF92ZXJzaW9uc1tdID0ge1xcbitcXHRQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMTI4LFxcbitcXHRQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMjU2LFxcbit9O1xcbitcXG4rI2RlZmluZSBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUyBBUlJBWV9TSVpFKHBzcF9zdXBwb3J0ZWRfdmVyc2lvbnMpXFxuK1xcbiBzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG5AQCAtNDEsNyArNTAsNyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUge1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKm1pc3NfcnVsZTtcXG4tXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqcnhfbW9kaWZ5X2hkcjtcXG4rXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XFxuIH07XFxuIFxcbkBAIC01Miw2ICs2MSwxNSBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVkcF9ydWxlc1tBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUge1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZHJvcF9ncm91cDtcXG4rXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcXG4rXFx0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGVbTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlNdO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqdW5zdXBwb3J0ZWRfcnVsZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBtbHg1ZV9wc3BfZnMge1xcbiBcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldjtcXG4gXFx0c3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7XFxuQEAgLTYzLDEyICs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcXG4gXFx0c3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XFxuIFxcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcXG4rXFx0LyogV2hlbiBzZXQsIHN0ZWVyaW5nIGlzIGNvbmZpZ3VyZWQgdG8gZGVjYXBzdWxhdGUgUFNQIChyZW1vdmUgVURQK1BTUFxcbitcXHQgKiBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlcikgYW5kIGhhbmQgb2ZmIHRoZSBTUEkgaW4gY3FlLmZ0X21ldGFkYXRhLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBkZWNhcF9lbmFibGVkO1xcbiBcXG4gXFx0c3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIGRlY3J5cHRbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XFxuIFxcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7XFxuK1xcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfdGFibGUgcng7XFxuIH07XFxuIFxcbitzdGF0aWMgYm9vbCBzaGFtcG9fZW5hYmxlZChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY2hhbm5lbHMucGFyYW1zLnBhY2tldF9tZXJnZS50eXBlID09XFxuK1xcdFxcdE1MWDVFX1BBQ0tFVF9NRVJHRV9TSEFNUE87XFxuK31cXG4rXFxuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXFxuIHN0YXRpYyBlbnVtIG1seDVfdHJhZmZpY190eXBlcyBmc19wc3AydHQoZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpKVxcbiB7XFxuQEAgLTExMCw2ICsxMzksMTUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKiptb2RoZHIpXFxuK3tcXG4rXFx0aWYgKCptb2RoZHIpIHtcXG4rXFx0XFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZGV2LCAqbW9kaGRyKTtcXG4rXFx0XFx0Km1vZGhkciA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxcbiB7XFxuQEAgLTQwMiwxNSArNDQwLDE2MSBAQCBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljXFxuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmRlY2FwLVxcdTAwM2V1bnN1cHBvcnRlZF9ydWxlKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TOyBpKyspXFxuK1xcdFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZkZWNhcC1cXHUwMDNlcnVsZVtpXSk7XFxuK1xcdGlmIChkZWNhcC1cXHUwMDNlcmVmb3JtYXQpIHtcXG4rXFx0XFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhmcy1cXHUwMDNlbWRldiwgZGVjYXAtXFx1MDAzZXJlZm9ybWF0KTtcXG4rXFx0XFx0ZGVjYXAtXFx1MDAzZXJlZm9ybWF0ID0gTlVMTDtcXG4rXFx0fVxcbitcXHRhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZGVjYXAtXFx1MDAzZW1vZGlmeV9oZHIpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZkZWNhcC1cXHUwMDNlZHJvcF9ncm91cCk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFxcdTAwMjZkZWNhcC1cXHUwMDNlZnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLCB1OCB2ZXJzaW9uKVxcbit7XFxuK1xcdHZvaWQgKm1pc2NfcGFyYW1zXzY7XFxuK1xcbitcXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XFxuK1xcdHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU182O1xcbitcXHRtaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfY3JpdGVyaWEsXFxuK1xcdFxcdFxcdFxcdCAgICAgbWlzY19wYXJhbWV0ZXJzXzYpO1xcbitcXHRNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uKTtcXG4rXFx0bWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXFx1MDAzZW1hdGNoX3ZhbHVlLFxcbitcXHRcXHRcXHRcXHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcXG4rXFx0TUxYNV9TRVQoZnRlX21hdGNoX3NldF9taXNjNiwgbWlzY19wYXJhbXNfNiwgcHNwX3ZlcnNpb24sIHZlcnNpb24pO1xcbit9XFxuK1xcbitzdGF0aWNcXG4raW50IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY2FwX3RhYmxlICpkZWNhcClcXG4re1xcbitcXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9wa3RfcmVmb3JtYXRfcGFyYW1zIHJlZm9ybWF0X3BhcmFtcyA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcXG4rXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cXHUwMDNlbWRldjtcXG4rXFx0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcXG4rXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcXG4rXFx0aW50IGksIGVyciA9IDA7XFxuK1xcbitcXHRzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTtcXG4rXFx0aWYgKCFzcGVjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdC8qIENyZWF0ZSBGVCAqL1xcbitcXHRmdF9hdHRyLm1heF9mdGUgPSAxICsgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7XFxuK1xcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfREVDQVBfRlRfTEVWRUw7XFxuK1xcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbitcXHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFxcdTAwMjZmdF9hdHRyLCBcXHUwMDI2ZGVjYXAtXFx1MDAzZWZ0KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgcnggZnQgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9zcGVjO1xcbitcXHR9XFxuK1xcbitcXHQvKiBDcmVhdGUgZHJvcCBncm91cCAqL1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoZGVjYXAtXFx1MDAzZWZ0LCBcXHUwMDI2ZGVjYXAtXFx1MDAzZWRyb3BfZ3JvdXApO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG1seDVfY29yZV9lcnIobWRldixcXG4rXFx0XFx0XFx0ICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBkcm9wX2dyb3VwIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBZGQgZGVmYXVsdCBkcm9wIHJ1bGUgKi9cXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoZGVjYXAtXFx1MDAzZWZ0LCBOVUxMLCBmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZkZWNhcC1cXHUwMDNldW5zdXBwb3J0ZWRfcnVsZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIGRlY2FwIHVuc3VwcG9ydGVkIHZlcnNpb25zIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbW9kaWZ5X2hkcjogY29weSBTUEkgZnJvbSBSRUdfQ18wIHRvIFJFR19CICovXFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXFxuK1xcdFxcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQ18wKTtcXG4rXFx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMCk7ICAvKiAwID0gMzIgYml0cyAqL1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsXFxuK1xcdFxcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApO1xcbitcXG4rXFx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgMSwgYWN0aW9uKTtcXG4rXFx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcdH1cXG4rXFx0ZGVjYXAtXFx1MDAzZW1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbitcXG4rXFx0LyogcGt0X3JlZm9ybWF0OiBkZWNhcCBQU1AgdHJhbnNwb3J0ICovXFxuK1xcdHJlZm9ybWF0X3BhcmFtcy50eXBlID0gTUxYNV9SRUZPUk1BVF9UWVBFX1JFTU9WRV9QU1BfVFJBTlNQT1JUO1xcbitcXHRyZWZvcm1hdCA9IG1seDVfcGFja2V0X3JlZm9ybWF0X2FsbG9jKG1kZXYsIFxcdTAwMjZyZWZvcm1hdF9wYXJhbXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMKTtcXG4rXFx0aWYgKElTX0VSUihyZWZvcm1hdCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihyZWZvcm1hdCk7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0fVxcbitcXHRkZWNhcC1cXHUwMDNlcmVmb3JtYXQgPSByZWZvcm1hdDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUzsgaSsrKSB7XFxuK1xcdFxcdHU4IHZlcnNpb24gPSBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW2ldO1xcbitcXHRcXHRzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9O1xcbitcXG4rXFx0XFx0LyogbWF0Y2godmVyc2lvbikgPVxcdTAwM2UgZGVjYXAsIGNvcHkgU1BJLCBmd2QgdG8gcnggRlQgKi9cXG4rXFx0XFx0c2V0dXBfZnRlX3BzcF92ZXJzaW9uKHNwZWMsIHZlcnNpb24pO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT3ZlcnJpZGUgdGhlIGZsb3cgdGFnIHNldCBpbiB0aGUgZGVjcnlwdCB0YWJsZSB3aXRoXFxuK1xcdFxcdCAqIHRoZSBkZWNhcCBQU1AgbWFya2VyIGFuZCB2ZXJzaW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3BlYy1cXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdFxcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUCB8XFxuK1xcdFxcdFxcdCgodTMyKXZlcnNpb24gXFx1MDAzY1xcdTAwM2MgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVCk7XFxuK1xcbitcXHRcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fUEFDS0VUX1JFRk9STUFUIHxcXG4rXFx0XFx0XFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxcbitcXHRcXHRcXHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XFxuK1xcdFxcdGZsb3dfYWN0LnBrdF9yZWZvcm1hdCA9IHJlZm9ybWF0O1xcbitcXHRcXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4rXFx0XFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4rXFx0XFx0ZGVzdC5mdCA9IGZzLVxcdTAwM2VyeC5mdDtcXG4rXFxuK1xcdFxcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY2FwLVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBcXHUwMDI2ZGVzdCwgMSk7XFxuK1xcdFxcdGlmIChJU19FUlIocnVsZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihydWxlKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHR9XFxuK1xcdFxcdGRlY2FwLVxcdTAwM2VydWxlW2ldID0gcnVsZTtcXG4rXFx0fVxcbitcXHRnb3RvIG91dF9zcGVjO1xcbitcXG4rb3V0X2VycjpcXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIGRlY2FwKTtcXG4rb3V0X3NwZWM6XFxuK1xcdGt2ZnJlZShzcGVjKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlICpkZWNyeXB0KVxcbiB7XFxuIFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZkZWNyeXB0LVxcdTAwM2VydWxlKTtcXG4tXFx0aWYgKGRlY3J5cHQtXFx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcXG4tXFx0XFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXFx1MDAzZW1kZXYsIGRlY3J5cHQtXFx1MDAzZXJ4X21vZGlmeV9oZHIpO1xcbi1cXHRcXHRkZWNyeXB0LVxcdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcXG4tXFx0fVxcbitcXHRhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlbW9kaWZ5X2hkcik7XFxuIFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZkZWNyeXB0LVxcdTAwM2VtaXNzX3J1bGUpO1xcbiBcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZkZWNyeXB0LVxcdTAwM2VtaXNzX2dyb3VwKTtcXG4gXFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXFx1MDAyNmRlY3J5cHQtXFx1MDAzZWZ0KTtcXG5AQCAtNDMxLDExICs2MTUsMTEgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gKmRlZmF1bHRfZGVzdClcXG4ge1xcbiBcXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xcbi1cXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyID0gTlVMTDtcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XFxuIFxcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXFx1MDAzZW1kZXY7XFxuIFxcdE1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7XFxuK1xcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGhkcjtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcXG4gXFx0aW50IGVyciA9IDA7XFxuQEAgLTQ3OSwzMCArNjYzLDM2IEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0fVxcbiBcXHRkZWNyeXB0LVxcdTAwM2VtaXNzX3J1bGUgPSBydWxlO1xcbiBcXG4tXFx0LyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi9cXG4tXFx0c2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpO1xcbi1cXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcXG4tXFx0LyogU2V0IGJpdFszMSwgMzBdIFBTUCBtYXJrZXIgKi9cXG4tI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpXFxuLVxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTtcXG4tXFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBmaWVsZCwgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xcbi1cXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIE1MWDVFX1BTUF9NQVJLRVJfQklUKTtcXG4tXFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApO1xcbi1cXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMzIpO1xcbi1cXG4tXFx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSwgYWN0aW9uKTtcXG4tXFx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGFsbG9jIHBzcCBzZXQgbW9kaWZ5X2hlYWRlcl9pZCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuLVxcdFxcdG1vZGlmeV9oZHIgPSBOVUxMO1xcbitcXHQvKiBDcmVhdGUgbW9kaWZ5X2hkciB0byBjb3B5IFNQSSB0byBSRUdfQ18wICovXFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXFxuK1xcdFxcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfSEVBREVSXzEpO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfb2Zmc2V0LCAwKTtcXG4rXFx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAwKTsgIC8qIDAgPSAzMiBiaXRzICovXFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9maWVsZCxcXG4rXFx0XFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19DXzApO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3Rfb2Zmc2V0LCAwKTtcXG4rXFxuK1xcdG1vZGhkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhY3Rpb24pO1xcbitcXHRpZiAoSVNfRVJSKG1vZGhkcikpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihtb2RoZHIpO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0ZGVjcnlwdC1cXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XFxuK1xcdGRlY3J5cHQtXFx1MDAzZW1vZGlmeV9oZHIgPSBtb2RoZHI7XFxuIFxcbi1cXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxcbi1cXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XFxuLVxcdFxcdFxcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFI7XFxuLVxcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbitcXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xcbitcXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XFxuK1xcbitcXHQvKiBTZXQgUFNQIG1hcmtlciB2aWEgZmxvd190YWcgKi9cXG4rXFx0c3BlYy1cXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUDtcXG4rXFxuK1xcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xcbitcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxcbitcXHRcXHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8XFxuK1xcdFxcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcXG4rXFx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGhkcjtcXG4gXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4gXFx0ZGVzdC5mdCA9IGZzLVxcdTAwM2VjaGVjay5mdDtcXG4gXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjcnlwdC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmRlc3QsIDEpO1xcbkBAIC01MjMsOSArNzEzLDUwIEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfcmVjb25maWd1cmUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIGRlY2FwX3dhbnRlZClcXG4re1xcbitcXHRib29sIGRlY2FwX3N1cHBvcnRlZCA9XFxuK1xcdFxcdE1MWDVfQ0FQX0ZMT1dUQUJMRShmcy1cXHUwMDNlbWRldixcXG4rXFx0XFx0XFx0XFx0ICAgZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlZm9ybWF0X2RlbF9wc3BfdHJhbnNwb3J0KTtcXG4rXFx0Ym9vbCBkZWNhcF9lbmFibGUgPSBkZWNhcF93YW50ZWQgXFx1MDAyNlxcdTAwMjYgZGVjYXBfc3VwcG9ydGVkO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIENyZWF0ZSB0aGUgZGVjYXAgdGFibGUgaWYgbmVlZGVkLiAqL1xcbitcXHRpZiAoZGVjYXBfZW5hYmxlIFxcdTAwMjZcXHUwMDI2ICFmcy1cXHUwMDNlZGVjYXAuZnQpIHtcXG4rXFx0XFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2NyZWF0ZShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNhcCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0bWx4NV9jb3JlX3dhcm4oZnMtXFx1MDAzZW1kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0XFx0ZGVjYXBfZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZGVjYXBfZW5hYmxlID09IGZzLVxcdTAwM2VkZWNhcF9lbmFibGVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJlZGlyZWN0IHRyYWZmaWMgdG8gdGhlIGNvcnJlY3QgdGFibGUuICovXFxuK1xcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuK1xcdGRlc3QuZnQgPSBkZWNhcF9lbmFibGUgPyBmcy1cXHUwMDNlZGVjYXAuZnQgOiBmcy1cXHUwMDNlcnguZnQ7XFxuK1xcdGVyciA9IG1seDVfbW9kaWZ5X3J1bGVfZGVzdGluYXRpb24oZnMtXFx1MDAzZWNoZWNrLnJ1bGUsIFxcdTAwMjZkZXN0LCBOVUxMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveV9mdDtcXG4rXFxuK1xcdGZzLVxcdTAwM2VkZWNhcF9lbmFibGVkID0gZGVjYXBfZW5hYmxlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZGVzdHJveV9mdDpcXG4rXFx0aWYgKGRlY2FwX2VuYWJsZSlcXG4rXFx0XFx0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIFxcdTAwMjZmcy1cXHUwMDNlZGVjYXApO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuK1xcdGJvb2wgdGNfYmxvY2tlZCA9IGZzLVxcdTAwM2VyeC5mdDtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHQvKiBkaXNjb25uZWN0ICovXFxuQEAgLTUzNCwxOSArNzY1LDI5IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbiBcXHRcXHRhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KGZzLCBcXHUwMDI2ZnMtXFx1MDAzZWRlY3J5cHRbaV0pO1xcbiBcXHR9XFxuIFxcdGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KFxcdTAwMjZmcy1cXHUwMDNlY2hlY2spO1xcbitcXHRhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfZGVzdHJveShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNhcCk7XFxuIFxcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFxcdTAwMjZmcy1cXHUwMDNlcngpO1xcbitcXHRpZiAodGNfYmxvY2tlZClcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLVxcdTAwM2VtZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbitcXHRcXHRcXHRcXHQgIGJvb2wgZGVjYXBfZW5hYmxlLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbitcXHRlcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKGZzLVxcdTAwM2VtZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJUQyBvZmZsb2FkIGFjdGl2ZSwgY2Fubm90IGVuYWJsZSBQU1BcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Z0X2NyZWF0ZShmcywgXFx1MDAyNmZzLVxcdTAwM2VyeCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlXFxcIik7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX3VuYmxvY2tfdGM7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoZnMsIFxcdTAwMjZmcy1cXHUwMDNlY2hlY2spO1xcbkBAIC01NzMsNiArODE0LDEyIEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0XFx0bWx4NV90dGNfZndkX2Rlc3QodHRjLCBmc19wc3AydHQoaSksIFxcdTAwMjZkZXN0KTtcXG4gXFx0fVxcbiBcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKGZzLCBkZWNhcF9lbmFibGUpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCBSWCBzdGVlcmluZyBjb25maWcgZm9yIEhXIEdST1xcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9kZWNyeXB0X2Z0O1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9kZWNyeXB0X2Z0OlxcbkBAIC01ODMsNiArODMwLDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbiBcXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcXHUwMDI2ZnMtXFx1MDAzZWNoZWNrKTtcXG4gZXJyX2Z0OlxcbiBcXHRhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveShcXHUwMDI2ZnMtXFx1MDAzZXJ4KTtcXG4rZXJyX3VuYmxvY2tfdGM6XFxuK1xcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChmcy1cXHUwMDNlbWRldik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTgzOSw3ICsxMDg4LDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMsIGV4dGFjayk7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cXHUwMDNlcHNwLVxcdTAwM2Vmcywgc2hhbXBvX2VuYWJsZWQocHJpdiksXFxuK1xcdFxcdFxcdFxcdCAgICAgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTExMTYsMyArMTM2NiwxNCBAQCB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiBcXHRwcml2LVxcdTAwM2Vwc3AgPSBOVUxMO1xcbiBcXHRrZnJlZShwc3ApO1xcbiB9XFxuK1xcbitpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVxcdTAwM2Vwc3A7XFxuK1xcbitcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChwcml2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRpZiAoIXBzcCB8fCAhcHNwLVxcdTAwM2Vmcy1cXHUwMDNlY2hlY2suZnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShwc3AtXFx1MDAzZWZzLCBzaGFtcG9fZW5hYmxlZChwcml2KSk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXFxuaW5kZXggM2Y0NDFlN2RkNTVhYy4uNzZmNmM2OWRlMGU5MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcXG5AQCAtNDksNiArNDksNyBAQCBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gdm9pZCBtbHg1ZV9wc3BfdW5yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbitpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuQEAgLTYxLDUgKzYyLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfdW5yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NTFg1X0VOX1BTUCAqL1xcbiAjZW5kaWYgLyogX19NTFg1RV9BQ0NFTF9QU1BfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcXG5pbmRleCAzNDhmZDdhOTYyNjE1Li4yYmVmZmVlMTQyNzhkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcXG5AQCAtMTE4LDEwICsxMTgsMjUgQEAgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHUxNiBkZXZfaWQgPSBwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZXBzZC1cXHUwMDNlaWQ7XFxuLVxcdGJvb2wgc3RyaXBfaWN2ID0gdHJ1ZTtcXG4tXFx0dTggZ2VuZXJhdGlvbiA9IDA7XFxuK1xcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xcbitcXG4rXFx0aWYgKG1seDVlX3BzcF9pc19kZWNhcChjcWUpKSB7XFxuK1xcdFxcdC8qIFVEUCArIFBTUCBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlciByZW1vdmVkIGJ5IEhXLlxcbitcXHRcXHQgKiBDb25zdHJ1Y3QgdGhlIFBTUCBleHRlbnNpb24gZnJvbSBDUUUgbWV0YWRhdGEuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFwc2UpKVxcbitcXHRcXHRcXHRnb3RvIGRyb3A7XFxuK1xcbitcXHRcXHRwc2UtXFx1MDAzZXNwaSA9IG1seDVlX3BzcF9nZXRfc3BpKGNxZSk7XFxuK1xcdFxcdHBzZS1cXHUwMDNldmVyc2lvbiA9IG1seDVlX3BzcF9nZXRfdmVyc2lvbihjcWUpO1xcbitcXHRcXHRwc2UtXFx1MDAzZWRldl9pZCA9IGRldl9pZDtcXG4rXFx0XFx0cHNlLVxcdTAwM2VnZW5lcmF0aW9uID0gMDtcXG4rXFx0XFx0c2tiLVxcdTAwM2VkZWNyeXB0ZWQgPSAxO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChwc3BfZGV2X3Jjdihza2IsIGRldl9pZCwgZ2VuZXJhdGlvbiwgc3RyaXBfaWN2KSlcXG4rXFx0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCAwLCB0cnVlKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4gXFx0c2tiLVxcdTAwM2VkZWNyeXB0ZWQgPSAxO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXFxuaW5kZXggMmIwODBjMzljYzM3ZS4uNDFiNjAyNTliM2JjNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXFxuQEAgLTksMTAgKzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BzcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3R4cnguaFxcXCJcXG4tXFxuLS8qIEJpdDMwOiBQU1AgbWFya2VyLCBCaXQyMi0wOiBQU1Agb2JqIGlkICovXFxuLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcXHUwMDNlXFx1MDAzZSAzMCkgXFx1MDAyNiAweDMpID09IDB4MylcXG4tI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcXHUwMDI2IEdFTk1BU0soMjIsIDApKVxcbisjaW5jbHVkZSBcXFwiZW5fYWNjZWwvZmxvd190YWcuaFxcXCJcXG4gXFxuIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUge1xcbiBcXHR1MzIgdGFpbGVuO1xcbkBAIC04Miw3ICs3OSwyOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtbHg1ZV9wc3BfdHhfaWRzX2xlbihzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4ge1xcbi1cXHRyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlZnRfbWV0YWRhdGEpKTtcXG4rXFx0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcXG4rXFxuK1xcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1AgfHxcXG4rXFx0XFx0cHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQO1xcbitcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19kZWNhcChzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XFxuK1xcbitcXHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHU4IG1seDVlX3BzcF9nZXRfdmVyc2lvbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHJldHVybiAobWx4NWVfYWNjZWxfZmxvd190YWcoY3FlKSBcXHUwMDI2IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSykgXFx1MDAzZVxcdTAwM2VcXG4rXFx0XFx0TUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4re1xcbitcXHRyZXR1cm4gY3FlLVxcdTAwM2VmdF9tZXRhZGF0YTtcXG4gfVxcbiBcXG4gYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuQEAgLTExMCw2ICsxMjksMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19kZWNhcChzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1OCBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5pbmRleCAzYjlkNDJjN2U5YzI4Li4zYzZlZjUwMGQwZmIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXFxuQEAgLTYyODYsNyArNjI4NiwxMyBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFxuIHN0YXRpYyBpbnQgbWx4NWVfdXBkYXRlX25pY19yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRyZXR1cm4gbWx4NWVfcmVmcmVzaF90aXJzKHByaXYtXFx1MDAzZW1kZXYsIGZhbHNlLCBmYWxzZSk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtbHg1ZV9yZWZyZXNoX3RpcnMocHJpdi1cXHUwMDNlbWRldiwgZmFsc2UsIGZhbHNlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBtbHg1ZV9hY2NlbF91cGRhdGVfcngocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWx4NWVfcHJvZmlsZSBtbHg1ZV9uaWNfcHJvZmlsZSA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xcbmluZGV4IGZiNzExMGIxYjY4MzQuLmM3ZWFhYjNmNzk2N2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xcbkBAIC0yMjIxLDYgKzIyMjEsMzMgQEAgc3RhdGljIGJvb2wgbWx4NWVfaHdfZ3JvX3NrYl9oYXNfZW5vdWdoX3NwYWNlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBwYWdlX3NpemUgKiBucl9mcmFncyArIGRhdGFfYmNudCBcXHUwMDNjPSBHUk9fTEVHQUNZX01BWF9TSVpFO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fcHNwX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19NTFg1X0VOX1BTUFxcbitcXHRzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZSA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfUFNQKTtcXG4rXFx0Ym9vbCBpc19wc3AgPSBtbHg1ZV9wc3BfaXNfcnhfZmxvdyhjcWUpO1xcbitcXG4rXFx0aWYgKGxpa2VseSghaXNfcHNwIFxcdTAwMjZcXHUwMDI2ICFwc2UpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIE5vIG1hdGNoIG9uIFBTUCBzdGF0dXMgY2hhbmdlIChubyBjcnlwdG8gLVxcdTAwM2UgY3J5cHRvIG9yIHZpY2UtdmVyc2EpLiAqL1xcbitcXHRpZiAodW5saWtlbHkoaXNfcHNwICE9ICEhcHNlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogU1BJIGFuZCB2ZXJzaW9uIGFyZSBvbmx5IGF2YWlsYWJsZSBpbiBDUUUgbWV0YWRhdGEgZm9yIGRlY2FwIGZsb3dzLlxcbitcXHQgKiBOb24tZGVjYXAgUFNQIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUsIGZvcmNlIGEgZmx1c2guXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoIW1seDVlX3BzcF9pc19kZWNhcChjcWUpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogTm8gbWF0Y2ggb24gc2VjdXJpdHkgcGFyYW1ldGVycyBjaGFuZ2UuICovXFxuK1xcdHJldHVybiBwc2UtXFx1MDAzZXNwaSA9PSBtbHg1ZV9wc3BfZ2V0X3NwaShjcWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdHBzZS1cXHUwMDNldmVyc2lvbiA9PSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIHRydWU7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbiB7XFxuIFxcdHUxNiBkYXRhX2JjbnRcXHRcXHQ9IG1wd3JxX2dldF9jcWVfYnl0ZV9jbnQoY3FlKSAtIGNxZS1cXHUwMDNlc2hhbXBvLmhlYWRlcl9zaXplO1xcbkBAIC0yMjU4LDggKzIyODUsOSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcVxcbiBcXHRkYXRhX29mZnNldCA9IHdxZV9vZmZzZXQgXFx1MDAyNiAocGFnZV9zaXplIC0gMSk7XFxuIFxcdHBhZ2VfaWR4ID0gd3FlX29mZnNldCBcXHUwMDNlXFx1MDAzZSBycS1cXHUwMDNlbXB3cWUucGFnZV9zaGlmdDtcXG4gXFx0aWYgKCpza2IgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICEobWF0Y2ggXFx1MDAyNlxcdTAwMjYgbWx4NWVfaHdfZ3JvX3NrYl9oYXNfZW5vdWdoX3NwYWNlKCpza2IsIGRhdGFfYmNudCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHBhZ2Vfc2l6ZSkpKSB7XFxuK1xcdCAgICAhKG1hdGNoIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsIHBhZ2Vfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgbWx4NWVfaHdfZ3JvX3BzcF9tYXRjaCgqc2tiLCBjcWUpKSkge1xcbiBcXHRcXHRtYXRjaCA9IGZhbHNlO1xcbiBcXHRcXHRtbHg1ZV9zaGFtcG9fZmx1c2hfc2tiKHJxLCBjcWUsIG1hdGNoKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jXFxuaW5kZXggMWJjN2I5MDE5MTI0YS4uNzAxOTVmY2RkZmM4MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jXFxuQEAgLTQ4MTEsMTQgKzQ4MTEsMTQgQEAgc3RhdGljIGJvb2wgaXNfZmxvd19ydWxlX2R1cGxpY2F0ZV9hbGxvd2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiBuZXRpZl9pc19sYWdfcG9ydChkZXYpIFxcdTAwMjZcXHUwMDI2IHJwcml2IFxcdTAwMjZcXHUwMDI2IHJwcml2LVxcdTAwM2VyZXAtXFx1MDAzZXZwb3J0ICE9IE1MWDVfVlBPUlRfVVBMSU5LO1xcbiB9XFxuIFxcbi0vKiBBcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUtb2ZmbG9hZCxcXG4tICogZWl0aGVyIElQc2VjIG9mZmxvYWQgb3IgVEMgb2ZmbG9hZCwgbm90IGJvdGgsIGlzIGFsbG93ZWQgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxcbisvKiBUQyBvZmZsb2FkIGFuZCBhY2NlbCBwcm90b2NvbHMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgZmxvd190YWcgd2l0aFxcbisgKiBzdGVlcmluZyBydWxlcyBhbmQgdGhleSBjYW5ub3Qgc2ltdWx0YW5lb3VzbHkgb3BlcmF0ZSBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuXFxuKyAqIEFkZGl0aW9uYWxseSwgYXMgSVBzZWMgYW5kIFRDIG9yZGVyIGlzIG5vdCBhbGlnbmVkIGJldHdlZW4gc29mdHdhcmUgYW5kXFxuKyAqIGhhcmR3YXJlLW9mZmxvYWQsIG9ubHkgb25lIGlzIGFsbG93ZWQgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitzdGF0aWMgYm9vbCBpc190Y19hY2NlbF9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01MWDVfRU5fSVBTRUMpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbiBcXHRpZiAoZmlsdGVyICE9IHByaXYtXFx1MDAzZW5ldGRldilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG5AQCAtNDgyOCwyNyArNDgyOCwzNSBAQCBzdGF0aWMgYm9vbCBpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtbHg1ZV90Y19ibG9ja19pcHNlY19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitzdGF0aWMgaW50IG1seDVlX3RjX2Jsb2NrX2FjY2VsX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuLVxcdGlmICghaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXFxuK1xcdGlmICghaXNfdGNfYWNjZWxfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKG1kZXYtXFx1MDAzZW51bV9ibG9ja190YylcXG4tXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFxuLVxcdG1kZXYtXFx1MDAzZW51bV9ibG9ja19pcHNlYysrO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xcbitcXHRpZiAobWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fdGMpXFxuK1xcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCsrO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitzdGF0aWMgdm9pZCBtbHg1ZV90Y191bmJsb2NrX2FjY2VsX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4tXFx0aWYgKCFpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcXG4rXFx0aWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNlbWRldi1cXHUwMDNlbnVtX2Jsb2NrX2lwc2VjLS07XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKCFwcml2LVxcdTAwM2VtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCkpXFxuK1xcdFxcdHByaXYtXFx1MDAzZW1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subnVtX2FjY2VsLS07XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcXG4gfVxcbiBcXG4gaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuQEAgLTQ4NjMsNyArNDg3MSw3IEBAIGludCBtbHg1ZV9jb25maWd1cmVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBcXHRpZiAoIW1seDVfZXN3X2hvbGQocHJpdi1cXHUwMDNlbWRldikpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbi1cXHRlcnIgPSBtbHg1ZV90Y19ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7XFxuK1xcdGVyciA9IG1seDVlX3RjX2Jsb2NrX2FjY2VsX29mZmxvYWQoZGV2LCBwcml2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlc3dfcmVsZWFzZTtcXG4gXFxuQEAgLTQ5MTIsNyArNDkyMCw3IEBAIGludCBtbHg1ZV9jb25maWd1cmVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBlcnJfZnJlZTpcXG4gXFx0bWx4NWVfZmxvd19wdXQocHJpdiwgZmxvdyk7XFxuIG91dDpcXG4tXFx0bWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7XFxuK1xcdG1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpO1xcbiBcXHRtbHg1X2Vzd19wdXQocHJpdi1cXHUwMDNlbWRldik7XFxuIGVzd19yZWxlYXNlOlxcbiBcXHRtbHg1X2Vzd19yZWxlYXNlKHByaXYtXFx1MDAzZW1kZXYpO1xcbkBAIC00OTU1LDcgKzQ5NjMsNyBAQCBpbnQgbWx4NWVfZGVsZXRlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG4gXFx0dHJhY2VfbWx4NWVfZGVsZXRlX2Zsb3dlcihmKTtcXG4gXFx0bWx4NWVfZmxvd19wdXQocHJpdiwgZmxvdyk7XFxuIFxcbi1cXHRtbHg1ZV90Y191bmJsb2NrX2lwc2VjX29mZmxvYWQoZGV2LCBwcml2KTtcXG4rXFx0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XFxuIFxcdG1seDVfZXN3X3B1dChwcml2LVxcdTAwM2VtZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oXFxuaW5kZXggZTFiOGNiNzgzNjlmMS4uNTNiNjA0M2UzM2QyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oXFxuQEAgLTM2LDYgKzM2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJlbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZXN3aXRjaC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZW5fYWNjZWwvZmxvd190YWcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3RjX2N0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJlbi90Y190dW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3RjL2ludF9wb3J0LmhcXFwiXFxuQEAgLTM3MCwxMSArMzcxLDEzIEBAIHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqbWx4NWVfdGNfdGFibGVfYWxsb2Modm9pZCk7XFxuIHZvaWQgbWx4NWVfdGNfdGFibGVfZnJlZShzdHJ1Y3QgbWx4NWVfdGNfdGFibGUgKnRjKTtcXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX2NxZV9yZWdiX2NoYWluKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuIHtcXG4tXFx0dTMyIGNoYWluLCByZWdfYjtcXG4rXFx0dTMyIGZsb3dfdGFnLCByZWdfYiwgY2hhaW47XFxuIFxcbitcXHRmbG93X3RhZyA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XFxuIFxcdHJlZ19iID0gYmUzMl90b19jcHUoY3FlLVxcdTAwM2VmdF9tZXRhZGF0YSk7XFxuIFxcbi1cXHRpZiAocmVnX2IgXFx1MDAzZVxcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpXFxuK1xcdGlmIChmbG93X3RhZyAhPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19OT05FIHx8XFxuK1xcdCAgICAocmVnX2IgXFx1MDAzZVxcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRjaGFpbiA9IHJlZ19iIFxcdTAwMjYgTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX01BU0s7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jXFxuaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuY1xcbkBAIC04LDYgKzgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWx4NS9tYWNzZWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImZzX2NvcmUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImxpYi9tYWNzZWNfZnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2Zsb3dfdGFnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtbHg1X2NvcmUuaFxcXCJcXG4gXFxuIC8qIE1BQ3NlYyBUWCBmbG93IHN0ZWVyaW5nICovXFxuQEAgLTQ1LDkgKzQ2LDYgQEBcXG4gI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIT1VUX1NDSSAweDhcXG4gI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIX1NDSSAoTUxYNV9TRUNUQUdfSEVBREVSX1NJWkVfV0lUSE9VVF9TQ0kgKyBNQUNTRUNfU0NJX0xFTilcXG4gXFxuLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi9cXG4tI2RlZmluZSBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSAoKGZzX2lkKSB8IEJJVCgzMCkpXFxuLVxcbiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHtcXG4gXFx0X19iZTE2IGV0aGVydHlwZTtcXG4gXFx0dTggdGNpX2FuO1xcbkBAIC0xNzU3LDExICsxNzU1LDEwIEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcyxcXG4gXFx0cnhfdGFibGVzID0gXFx1MDAyNnJ4X2ZzLVxcdTAwM2V0YWJsZXM7XFxuIFxcdGZ0X2NyeXB0byA9IFxcdTAwMjZyeF90YWJsZXMtXFx1MDAzZWZ0X2NyeXB0bztcXG4gXFxuLVxcdC8qIFNldCBiaXRbMzEgLSAzMF0gbWFjc2VjIG1hcmtlciAtIDB4MDEgKi9cXG4gXFx0LyogU2V0IGJpdFsxNS0wXSBmcyBpZCAqL1xcbiBcXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XFxuIFxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcXG4tXFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7XFxuK1xcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZGF0YSwgZnNfaWQpO1xcbiBcXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIG9mZnNldCwgMCk7XFxuIFxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7XFxuIFxcbkBAIC0xNzc4LDYgKzE3NzUsOSBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsXFxuIFxcdC8qIFJ4IGNyeXB0byB0YWJsZSB3aXRoIFNDSSBydWxlICovXFxuIFxcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBhdHRycywgdHJ1ZSk7XFxuIFxcbitcXHRzcGVjLVxcdTAwM2VmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQztcXG4rXFxuIFxcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbiBcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxcbiBcXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XFxuQEAgLTE4MDMsNiArMTgwMyw5IEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcyxcXG4gXFxuIFxcdFxcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBhdHRycywgZmFsc2UpO1xcbiBcXG4rXFx0XFx0c3BlYy1cXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzIHw9IEZMT1dfQ09OVEVYVF9IQVNfVEFHO1xcbitcXHRcXHRzcGVjLVxcdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XFxuK1xcbiBcXHRcXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4gXFx0XFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4gXFx0XFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxcbkBAIC0yMTYwLDggKzIxNjMsOCBAQCBzdGF0aWMgaW50IG1seDVfbWFjc2VjX2ZzX2FkZF9yb2NlX3J1bGVfcngoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsIHUzMlxcbiBcXG4gXFx0c3BlYy1cXHUwMDNlbWF0Y2hfY3JpdGVyaWFfZW5hYmxlIHw9IE1MWDVfTUFUQ0hfTUlTQ19QQVJBTUVURVJTXzI7XFxuIFxcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVxcdTAwM2VtYXRjaF9jcml0ZXJpYSwgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfNSk7XFxuLVxcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUsXFxuLVxcdFxcdCBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7XFxuK1xcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsXFxuK1xcdFxcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181LCBmc19pZCk7XFxuIFxcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9BTExPVztcXG4gXFx0bmV3X3J1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2ZzLVxcdTAwM2Vyb2NlLmZ0X21hY3NlY19vcF9jaGVjaywgc3BlYywgXFx1MDAyNmZsb3dfYWN0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgTlVMTCwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXFxuaW5kZXggMTVhY2FmZjQzNjQxNy4uYjhiOGI0MTJkNWMzZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaFxcbkBAIC02LDExICs2LDEwIEBAXFxuIFxcbiAjaWZkZWYgQ09ORklHX01MWDVfTUFDU0VDXFxuIFxcbi0vKiBCaXQzMSAtIDMwOiBNQUNzZWMgbWFya2VyLCBCaXQxNS0wOiBNQUNzZWMgaWQgKi9cXG4tI2RlZmluZSBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWCBVU0hSVF9NQVggLyogTXVzdCBiZSBwb3dlciBvZiB0d28gKi9cXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYXFxuLSNkZWZpbmUgTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcXHUwMDNlXFx1MDAzZSAzMCkgXFx1MDAyNiAweDMpICA9PSAweDEpXFxuLSNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVF9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXFxuKy8qIE1BQ3NlYyBmc19pZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzE1OjBdICovXFxuKyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYIFVTSFJUX01BWCAvKiBNdXN0IGJlIHBvd2VyIG9mIHR3byAqL1xcbisjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYXFxuKyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXFx1MDAyNiBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLKVxcbiBcXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cXG4gI2RlZmluZSBNTFg1X0VUSF9XUUVfRlRfTUVUQV9NQUNTRUNfTUFTSyBcXFxcXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuaW5kZXggNjQzYjRhYWMyMDMzNi4uNDA2YzBmN2U2M2Q4MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xcbkBAIC0xODEwLDYgKzE4MTAsNyBAQCBpbnQgbWx4NV9tZGV2X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHByb2ZpbGVfaWR4KVxcbiBcXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrX2tleSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XFxuIFxcdGxvY2tkZXBfc2V0X2NsYXNzKFxcdTAwMjZkZXYtXFx1MDAzZWludGZfc3RhdGVfbXV0ZXgsIFxcdTAwMjZkZXYtXFx1MDAzZWxvY2tfa2V5KTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdjX3N0YXRlX2xvY2spO1xcbiBcXG5AQCAtMTg5OCw2ICsxODk5LDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlYWxsb2NfbXV0ZXgpO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2ViZnJlZ3Mud2NfaGVhZC5sb2NrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRldi1cXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XFxuIFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXFx1MDAyNmRldi1cXHUwMDNlbG9ja19rZXkpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xOTI1LDYgKzE5MjcsNyBAQCB2b2lkIG1seDVfbWRldl91bmluaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZXdjX3N0YXRlX2xvY2spO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRldi1cXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XFxuIFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXFx1MDAyNmRldi1cXHUwMDNlbG9ja19rZXkpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxcbmluZGV4IGIxODcxYzA4MjFkMGIuLjJkOWJjNzUyZTQzMWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXFxuQEAgLTc4OCw4ICs3ODgsMTEgQEAgc3RydWN0IG1seDVfY29yZV9kZXYge1xcbiBcXHR1MzIgICAgICAgICAgICAgICAgICAgICAgdnNjX2FkZHI7XFxuIFxcdHN0cnVjdCBtbHg1X2h2X3ZoY2FcXHQqaHZfdmhjYTtcXG4gXFx0c3RydWN0IG1seDVfaHdtb25cXHQqaHdtb247XFxuLVxcdHU2NFxcdFxcdFxcdG51bV9ibG9ja190YztcXG4tXFx0dTY0XFx0XFx0XFx0bnVtX2Jsb2NrX2lwc2VjO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4rXFx0XFx0dTY0IG51bV90YztcXG4rXFx0XFx0dTY0IG51bV9hY2NlbDtcXG4rXFx0fSBvZmZsb2FkX2Jsb2NrO1xcbiAjaWZkZWYgQ09ORklHX01MWDVfTUFDU0VDXFxuIFxcdHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzO1xcbiBcXHQvKiBNQUNzZWMgbm90aWZpZXIgY2hhaW4gdG8gc3luYyBNQUNzZWMgY29yZSBhbmQgSUIgZGF0YWJhc2UgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XFxuaW5kZXggMzE1NjQ4YTc3MGQwMC4uOWI4OTk3MjNhNjM1YSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcXG5AQCAtMTYsMTEgKzE2LDEyIEBAIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3RydWUsIGtzZnRfZXEsIGtzZnRfbmUsIGtzZnRfZ3QsIGtzZnRfcmFpc2VzXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9ub25lXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50XFxuLWZyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4XFxuK2Zyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4LCBLc2Z0WGZhaWxFeFxcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIE5ldERydkNvbnRFbnZcXG4tZnJvbSBsaWIucHkgaW1wb3J0IE5ldGxpbmssIE5sRXJyb3IsIFBTUEZhbWlseSwgUnRubEZhbWlseVxcbitmcm9tIGxpYi5weSBpbXBvcnQgTmV0bGluaywgTmxFcnJvciwgTmV0ZGV2RmFtaWx5LCBQU1BGYW1pbHksIFJ0bmxGYW1pbHlcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldE5TRW50ZXJcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXFxuK2Zyb20gbGliLnB5IGltcG9ydCBia2csIGV0aHRvb2wsIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlbiwgQ21kRXhpdEZhaWx1cmVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGlwXFxuIFxcbiBcXG5AQCAtMzAsMTUgKzMxLDI1IEBAIGRlZiBfZ2V0X291dHEocyk6XFxuICAgICByZXR1cm4gc3RydWN0LnVucGFjayhcXFwiSVxcXCIsIG91dHEpWzBdXFxuIFxcbiBcXG4rZGVmIF9yZWN2X2V4YWN0KHNvY2ssIG4pOlxcbisgICAgYnVmID0gYicnXFxuKyAgICB3aGlsZSBsZW4oYnVmKSBcXHUwMDNjIG46XFxuKyAgICAgICAgY2h1bmsgPSBzb2NrLnJlY3YobiAtIGxlbihidWYpKVxcbisgICAgICAgIGlmIG5vdCBjaHVuazpcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgICAgICBidWYgKz0gY2h1bmtcXG4rICAgIHJldHVybiBidWZcXG4rXFxuK1xcbiBkZWYgX3NlbmRfd2l0aF9hY2soY2ZnLCBtc2cpOlxcbi0gICAgY2ZnLmNvbW1fc29jay5zZW5kKG1zZylcXG4tICAgIHJlc3BvbnNlID0gY2ZnLmNvbW1fc29jay5yZWN2KDQpXFxuKyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKVxcbisgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KVxcbiAgICAgaWYgcmVzcG9uc2UgIT0gYidhY2tcXFxcMCc6XFxuICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxcXCJVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZVxcXCIsIHJlc3BvbnNlKVxcbiBcXG4gXFxuIGRlZiBfcmVtb3RlX3JlYWRfbGVuKGNmZyk6XFxuLSAgICBjZmcuY29tbV9zb2NrLnNlbmQoYidyZWFkIGxlblxcXFwwJylcXG4rICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiJ3JlYWQgbGVuXFxcXDAnKVxcbiAgICAgcmV0dXJuIGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJ3V0Zi04JykpXFxuIFxcbiBcXG5AQCAtOTcsNyArMTA4LDcgQEAgZGVmIF9zZW5kX2NhcmVmdWwoY2ZnLCBzLCByb3VuZHMpOlxcbiBkZWYgX2NoZWNrX2RhdGFfcngoY2ZnLCBleHBfbGVuKTpcXG4gICAgIHJlYWRfbGVuID0gLTFcXG4gICAgIGZvciBfIGluIHJhbmdlKDMwKTpcXG4tICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmQoYidyZWFkIGxlblxcXFwwJylcXG4rICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYidyZWFkIGxlblxcXFwwJylcXG4gICAgICAgICByZWFkX2xlbiA9IGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJ3V0Zi04JykpXFxuICAgICAgICAgaWYgcmVhZF9sZW4gPT0gZXhwX2xlbjpcXG4gICAgICAgICAgICAgYnJlYWtcXG5AQCAtNTgzLDYgKzU5NCwxMDggQEAgZGVmIF9nZXRfcHNwX3Zlcl9pcF92YXJpYW50cygpOlxcbiAgICAgICAgIGZvciBpcHYgaW4gKFxcXCI0XFxcIiwgXFxcIjZcXFwiKTpcXG4gICAgICAgICAgICAgeWllbGQgS3NmdE5hbWVkVmFyaWFudChmXFxcInZ7dmVyfV9pcHtpcHZ9XFxcIiwgdmVyLCBpcHYpXFxuIFxcbitkZWYgX2VuYWJsZV9sb2NhbF9od19ncm8oY2ZnKTpcXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcXFwiZXRodG9vbFxcXCIpXFxuKyAgICBmZWF0ID0gZXRodG9vbChmXFxcIi1rIHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSlbMF1cXG4rICAgIGdybyA9IGZlYXQuZ2V0KFxcXCJyeC1ncm8taHdcXFwiKVxcbisgICAgaWYgbm90IGdybyBvciBcXFwiYWN0aXZlXFxcIiBub3QgaW4gZ3JvIG9yIFxcXCJmaXhlZFxcXCIgbm90IGluIGdybzpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJIVyBHUk8gZmVhdHVyZSBub3QgcmVwb3J0ZWQgYnkgZXRodG9vbFxcXCIpXFxuKyAgICBpZiBncm9bXFxcImZpeGVkXFxcIl0gYW5kIG5vdCBncm9bXFxcImFjdGl2ZVxcXCJdOlxcbisgICAgICAgIHJhaXNlIEtzZnRYZmFpbEV4KFxcXCJIVyBHUk8gbm90IHN1cHBvcnRlZCBieSBkZXZpY2VcXFwiKVxcbisgICAgaWYgbm90IGdyb1tcXFwiYWN0aXZlXFxcIl06XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBldGh0b29sKGZcXFwiLUsge2NmZy5pZm5hbWV9IHJ4LWdyby1odyBvblxcXCIpXFxuKyAgICAgICAgZXhjZXB0IENtZEV4aXRGYWlsdXJlIGFzIGU6XFxuKyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIkNhbm5vdCBlbmFibGUgSFcgR1JPIHZpYSBldGh0b29sXFxcIikgZnJvbSBlXFxuKyAgICAgICAgZGVmZXIoZXRodG9vbCwgZlxcXCItSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9mZlxcXCIpXFxuKyAgICAgICAgZmVhdCA9IGV0aHRvb2woZlxcXCItayB7Y2ZnLmlmbmFtZX1cXFwiLCBqc29uPVRydWUpWzBdXFxuKyAgICAgICAgZ3JvID0gZmVhdC5nZXQoXFxcInJ4LWdyby1od1xcXCIsIHt9KVxcbisgICAgICAgIGlmIG5vdCBncm8uZ2V0KFxcXCJhY3RpdmVcXFwiKTpcXG4rICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwiSFcgR1JPIGZhaWxlZCB0byBhY3RpdmF0ZVxcXCIpXFxuK1xcbitcXG4rZGVmIF9yZW1vdGVfc2VuZChjZmcsIHNpemUpOlxcbisgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGInZGF0YSBzZW5kXFxcXDAnICsgc3RydWN0LnBhY2soJyFJJywgc2l6ZSkpXFxuKyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpXFxuKyAgICBpZiByZXNwb25zZSAhPSBiJ2Fja1xcXFwwJzpcXG4rICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXFxcIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlIHRvIGRhdGEgc2VuZFxcXCIsIHJlc3BvbnNlKVxcbitcXG4rXFxuK2RlZiBfcmVjdl9hbGwocywgZXhwZWN0ZWQsIHRpbWVvdXQ9MjApOlxcbisgICAgcy5zZXR0aW1lb3V0KHRpbWVvdXQpXFxuKyAgICB0b3RhbCA9IDBcXG4rICAgIHRyeTpcXG4rICAgICAgICB3aGlsZSB0b3RhbCBcXHUwMDNjIGV4cGVjdGVkOlxcbisgICAgICAgICAgICBkYXRhID0gcy5yZWN2KG1pbig2NTUzNiwgZXhwZWN0ZWQgLSB0b3RhbCkpXFxuKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgICAgICAgICAgdG90YWwgKz0gbGVuKGRhdGEpXFxuKyAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6XFxuKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxcbisgICAgICAgICAgICBmXFxcIlRpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcXFwiXFxuKyAgICAgICAgICAgIGZcXFwiKHJlc3BvbmRlciBtYXkgaGF2ZSBmYWlsZWQgdG8gc2VuZClcXFwiKVxcbisgICAgaWYgdG90YWwgXFx1MDAzYyBleHBlY3RlZDpcXG4rICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXFxuKyAgICAgICAgICAgIGZcXFwiU2hvcnQgcmVhZDogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcXFwiXFxuKyAgICAgICAgICAgIGZcXFwiKHJlc3BvbmRlciBjb25uZWN0aW9uIGNsb3NlZCBlYXJseSlcXFwiKVxcbisgICAgcmV0dXJuIHRvdGFsXFxuK1xcbitcXG4rZGVmIF9kYXRhX2h3X2dybyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcXG4rICAgIFxcXCJcXFwiXFxcIiBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgXFxcIlxcXCJcXFwiXFxuKyAgICBfaW5pdF9wc3BfZGV2KGNmZylcXG4rICAgICMgVmVyc2lvbiAwIGlzIHJlcXVpcmVkIGJ5IHNwZWMsIGRvbid0IGxldCBpdCBza2lwXFxuKyAgICBpZiB2ZXJzaW9uOlxcbisgICAgICAgIG5hbWUgPSBjZmcucHNwbmwuY29uc3RzW1xcXCJ2ZXJzaW9uXFxcIl0uZW50cmllc19ieV92YWxbdmVyc2lvbl0ubmFtZVxcbisgICAgICAgIGlmIG5hbWUgbm90IGluIGNmZy5wc3BfaW5mb1sncHNwLXZlcnNpb25zLWNhcCddOlxcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJQU1AgdmVyc2lvbiBub3Qgc3VwcG9ydGVkXFxcIiwgbmFtZSlcXG4rXFxuKyAgICBfZW5hYmxlX2xvY2FsX2h3X2dybyhjZmcpXFxuK1xcbisgICAgcyA9IF9tYWtlX3BzcF9jb25uKGNmZywgdmVyc2lvbiwgaXB2ZXIpXFxuKyAgICB0cnk6XFxuKyAgICAgICAgcnhfYXNzb2MgPSBjZmcucHNwbmwucnhfYXNzb2Moe1xcXCJ2ZXJzaW9uXFxcIjogdmVyc2lvbixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJkZXYtaWRcXFwiOiBjZmcucHNwX2Rldl9pZCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzb2NrLWZkXFxcIjogcy5maWxlbm8oKX0pXFxuKyAgICAgICAgcnggPSByeF9hc3NvY1sncngta2V5J11cXG4rICAgICAgICB0eCA9IF9zcGlfeGNoZyhzLCByeClcXG4rICAgICAgICBjZmcucHNwbmwudHhfYXNzb2Moe1xcXCJkZXYtaWRcXFwiOiBjZmcucHNwX2Rldl9pZCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwidmVyc2lvblxcXCI6IHZlcnNpb24sXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInR4LWtleVxcXCI6IHR4LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzb2NrLWZkXFxcIjogcy5maWxlbm8oKX0pXFxuK1xcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1xcXCJpZmluZGV4XFxcIjogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpWzBdXFxuKyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcXG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwicXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVxcXCIpIGZyb20gZVxcbisgICAgICAgICAgICByYWlzZVxcbisgICAgICAgIGlmICgncngtaHctZ3JvLXBhY2tldHMnIG5vdCBpbiBiZWZvcmUgb3JcXG4rICAgICAgICAgICAgJ3J4LWh3LWdyby13aXJlLXBhY2tldHMnIG5vdCBpbiBiZWZvcmUpOlxcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJyeC1ody1ncm8tcGFja2V0cyBjb3VudGVyIG5vdCBhdmFpbGFibGVcXFwiKVxcbitcXG4rICAgICAgICAjIFJlbW90ZSBzZW5kcyBkYXRhIGluIDhLQiBjaHVua3M7IEdTTyBvbiByZW1vdGUgVFggc2VnbWVudHMgdGhlbSxcXG4rICAgICAgICAjIEhXIEdSTyByZWFzc2VtYmxlcyBvbiBsb2NhbCBSWFxcbisgICAgICAgIGRhdGFfbGVuID0gMTAgKiA2NTUzNlxcbisgICAgICAgIF9yZW1vdGVfc2VuZChjZmcsIGRhdGFfbGVuKVxcbisgICAgICAgIHJlY3ZfbGVuID0gX3JlY3ZfYWxsKHMsIGRhdGFfbGVuKVxcbisgICAgICAgIGtzZnRfZXEocmVjdl9sZW4sIGRhdGFfbGVuKVxcbitcXG4rICAgICAgICBjZmcud2FpdF9od19zdGF0c19zZXR0bGUoKVxcbisgICAgICAgIGFmdGVyID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1xcXCJpZmluZGV4XFxcIjogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpWzBdXFxuKyAgICAgICAga3NmdF9ndChhZnRlclsncngtaHctZ3JvLXBhY2tldHMnXSxcXG4rICAgICAgICAgICAgICAgIGJlZm9yZVsncngtaHctZ3JvLXBhY2tldHMnXSlcXG4rICAgICAgICBrc2Z0X2d0KGFmdGVyWydyeC1ody1ncm8td2lyZS1wYWNrZXRzJ10sXFxuKyAgICAgICAgICAgICAgICBiZWZvcmVbJ3J4LWh3LWdyby13aXJlLXBhY2tldHMnXSlcXG4rICAgIGZpbmFsbHk6XFxuKyAgICAgICAgX2Nsb3NlX3BzcF9jb25uKGNmZywgcylcXG4rXFxuK0Brc2Z0X3ZhcmlhbnRzKF9nZXRfcHNwX3Zlcl9pcF92YXJpYW50cygpKVxcbitkZWYgZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XFxuKyAgICBcXFwiXFxcIlxcXCIgVGVzdCBQU1AgZGF0YSB0cmFuc2ZlciB3aXRoIEhXIEdSTyBlbmFibGVkIFxcXCJcXFwiXFxcIlxcbisgICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxuKyAgICBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcilcXG4rXFxuIFxcbiBkZWYgX2dldF9pcF92YXJpYW50cygpOlxcbiAgICAgZm9yIGlwdiBpbiAoXFxcIjRcXFwiLCBcXFwiNlxcXCIpOlxcbkBAIC05MzcsNyArMTA1MCw2IEBAIGRlZiBfc2V0dXBfcHNwX2F0dHJpYnV0ZXMoY2ZnKTpcXG4gICAgIGNmZy5wc3BfZGV2X3BlZXJfbnNpZCA9IF9nZXRfbnNpZChjZmcubmV0bnMubmFtZSlcXG4gXFxuIFxcbi1cXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiIEtzZnQgYm9pbGVyIHBsYXRlIG1haW4gXFxcIlxcXCJcXFwiXFxuIFxcbkBAIC05NTQsNiArMTA2Niw3IEBAIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gXFxuICAgICB3aXRoIGVudiBhcyBjZmc6XFxuICAgICAgICAgY2ZnLnBzcG5sID0gUFNQRmFtaWx5KClcXG4rICAgICAgICBjZmcubmV0bmwgPSBOZXRkZXZGYW1pbHkoKVxcbiBcXG4gICAgICAgICBpZiBoYXNfY29udDpcXG4gICAgICAgICAgICAgX3NldHVwX3BzcF9hdHRyaWJ1dGVzKGNmZylcXG5AQCAtOTczLDcgKzEwODYsNyBAQCBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcuY29tbV9wb3J0KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xKVxcbiBcXG4tICAgICAgICAgICAgICAgIGNhc2VzID0gW2RhdGFfYmFzaWNfc2VuZCwgZGF0YV9tc3NfYWRqdXN0XVxcbisgICAgICAgICAgICAgICAgY2FzZXMgPSBbZGF0YV9iYXNpY19zZW5kLCBkYXRhX2h3X2dybywgZGF0YV9tc3NfYWRqdXN0XVxcbiBcXG4gICAgICAgICAgICAgICAgIGlmIGhhc19jb250OlxcbiAgICAgICAgICAgICAgICAgICAgIGNhc2VzICs9IFtcXG5AQCAtOTkwLDcgKzExMDMsNyBAQCBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlX3BmeD17XFxcImRldl9cXFwiLCBcXFwiZGF0YV9cXFwiLCBcXFwiYXNzb2NfXFxcIiwgXFxcInJlbW92YWxfXFxcIn0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXFxuIFxcbi0gICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kKGJcXFwiZXhpdFxcXFwwXFxcIilcXG4rICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiXFxcImV4aXRcXFxcMFxcXCIpXFxuICAgICAgICAgICAgICAgICBjZmcuY29tbV9zb2NrLmNsb3NlKClcXG4gICAgICAgICBmaW5hbGx5OlxcbiAgICAgICAgICAgICBpZiBzcnYgYW5kIChzcnYuc3Rkb3V0IG9yIHNydi5zdGRlcnIpOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmNcXG5pbmRleCBhMjZlNzYyOGJiYjEzLi45YTY3NWJmNDQ5ZjVmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvcG9sbC5oXFx1MDAzZVxcbkBAIC0xMTgsNiArMTE5LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfc3RyKGludCBzb2NrLCBpbnQgdmFsdWUpXFxuIFxcdHNlbmQoc29jaywgYnVmLCByZXQgKyAxLCBNU0dfV0FJVEFMTCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2VuZF9kYXRhKGludCBzb2NrLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNoYXIgc2J1Zls4MTkyXSA9IHswfTtcXG4rXFx0c3NpemVfdCBzZW50O1xcbitcXG4rXFx0d2hpbGUgKGxlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0c2l6ZV90IGNodW5rID0gbGVuO1xcbitcXG4rXFx0XFx0aWYgKGNodW5rIFxcdTAwM2Ugc2l6ZW9mKHNidWYpKVxcbitcXHRcXHRcXHRjaHVuayA9IHNpemVvZihzYnVmKTtcXG4rXFxuK1xcdFxcdHNlbnQgPSBzZW5kKHNvY2ssIHNidWYsIGNodW5rLCBNU0dfTk9TSUdOQUwpO1xcbitcXHRcXHRpZiAoc2VudCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFUlI6ICVzOiAlc1xcXFxuXFxcIiwgX19mdW5jX18sXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoc2VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRVJSOiAlczogcGVlciBjbG9zZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHR9XFxuK1xcdFxcdGxlbiAtPSBzZW50O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcXG4gXFx0ICAgIGludCBzZXJ2ZXJfc29jaywgaW50IGNvbW1fc29jaylcXG5AQCAtMTg1LDIyICsyMTQsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdG9mZiArPSBuO1xcbi1cXHRcXHRcXHRuID0gb2ZmO1xcbiBcXG4gI2RlZmluZSBfX2NvbnN1bWUoc3opXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0aWYgKG4gPT0gKHN6KSkge1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0b2ZmID0gMDtcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdH0gZWxzZSB7XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRcXHRvZmYgLT0gKHN6KTtcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdG1lbW1vdmUoYnVmLCBcXHUwMDI2YnVmWyhzeildLCBvZmYpO1xcdFxcXFxcXG4tXFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0b2ZmIC09IChzeik7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRtZW1tb3ZlKGJ1ZiwgXFx1MDAyNmJ1Zlsoc3opXSwgb2ZmKTtcXHRcXHRcXFxcXFxuIFxcdFxcdH0pXFxuIFxcbi0jZGVmaW5lIGNtZChfbmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKy8qIE9ubHkgbWF0Y2ggb25jZSB0aGUgY29tbWFuZCBhbmQgaXRzIF9leHRyYV9zeiBieXRlIHBheWxvYWQgYXJlIGJvdGhcXG4rICogYnVmZmVyZWQsIG90aGVyd2lzZSBhIHNwbGl0IHJlYWQgd291bGQgY29uc3VtZSB0aGUgbmFtZSBhbmQgc3RyYW5kXFxuKyAqIHRoZSBwYXlsb2FkLCBkZXN5bmNocm9uaXppbmcgdGhlIHBhcnNlciBmb3IgZ29vZC5cXG4rICovXFxuKyNkZWZpbmUgY21kKF9uYW1lLCBfZXh0cmFfc3opXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0c3NpemVfdCBzeiA9IHNpemVvZihfbmFtZSk7XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRib29sIG1hdGNoID0gbiBcXHUwMDNlPSBzeiBcXHUwMDI2XFx1MDAyNlxcdCFtZW1jbXAoYnVmLCBfbmFtZSwgc3opOyBcXFxcXFxuK1xcdFxcdFxcdGJvb2wgbWF0Y2ggPSBvZmYgXFx1MDAzZT0gc3ogKyAoX2V4dHJhX3N6KSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0IW1lbWNtcChidWYsIF9uYW1lLCBzeik7XFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdGlmIChtYXRjaCkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0ZGJnKFxcXCJjb21tYW5kOiBcXFwiIF9uYW1lIFxcXCJcXFxcblxcXCIpO1xcdFxcdFxcXFxcXG5AQCAtMjEzLDEwICsyNDIsMTAgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXFxuIFxcdFxcdFxcdGRvIHtcXG4gXFx0XFx0XFx0XFx0Y29uc3VtZWQgPSBmYWxzZTtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChjbWQoXFxcInJlYWQgbGVuXFxcIikpXFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcInJlYWQgbGVuXFxcIiwgMCkpXFxuIFxcdFxcdFxcdFxcdFxcdHNlbmRfc3RyKGNvbW1fc29jaywgZGF0YV9yZWFkKTtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChjbWQoXFxcImRhdGEgZWNob1xcXCIpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcImRhdGEgZWNob1xcXCIsIDApKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmIChkYXRhX3NvY2sgXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c2VuZChkYXRhX3NvY2ssIFxcXCJlY2hvXFxcIiwgNSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBNU0dfV0FJVEFMTCk7XFxuQEAgLTIyNCw3ICsyNTMsMjcgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTjogZWNobyBidXQgbm8gZGF0YSBzb2NrXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0XFx0c2VuZF9hY2soY29tbV9zb2NrKTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJkYXRhIGNsb3NlXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGNtZChcXFwiZGF0YSBzZW5kXFxcIiwgNCkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0X191MzIgbGVuO1xcbitcXG4rXFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZsZW4sIGJ1Ziwgc2l6ZW9mKGxlbikpO1xcbitcXHRcXHRcXHRcXHRcXHRfX2NvbnN1bWUoc2l6ZW9mKGxlbikpO1xcbitcXHRcXHRcXHRcXHRcXHRsZW4gPSBudG9obChsZW4pO1xcbitcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKGRhdGFfc29jayBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJXQVJOOiBzZW5kIGJ1dCBubyBkYXRhIHNvY2tcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRzZW5kX2Vycihjb21tX3NvY2spO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0XFx0XFx0c2VuZF9hY2soY29tbV9zb2NrKTtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHNlbmRfZGF0YShkYXRhX3NvY2ssIGxlbikpXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwiV0FSTjogc2VuZCBpbmNvbXBsZXRlIGZvciAldSBieXRlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bGVuKTtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJkYXRhIGNsb3NlXFxcIiwgMCkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGRhdGFfc29jayBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNsb3NlKGRhdGFfc29jayk7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGRhdGFfc29jayA9IC0xO1xcbkBAIC0yMzMsMjYgKzI4MiwyMiBAQCBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0cmFjZV9jbG9zZSA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJjb25uIHBzcFxcXCIpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcImNvbm4gcHNwXFxcIiwgMikpIHtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGFjY2VwdF9jZmcgIT0gQUNDRVBUX0NGR19OT05FKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldBUk46IG9sZCBjb25uIGNvbmZpZyBzdGlsbCBzZXQhXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0XFx0YWNjZXB0X2NmZyA9IEFDQ0VQVF9DRkdfUFNQO1xcbiBcXHRcXHRcXHRcXHRcXHRzZW5kX2Fjayhjb21tX3NvY2spO1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBuZXh0IHR3byBieXRlcyBhcmUgdmVyc2lvbnMgKi9cXG4tXFx0XFx0XFx0XFx0XFx0aWYgKG9mZiBcXHUwMDNlPSAyKSB7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2cHNwX3ZlcnMsIGJ1ZiwgMik7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdF9fY29uc3VtZSgyKTtcXG4tXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXQVJOOiBzaG9ydCBjb25uIHBzcCBjb21tYW5kIVxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwc3BfdmVycywgYnVmLCAyKTtcXG4rXFx0XFx0XFx0XFx0XFx0X19jb25zdW1lKDIpO1xcbiBcXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdGlmIChjbWQoXFxcImNvbm4gY2xyXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGNtZChcXFwiY29ubiBjbHJcXFwiLCAwKSkge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoYWNjZXB0X2NmZyAhPSBBQ0NFUFRfQ0ZHX05PTkUpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTjogb2xkIGNvbm4gY29uZmlnIHN0aWxsIHNldCFcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRcXHRhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjtcXG4gXFx0XFx0XFx0XFx0XFx0c2VuZF9hY2soY29tbV9zb2NrKTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJleGl0XFxcIikpXFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcImV4aXRcXFwiLCAwKSlcXG4gXFx0XFx0XFx0XFx0XFx0c2hvdWxkX3F1aXQgPSB0cnVlO1xcbiAjdW5kZWYgY21kXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwOTozNDoxNC40MDYyOTE0OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTg0MDQ3OTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNDRkYTQxMTk4ODI3ODAzY2M2MGIzZDBkNmU1Y2ExYzgwY2E0ZTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwOTozNDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbkBAIC05OCw2ICs5OCw3IEBAIGVudW0ge1xuICNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcbiBcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXG4gXHRNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMLFxuK1x0TUxYNUVfQUNDRUxfRlNfUFNQX0RFQ0FQX0ZUX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxuICNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuaW5kZXggM2YyMTJlNDZmYzJmOS4uYTBiYjE5Y2M5NTZkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuQEAgLTIxOCw2ICsyMTgsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLFxuICNlbmRpZlxuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4rXHRpZiAobWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbClcbitcdFx0cmV0ID0gLUVCVVNZO1xuK1x0ZWxzZVxuK1x0XHRtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjKys7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbitcdGlmICghV0FSTl9PTl9PTkNFKCFtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjKSlcbitcdFx0bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90Yy0tO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3J4KHByaXYpO1xuQEAgLTIyOSw2ICsyNTEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuK3tcbisjaWZkZWYgQ09ORklHX01MWDVfRU5fUFNQXG4rXHRyZXR1cm4gbWx4NWVfcHNwX3VwZGF0ZV9yeChwcml2KTtcbisjZWxzZVxuK1x0cmV0dXJuIDA7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF90eChwcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDQyMmY5NmZmY2VkMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2Zsb3dfdGFnLmhcbkBAIC0wLDAgKzEsNDUgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBMaW51eC1PcGVuSUIgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYsIE5WSURJQSBDT1JQT1JBVElPTiBcdTAwMjYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbitcbisjaWZuZGVmIF9fTUxYNUVfRkxPV19UQUdfSF9fXG4rI2RlZmluZSBfX01MWDVFX0ZMT1dfVEFHX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21seDUvZGV2aWNlLmhcdTAwM2VcbitcbisvKiBVbmlmaWVkIGFjY2VsIGZsb3dfdGFnIGxheW91dCBpbiBDUUUgc29wX2Ryb3BfcXBuIFsyMzowXTpcbisgKlxuKyAqICAgWzIzOjIxXSA9IHByb3RvY29sIElEICgzIGJpdHMpOlxuKyAqICAgICAgICAgICAgICAwID0gbm9uZSAoZGVmYXVsdClcbisgKiAgICAgICAgICAgICAgMSA9IElQc2VjXG4rICogICAgICAgICAgICAgIDIgPSBNQUNzZWNcbisgKiAgICAgICAgICAgICAgMyA9IFBTUCAoSFcgZGVjcnlwdGVkLCBQU1AgaGVhZGVyIHByZXNlbnQpXG4rICogICAgICAgICAgICAgIDQgPSBQU1AgZGVjYXAgKEhXIGRlY3J5cHRlZCBcdTAwMjYgZGVjYXBzdWxhdGVkKVxuKyAqICAgICAgICAgICAgICA1LTcgPSByZXNlcnZlZFxuKyAqICAgWzIwOjE3XSA9IFBTUCB2ZXJzaW9uICg0IGJpdHMsIHZhbGlkIHdoZW4gcHJvdG8gPT0gUFNQIGRlY2FwKVxuKyAqICAgMTYgICAgICA9IHJlc2VydmVkXG4rICogICBbMTU6MF0gID0gdXNlZCBieSBvdGhlciBzdWJzeXN0ZW1zIChlLmcuIFRDKS5cbisgKi9cbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BU0tcdFx0R0VOTUFTSygyMywgMjEpXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19OT05FXHRcdCgwIFx1MDAzY1x1MDAzYyAyMSlcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDXHQoMSBcdTAwM2NcdTAwM2MgMjEpXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUNcdCgyIFx1MDAzY1x1MDAzYyAyMSlcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUFx0XHQoMyBcdTAwM2NcdTAwM2MgMjEpXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVBcdCg0IFx1MDAzY1x1MDAzYyAyMSlcbitcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlRcdDE3XG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX01BU0tcdCgweEYgXHUwMDNjXHUwMDNjIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpXG4rXG4rc3RhdGljIGlubGluZSB1MzIgbWx4NWVfYWNjZWxfZmxvd190YWcoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbit7XG4rXHRyZXR1cm4gYmUzMl90b19jcHUoY3FlLVx1MDAzZXNvcF9kcm9wX3FwbikgXHUwMDI2IDB4RkZGRkZGO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuK3tcbitcdHJldHVybiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFx1MDAyNiBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLO1xuK31cbitcbisjZW5kaWYgLyogX19NTFg1RV9GTE9XX1RBR19IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5pbmRleCAzMjk2MDhjNTkzMTNiLi4wODFjYjJmMzFiZTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5AQCAtNCw2ICs0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlbi9mcy5oXCJcbisjaW5jbHVkZSBcImVuX2FjY2VsL2VuX2FjY2VsLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gI2luY2x1ZGUgXCJlc3dpdGNoLmhcIlxuICNpbmNsdWRlIFwiaXBzZWMuaFwiXG4gI2luY2x1ZGUgXCJmc19jb3JlLmhcIlxuQEAgLTE4OSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBpcHNlY19yeF9ydWxlX2FkZF9tYXRjaF9vYmooc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSxcbiBcdFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yKTtcbiBcdFx0TUxYNV9TRVQoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX3ZhbHVlLFxuIFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yLFxuLVx0XHRcdCBzYV9lbnRyeS1cdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpKTtcbitcdFx0XHQgc2FfZW50cnktXHUwMDNlaXBzZWNfb2JqX2lkKTtcbiBcbiBcdFx0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjtcbiBcdH1cbkBAIC0yMDY1LDcgKzIwNjcsNyBAQCBzdGF0aWMgaW50IHJ4X2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4gXHRpZiAoIWF0dHJzLVx1MDAzZWRyb3ApIHtcbiBcdFx0aWYgKHJ4ICE9IGlwc2VjLVx1MDAzZXJ4X2VzdylcbiBcdFx0XHRlcnIgPSBzZXR1cF9tb2RpZnlfaGVhZGVyKGlwc2VjLCBhdHRycy1cdTAwM2V0eXBlLFxuLVx0XHRcdFx0XHRcdCAgc2FfZW50cnktXHUwMDNlaXBzZWNfb2JqX2lkIHwgQklUKDMxKSxcbitcdFx0XHRcdFx0XHQgIHNhX2VudHJ5LVx1MDAzZWlwc2VjX29ial9pZCxcbiBcdFx0XHRcdFx0XHQgIFhGUk1fREVWX09GRkxPQURfSU4sIFx1MDAyNmZsb3dfYWN0KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IG1seDVfZXN3X2lwc2VjX3J4X3NldHVwX21vZGlmeV9oZWFkZXIoc2FfZW50cnksIFx1MDAyNmZsb3dfYWN0KTtcbkBAIC0yMDk4LDYgKzIxMDAsMTAgQEAgc3RhdGljIGludCByeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxuIFx0XHRmbG93X2FjdC5hY3Rpb24gfD0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1A7XG4gXHRlbHNlXG4gXHRcdGZsb3dfYWN0LmFjdGlvbiB8PSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4rXHRpZiAoIWF0dHJzLVx1MDAzZWRyb3AgXHUwMDI2XHUwMDI2IHJ4ICE9IGlwc2VjLVx1MDAzZXJ4X2Vzdykge1xuK1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbitcdFx0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19JUFNFQztcbitcdH1cbiBcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4gXHRkZXN0WzBdLmZ0ID0gcngtXHUwMDNlZnQuc3RhdHVzO1xuIFx0ZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbkBAIC0yNTc0LDUzICsyNTgwLDE5IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfcmVhZF9zdGF0cyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgdm9pZCAqaXBzZWNfc3RhdHMpXG4gXHR9XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENIXG4tc3RhdGljIGludCBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLXtcbi1cdHN0cnVjdCBtbHg1X2Vzd2l0Y2ggKmVzdyA9IG1kZXYtXHUwMDNlcHJpdi5lc3dpdGNoO1xuLVx0aW50IGVyciA9IDA7XG4tXG4tXHRpZiAoZXN3KSB7XG4tXHRcdGVyciA9IG1seDVfZXN3X2xvY2soZXN3KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuLVx0aWYgKG1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKSB7XG4tXHRcdGVyciA9IC1FQlVTWTtcbi1cdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190YysrO1xuLVxuLXVubG9jazpcbi1cdGlmIChlc3cpXG4tXHRcdG1seDVfZXN3X3VubG9jayhlc3cpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tI2Vsc2Vcbi1zdGF0aWMgaW50IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXG4te1xuLVx0aWYgKG1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuLVx0bWRldi1cdTAwM2VudW1fYmxvY2tfdGMrKztcbi1cdHJldHVybiAwO1xuLX1cbi0jZW5kaWZcbi1cbi1zdGF0aWMgdm9pZCBtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXG4rc3RhdGljIGJvb2wgYWNjZWxfaXBzZWNfc2hvdWxkX2Jsb2NrX3RjKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4ge1xuLVx0bWRldi1cdTAwM2VudW1fYmxvY2tfdGMtLTtcbitcdHJldHVybiBzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUIHx8XG4rXHRcdHNhX2VudHJ5LVx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOO1xuIH1cbiBcbiBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiB7XG4rXHRib29sIGJsb2NrX3RjID0gYWNjZWxfaXBzZWNfc2hvdWxkX2Jsb2NrX3RjKHNhX2VudHJ5KTtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xuLVx0XHRlcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuK1x0aWYgKGJsb2NrX3RjKSB7XG4rXHRcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0yNjM2LDggKzI2MDgsOCBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdHJldHVybiAwO1xuIFxuIGVycl9vdXQ6XG4tXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcbi1cdFx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuK1x0aWYgKGJsb2NrX3RjKVxuK1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0yNjUxLDggKzI2MjMsOCBAQCB2b2lkIG1seDVlX2FjY2VsX2lwc2VjX2ZzX2RlbF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4gXHRpZiAoaXBzZWNfcnVsZS1cdTAwM2Vwa3RfcmVmb3JtYXQpXG4gXHRcdG1seDVfcGFja2V0X3JlZm9ybWF0X2RlYWxsb2MobWRldiwgaXBzZWNfcnVsZS1cdTAwM2Vwa3RfcmVmb3JtYXQpO1xuIFxuLVx0aWYgKHNhX2VudHJ5LVx1MDAzZWF0dHJzLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpXG4tXHRcdG1seDVlX2lwc2VjX3VuYmxvY2tfdGNfb2ZmbG9hZChtZGV2KTtcbitcdGlmIChhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpKVxuK1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWRldik7XG4gXG4gXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMuZGlyID09IFhGUk1fREVWX09GRkxPQURfT1VUKSB7XG4gXHRcdHR4X2Z0X3B1dChzYV9lbnRyeS1cdTAwM2VpcHNlYywgc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSk7XG5AQCAtMjY4Niw3ICsyNjU4LDcgQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbitcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0yNzAxLDcgKzI2NzMsNyBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfb3V0OlxuLVx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbitcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0yNzEyLDcgKzI2ODQsNyBAQCB2b2lkIG1seDVlX2FjY2VsX2lwc2VjX2ZzX2RlbF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIFxuIFx0bWx4NV9kZWxfZmxvd19ydWxlcyhpcHNlY19ydWxlLVx1MDAzZXJ1bGUpO1xuIFxuLVx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbitcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXG4gXHRpZiAocG9sX2VudHJ5LVx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKSB7XG4gXHRcdHJ4X2Z0X3B1dF9wb2xpY3kocG9sX2VudHJ5LVx1MDAzZWlwc2VjLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oXG5pbmRleCA0NWIwZDE5ZTczNWNiLi42ZGVhNTk3OGE0MGU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaFxuQEAgLTM4LDEwICszOCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlbi90eHJ4LmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gXG4tLyogQml0MzE6IElQc2VjIG1hcmtlciwgQml0MzA6IHJlc2VydmVkLCBCaXQyOS0yNDogSVBzZWMgc3luZHJvbWUsIEJpdDIzLTA6IElQc2VjIG9iaiBpZCAqL1xuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgPT0gMHgyKVxuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9TWU5EUk9NKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgR0VOTUFTSyg1LCAwKSlcbisvKiBJUHNlYyBvYmogaWQgaW4gZnRfbWV0YWRhdGEgYml0c1syMzowXSAqL1xuICNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcdTAwMjYgR0VOTUFTSygyMywgMCkpXG4gXG4gc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0YXRlIHtcbkBAIC03NCw3ICs3Myw5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX2lwc2VjX3R4X2lkc19sZW4oc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXBzZWNfaXNfcnhfZmxvdyhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuIHtcbi1cdHJldHVybiBNTFg1X0lQU0VDX01FVEFEQVRBX01BUktFUihiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpKTtcbitcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4rXG4rXHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9pcHNlY19lc2VnX21ldGEoc3RydWN0IG1seDVfd3FlX2V0aF9zZWcgKmVzZWcpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXG5pbmRleCBkYWZmNTNiYTdkMDlmLi5hYTdhMjg5NTQ4NjFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXCJlbi5oXCJcbiAjaW5jbHVkZSBcImxpYi9hc28uaFwiXG4gI2luY2x1ZGUgXCJsaWIvY3J5cHRvLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZW5fYWNjZWwuaFwiXG4gI2luY2x1ZGUgXCJlbl9hY2NlbC9tYWNzZWMuaFwiXG4gXG4gI2RlZmluZSBNTFg1X01BQ1NFQ19FUE5fU0NPUEVfTUlEIDB4ODAwMDAwMDBMXG5AQCAtMzI0LDYgKzMyNSw4IEBAIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhX2ZzKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcbiBcdG1seDVfbWFjc2VjX2ZzX2RlbF9ydWxlKG1hY3NlYy1cdTAwM2VtZGV2LVx1MDAzZW1hY3NlY19mcywgc2EtXHUwMDNlbWFjc2VjX3J1bGUsIGFjdGlvbiwgbmV0ZGV2LFxuIFx0XHRcdFx0ZnNfaWQpO1xuIFx0c2EtXHUwMDNlbWFjc2VjX3J1bGUgPSBOVUxMO1xuK1x0aWYgKCFpc190eClcbitcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1hY3NlYy1cdTAwM2VtZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfbWFjc2VjX2NsZWFudXBfc2Eoc3RydWN0IG1seDVlX21hY3NlYyAqbWFjc2VjLFxuQEAgLTM0Myw2ICszNDYsNyBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhX2ZzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFx0Y29uc3Qgc3RydWN0IG1hY3NlY190eF9zYyAqdHhfc2MgPSBcdTAwMjZjdHgtXHUwMDNlc2VjeS1cdTAwM2V0eF9zYztcbiBcdHN0cnVjdCBtbHg1X21hY3NlY19ydWxlX2F0dHJzIHJ1bGVfYXR0cnM7XG4gXHR1bmlvbiBtbHg1X21hY3NlY19ydWxlICptYWNzZWNfcnVsZTtcbitcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKGlzX3R4IFx1MDAyNlx1MDAyNiB0eF9zYy1cdTAwM2VlbmNvZGluZ19zYSAhPSBzYS1cdTAwM2Vhc3NvY19udW0pXG4gXHRcdHJldHVybiAwO1xuQEAgLTM1MywxMyArMzU3LDI2IEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2luaXRfc2FfZnMoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsXG4gXHRydWxlX2F0dHJzLmFjdGlvbiA9IChpc190eCkgPyBNTFg1X0FDQ0VMX01BQ1NFQ19BQ1RJT05fRU5DUllQVCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0FDQ0VMX01BQ1NFQ19BQ1RJT05fREVDUllQVDtcbiBcbitcdGlmICghaXNfdHgpIHtcbitcdFx0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwcml2LVx1MDAzZW1kZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRtYWNzZWNfcnVsZSA9IG1seDVfbWFjc2VjX2ZzX2FkZF9ydWxlKG1hY3NlY19mcywgY3R4LCBcdTAwMjZydWxlX2F0dHJzLCBmc19pZCk7XG4tXHRpZiAoIW1hY3NlY19ydWxlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghbWFjc2VjX3J1bGUpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBvdXRfdW5ibG9ja190YztcbitcdH1cbiBcbiBcdHNhLVx1MDAzZW1hY3NlY19ydWxlID0gbWFjc2VjX3J1bGU7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXRfdW5ibG9ja190YzpcbitcdGlmICghaXNfdHgpXG4rXHRcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwcml2LVx1MDAzZW1kZXYpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBtbHg1ZV9tYWNzZWNfaW5pdF9zYShzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbkBAIC03MzUsMTIgKzc1MiwxMiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19hZGRfcnhzYyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcbiBcdCAqIGEgbm9uLU5VTEwgbWRfZHN0IHdpdGggdW5pbml0aWFsaXNlZCBjb250ZW50cy5cbiBcdCAqL1xuIFx0ZXJyID0geGFfYWxsb2MoXHUwMDI2bWFjc2VjLVx1MDAzZXNjX3hhcnJheSwgXHUwMDI2c2NfeGFycmF5X2VsZW1lbnQtXHUwMDNlZnNfaWQsIHNjX3hhcnJheV9lbGVtZW50LFxuLVx0XHQgICAgICAgWEFfTElNSVQoMSwgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbitcdFx0ICAgICAgIFhBX0xJTUlUKDEsIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpZiAoZXJyID09IC1FQlVTWSlcbiBcdFx0XHRuZXRkZXZfZXJyKGN0eC1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0XHQgICBcIk1BQ3NlYyBvZmZsb2FkOiB1bmFibGUgdG8gY3JlYXRlIGVudHJ5IGZvciBSWCBTQyAoJWQgUnggU0NzIGFscmVhZHkgYWxsb2NhdGVkKVxcblwiLFxuLVx0XHRcdFx0ICAgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpO1xuK1x0XHRcdFx0ICAgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYKTtcbiBcdFx0Z290byBkZXN0cm95X21kX2RzdDtcbiBcdH1cbiBcbkBAIC0xMTM3LDcgKzExNTQsMTIgQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbiBcdHN0cnVjdCBtbHg1ZV9tYWNzZWNfc2EgKnJ4X3NhO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqbGlzdDtcbiBcdGludCBpLCBlcnIgPSAwO1xuK1x0Ym9vbCBibG9ja190YztcbiBcbitcdC8qIEJlc3QtZWZmb3J0IFRDIGJsb2NrIGFjcm9zcyB0aGUgb3BlcmF0aW9uLCB0byBwcmV2ZW50IGEgbWlzdGltZWQgVENcbitcdCAqIGZpbHRlciBhZGQgZnJvbSBwcmV2ZW50aW5nIHRoZSAybmQgbG9vcCBmcm9tIGhhcHBlbmluZy5cbitcdCAqL1xuK1x0YmxvY2tfdGMgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHByaXYtXHUwMDNlbWRldikgPT0gMDtcbiBcbiBcdGxpc3QgPSBcdTAwMjZtYWNzZWNfZGV2aWNlLVx1MDAzZW1hY3NlY19yeF9zY19saXN0X2hlYWQ7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfc2MsIHRtcCwgbGlzdCwgcnhfc2NfbGlzdF9lbGVtZW50KSB7XG5AQCAtMTE2OCw2ICsxMTkwLDggQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbiBcbiBcdG1lbWNweShtYWNzZWNfZGV2aWNlLVx1MDAzZWRldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VhZGRyX2xlbik7XG4gb3V0OlxuK1x0aWYgKGJsb2NrX3RjKVxuK1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocHJpdi1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE3MDAsNyArMTcyNCw3IEBAIHZvaWQgbWx4NWVfbWFjc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0aWYgKCFtYWNzZWMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZzX2lkID0gTUxYNV9NQUNTRUNfUlhfTUVUQURBVF9IQU5ETEUobWFjc2VjX21ldGFfZGF0YSk7XG4rXHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRBX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNjX3hhcnJheV9lbGVtZW50ID0geGFfbG9hZChcdTAwMjZtYWNzZWMtXHUwMDNlc2NfeGFycmF5LCBmc19pZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG5pbmRleCAyN2RmNzJlMjMxMDZkLi41NzE2MjRmMmRiMTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmhcbkBAIC05LDYgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21seDUvZHJpdmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbisjaW5jbHVkZSBcImVuX2FjY2VsL2Zsb3dfdGFnLmhcIlxuICNpbmNsdWRlIFwibGliL21hY3NlY19mcy5oXCJcbiBcbiBzdHJ1Y3QgbWx4NWVfcHJpdjtcbkBAIC0zMSw3ICszMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9tYWNzZWNfc2tiX2lzX29mZmxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHRyZXR1cm4gTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuK1x0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbitcbitcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XG4gfVxuIFxuIHZvaWQgbWx4NWVfbWFjc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuaW5kZXggNzNiMjMyMzc5MjYzYS4uYWQ4ZGJkOGMyZjI3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXG5AQCAtNiw3ICs2LDkgQEBcbiAjaW5jbHVkZSBcIm1seDVfY29yZS5oXCJcbiAjaW5jbHVkZSBcInBzcC5oXCJcbiAjaW5jbHVkZSBcImxpYi9jcnlwdG8uaFwiXG4rI2luY2x1ZGUgXCJlbl9hY2NlbC9lbl9hY2NlbC5oXCJcbiAjaW5jbHVkZSBcImVuX2FjY2VsL3BzcC5oXCJcbisjaW5jbHVkZSBcImVuX2FjY2VsL3BzcF9yeHR4LmhcIlxuICNpbmNsdWRlIFwiZnNfY29yZS5oXCJcbiBcbiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHtcbkBAIC0yMSw2ICsyMywxMyBAQCBlbnVtIGFjY2VsX3BzcF9zeW5kcm9tZSB7XG4gXHRQU1BfQkFEX1RSQUlMRVIsXG4gfTtcbiBcbitzdGF0aWMgY29uc3QgdTggcHNwX3N1cHBvcnRlZF92ZXJzaW9uc1tdID0ge1xuK1x0UFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyOCxcbitcdFBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8yNTYsXG4rfTtcbitcbisjZGVmaW5lIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TIEFSUkFZX1NJWkUocHNwX3N1cHBvcnRlZF92ZXJzaW9ucylcbitcbiBzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuQEAgLTQxLDcgKzUwLDcgQEAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpyeF9tb2RpZnlfaGRyO1xuK1x0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuIH07XG4gXG5AQCAtNTIsNiArNjEsMTUgQEAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqdWRwX3J1bGVzW0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuIH07XG4gXG4rc3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSB7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmRyb3BfZ3JvdXA7XG4rXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xuK1x0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlW01MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TXTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1bnN1cHBvcnRlZF9ydWxlO1xuK307XG4rXG4gc3RydWN0IG1seDVlX3BzcF9mcyB7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldjtcbiBcdHN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyO1xuQEAgLTYzLDEyICs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcbitcdC8qIFdoZW4gc2V0LCBzdGVlcmluZyBpcyBjb25maWd1cmVkIHRvIGRlY2Fwc3VsYXRlIFBTUCAocmVtb3ZlIFVEUCtQU1BcbitcdCAqIGhlYWRlcnMgYW5kIFBTUCB0cmFpbGVyKSBhbmQgaGFuZCBvZmYgdGhlIFNQSSBpbiBjcWUuZnRfbWV0YWRhdGEuXG4rXHQgKi9cbitcdGJvb2wgZGVjYXBfZW5hYmxlZDtcbiBcbiBcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSBkZWNyeXB0W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuIFx0c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSBjaGVjaztcbitcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHJ4O1xuIH07XG4gXG4rc3RhdGljIGJvb2wgc2hhbXBvX2VuYWJsZWQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY2hhbm5lbHMucGFyYW1zLnBhY2tldF9tZXJnZS50eXBlID09XG4rXHRcdE1MWDVFX1BBQ0tFVF9NRVJHRV9TSEFNUE87XG4rfVxuK1xuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXG4gc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXG4ge1xuQEAgLTExMCw2ICsxMzksMTUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICoqbW9kaGRyKVxuK3tcbitcdGlmICgqbW9kaGRyKSB7XG4rXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGRldiwgKm1vZGhkcik7XG4rXHRcdCptb2RoZHIgPSBOVUxMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICoqZ3JvdXApXG4ge1xuQEAgLTQwMiwxNSArNDQwLDE2MSBAQCBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpY1xuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY2FwX3RhYmxlICpkZWNhcClcbit7XG4rXHRpbnQgaTtcbitcbitcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY2FwLVx1MDAzZXVuc3VwcG9ydGVkX3J1bGUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7IGkrKylcbitcdFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjYXAtXHUwMDNlcnVsZVtpXSk7XG4rXHRpZiAoZGVjYXAtXHUwMDNlcmVmb3JtYXQpIHtcbitcdFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhmcy1cdTAwM2VtZGV2LCBkZWNhcC1cdTAwM2VyZWZvcm1hdCk7XG4rXHRcdGRlY2FwLVx1MDAzZXJlZm9ybWF0ID0gTlVMTDtcbitcdH1cbitcdGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZGVjYXAtXHUwMDNlbW9kaWZ5X2hkcik7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmRlY2FwLVx1MDAzZWRyb3BfZ3JvdXApO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2ZGVjYXAtXHUwMDNlZnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLCB1OCB2ZXJzaW9uKVxuK3tcbitcdHZvaWQgKm1pc2NfcGFyYW1zXzY7XG4rXG4rXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4rXHRzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU182O1xuK1x0bWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWEsXG4rXHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbitcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3NldF9taXNjNiwgbWlzY19wYXJhbXNfNiwgcHNwX3ZlcnNpb24pO1xuK1x0bWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfdmFsdWUsXG4rXHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbitcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uLCB2ZXJzaW9uKTtcbit9XG4rXG4rc3RhdGljXG4raW50IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSAqZGVjYXApXG4re1xuK1x0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcbitcdHN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdF9wYXJhbXMgcmVmb3JtYXRfcGFyYW1zID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuK1x0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4rXHRzdHJ1Y3QgbWx4NV9wa3RfcmVmb3JtYXQgKnJlZm9ybWF0O1xuK1x0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuK1x0aW50IGksIGVyciA9IDA7XG4rXG4rXHRzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTtcbitcdGlmICghc3BlYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHQvKiBDcmVhdGUgRlQgKi9cbitcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgKyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUztcbitcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfREVDQVBfRlRfTEVWRUw7XG4rXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbitcdGZ0X2F0dHIuYXV0b2dyb3VwLm51bV9yZXNlcnZlZF9lbnRyaWVzID0gMTtcbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmRlY2FwLVx1MDAzZWZ0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBmdCBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuK1x0XHRnb3RvIG91dF9zcGVjO1xuK1x0fVxuK1xuK1x0LyogQ3JlYXRlIGRyb3AgZ3JvdXAgKi9cbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNhcC1cdTAwM2VmdCwgXHUwMDI2ZGVjYXAtXHUwMDNlZHJvcF9ncm91cCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG1seDVfY29yZV9lcnIobWRldixcbitcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBkcm9wX2dyb3VwIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbitcdH1cbitcbitcdC8qIEFkZCBkZWZhdWx0IGRyb3AgcnVsZSAqL1xuK1x0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoZGVjYXAtXHUwMDNlZnQsIE5VTEwsIGZzLVx1MDAzZXJ4X2JhZF9jb3VudGVyLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2ZGVjYXAtXHUwMDNldW5zdXBwb3J0ZWRfcnVsZSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG1seDVfY29yZV9lcnIobWRldixcbitcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCB1bnN1cHBvcnRlZCB2ZXJzaW9ucyBkcm9wIHJ1bGUgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgZXJyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuK1x0fVxuK1xuK1x0LyogbW9kaWZ5X2hkcjogY29weSBTUEkgZnJvbSBSRUdfQ18wIHRvIFJFR19CICovXG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9DT1BZKTtcbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19maWVsZCxcbitcdFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19DXzApO1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9maWVsZCxcbitcdFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApO1xuK1xuK1x0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcbitcdFx0XHRcdFx0ICAgICAgMSwgYWN0aW9uKTtcbitcdGlmIChJU19FUlIobW9kaWZ5X2hkcikpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuK1x0fVxuK1x0ZGVjYXAtXHUwMDNlbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXG4rXHQvKiBwa3RfcmVmb3JtYXQ6IGRlY2FwIFBTUCB0cmFuc3BvcnQgKi9cbitcdHJlZm9ybWF0X3BhcmFtcy50eXBlID0gTUxYNV9SRUZPUk1BVF9UWVBFX1JFTU9WRV9QU1BfVFJBTlNQT1JUO1xuK1x0cmVmb3JtYXQgPSBtbHg1X3BhY2tldF9yZWZvcm1hdF9hbGxvYyhtZGV2LCBcdTAwMjZyZWZvcm1hdF9wYXJhbXMsXG4rXHRcdFx0XHRcdCAgICAgIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMKTtcbitcdGlmIChJU19FUlIocmVmb3JtYXQpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIocmVmb3JtYXQpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4rXHRkZWNhcC1cdTAwM2VyZWZvcm1hdCA9IHJlZm9ybWF0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7IGkrKykge1xuK1x0XHR1OCB2ZXJzaW9uID0gcHNwX3N1cHBvcnRlZF92ZXJzaW9uc1tpXTtcbitcdFx0c3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTtcbitcbitcdFx0LyogbWF0Y2godmVyc2lvbikgPVx1MDAzZSBkZWNhcCwgY29weSBTUEksIGZ3ZCB0byByeCBGVCAqL1xuK1x0XHRzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3BlYywgdmVyc2lvbik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE92ZXJyaWRlIHRoZSBmbG93IHRhZyBzZXQgaW4gdGhlIGRlY3J5cHQgdGFibGUgd2l0aFxuK1x0XHQgKiB0aGUgZGVjYXAgUFNQIG1hcmtlciBhbmQgdmVyc2lvbi5cbitcdFx0ICovXG4rXHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XG4rXHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQIHxcbitcdFx0XHQoKHUzMil2ZXJzaW9uIFx1MDAzY1x1MDAzYyBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX1NISUZUKTtcbitcbitcdFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX1BBQ0tFVF9SRUZPUk1BVCB8XG4rXHRcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxuK1x0XHRcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcbitcdFx0Zmxvd19hY3QucGt0X3JlZm9ybWF0ID0gcmVmb3JtYXQ7XG4rXHRcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuK1x0XHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuK1x0XHRkZXN0LmZ0ID0gZnMtXHUwMDNlcnguZnQ7XG4rXG4rXHRcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY2FwLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4rXHRcdGlmIChJU19FUlIocnVsZSkpIHtcbitcdFx0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuK1x0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0fVxuK1x0XHRkZWNhcC1cdTAwM2VydWxlW2ldID0gcnVsZTtcbitcdH1cbitcdGdvdG8gb3V0X3NwZWM7XG4rXG4rb3V0X2VycjpcbitcdGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9kZXN0cm95KGZzLCBkZWNhcCk7XG4rb3V0X3NwZWM6XG4rXHRrdmZyZWUoc3BlYyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQpXG4ge1xuIFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjcnlwdC1cdTAwM2VydWxlKTtcbi1cdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbi1cdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbi1cdFx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbi1cdH1cbitcdGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZGVjcnlwdC1cdTAwM2Vtb2RpZnlfaGRyKTtcbiBcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ydWxlKTtcbiBcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXHUwMDI2ZGVjcnlwdC1cdTAwM2VtaXNzX2dyb3VwKTtcbiBcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFx1MDAyNmRlY3J5cHQtXHUwMDNlZnQpO1xuQEAgLTQzMSwxMSArNjE1LDExIEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KVxuIHtcbiBcdHU4IGFjdGlvbltNTFg1X1VOX1NaX0JZVEVTKHNldF9hZGRfY29weV9hY3Rpb25faW5fYXV0byldID0ge307XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyID0gTlVMTDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbiBcdE1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7XG4rXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RoZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiBcdGludCBlcnIgPSAwO1xuQEAgLTQ3OSwzMCArNjYzLDM2IEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdH1cbiBcdGRlY3J5cHQtXHUwMDNlbWlzc19ydWxlID0gcnVsZTtcbiBcbi1cdC8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovXG4tXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XG4tXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcbi1cdC8qIFNldCBiaXRbMzEsIDMwXSBQU1AgbWFya2VyICovXG4tI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpXG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIE1MWDVFX1BTUF9NQVJLRVJfQklUKTtcbi1cdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgb2Zmc2V0LCAwKTtcbi1cdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7XG4tXG4tXHRtb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLCAxLCBhY3Rpb24pO1xuLVx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBhbGxvYyBwc3Agc2V0IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXFxuXCIsIGVycik7XG4tXHRcdG1vZGlmeV9oZHIgPSBOVUxMO1xuK1x0LyogQ3JlYXRlIG1vZGlmeV9oZHIgdG8gY29weSBTUEkgdG8gUkVHX0NfMCAqL1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfQ09QWSk7XG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXG4rXHRcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfSEVBREVSXzEpO1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9maWVsZCxcbitcdFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19DXzApO1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMCk7XG4rXG4rXHRtb2RoZHIgPSBtbHg1X21vZGlmeV9oZWFkZXJfYWxsb2MobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwsIDEsXG4rXHRcdFx0XHRcdCAgYWN0aW9uKTtcbitcdGlmIChJU19FUlIobW9kaGRyKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKG1vZGhkcik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGRlY3J5cHQtXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXHRkZWNyeXB0LVx1MDAzZW1vZGlmeV9oZHIgPSBtb2RoZHI7XG4gXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSO1xuLVx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xuK1x0c2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpO1xuK1xuK1x0LyogU2V0IFBTUCBtYXJrZXIgdmlhIGZsb3dfdGFnICovXG4rXHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyA9IEZMT1dfQ09OVEVYVF9IQVNfVEFHO1xuK1x0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1A7XG4rXG4rXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcbitcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4rXHRcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSIHxcbitcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUO1xuK1x0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGhkcjtcbiBcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4gXHRkZXN0LmZ0ID0gZnMtXHUwMDNlY2hlY2suZnQ7XG4gXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG5AQCAtNTIzLDkgKzcxMyw1MCBAQCBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbitcdFx0XHRcdCAgICAgICBib29sIGRlY2FwX3dhbnRlZClcbit7XG4rXHRib29sIGRlY2FwX3N1cHBvcnRlZCA9XG4rXHRcdE1MWDVfQ0FQX0ZMT1dUQUJMRShmcy1cdTAwM2VtZGV2LFxuK1x0XHRcdFx0ICAgZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlZm9ybWF0X2RlbF9wc3BfdHJhbnNwb3J0KTtcbitcdGJvb2wgZGVjYXBfZW5hYmxlID0gZGVjYXBfd2FudGVkIFx1MDAyNlx1MDAyNiBkZWNhcF9zdXBwb3J0ZWQ7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBDcmVhdGUgdGhlIGRlY2FwIHRhYmxlIGlmIG5lZWRlZC4gKi9cbitcdGlmIChkZWNhcF9lbmFibGUgXHUwMDI2XHUwMDI2ICFmcy1cdTAwM2VkZWNhcC5mdCkge1xuK1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VkZWNhcCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRtbHg1X2NvcmVfd2Fybihmcy1cdTAwM2VtZGV2LFxuK1x0XHRcdFx0ICAgICAgIFwiRmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGVcIixcbitcdFx0XHRcdCAgICAgICBlcnIpO1xuK1x0XHRcdGRlY2FwX2VuYWJsZSA9IGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZGVjYXBfZW5hYmxlID09IGZzLVx1MDAzZWRlY2FwX2VuYWJsZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogUmVkaXJlY3QgdHJhZmZpYyB0byB0aGUgY29ycmVjdCB0YWJsZS4gKi9cbitcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4rXHRkZXN0LmZ0ID0gZGVjYXBfZW5hYmxlID8gZnMtXHUwMDNlZGVjYXAuZnQgOiBmcy1cdTAwM2VyeC5mdDtcbitcdGVyciA9IG1seDVfbW9kaWZ5X3J1bGVfZGVzdGluYXRpb24oZnMtXHUwMDNlY2hlY2sucnVsZSwgXHUwMDI2ZGVzdCwgTlVMTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95X2Z0O1xuK1xuK1x0ZnMtXHUwMDNlZGVjYXBfZW5hYmxlZCA9IGRlY2FwX2VuYWJsZTtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9kZXN0cm95X2Z0OlxuK1x0aWYgKGRlY2FwX2VuYWJsZSlcbitcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY2FwKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbiBcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuK1x0Ym9vbCB0Y19ibG9ja2VkID0gZnMtXHUwMDNlcnguZnQ7XG4gXHRpbnQgaTtcbiBcbiBcdC8qIGRpc2Nvbm5lY3QgKi9cbkBAIC01MzQsMTkgKzc2NSwyOSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4gXHR9XG4gXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4rXHRhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjYXApO1xuIFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuK1x0aWYgKHRjX2Jsb2NrZWQpXG4rXHRcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChmcy1cdTAwM2VtZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuK1x0XHRcdFx0ICBib29sIGRlY2FwX2VuYWJsZSxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuIFx0aW50IGksIGVycjtcbiBcbitcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoZnMtXHUwMDNlbWRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJUQyBvZmZsb2FkIGFjdGl2ZSwgY2Fubm90IGVuYWJsZSBQU1BcIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VyeCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJGYWlsZWQgY3JlYXRpbmcgUlggc3RlZXJpbmcgdGFibGVcIik7XG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX3VuYmxvY2tfdGM7XG4gXHR9XG4gXG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG5AQCAtNTczLDYgKzgxNCwxMiBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRcdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpLCBcdTAwMjZkZXN0KTtcbiBcdH1cbiBcbitcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShmcywgZGVjYXBfZW5hYmxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkZhaWxlZCBSWCBzdGVlcmluZyBjb25maWcgZm9yIEhXIEdST1wiKTtcbitcdFx0Z290byBlcnJfZGVjcnlwdF9mdDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIFxuIGVycl9kZWNyeXB0X2Z0OlxuQEAgLTU4Myw2ICs4MzAsOCBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4gZXJyX2Z0OlxuIFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuK2Vycl91bmJsb2NrX3RjOlxuK1x0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLVx1MDAzZW1kZXYpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtODM5LDcgKzEwODgsOCBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIGV4dGFjayk7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBzaGFtcG9fZW5hYmxlZChwcml2KSxcbitcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMTExNiwzICsxMzY2LDE0IEBAIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRwcml2LVx1MDAzZXBzcCA9IE5VTEw7XG4gXHRrZnJlZShwc3ApO1xuIH1cbitcbitpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVx1MDAzZXBzcDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKHByaXYtXHUwMDNlbmV0ZGV2KTtcbitcdGlmICghcHNwIHx8ICFwc3AtXHUwMDNlZnMtXHUwMDNlY2hlY2suZnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShwc3AtXHUwMDNlZnMsIHNoYW1wb19lbmFibGVkKHByaXYpKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG5pbmRleCAzZjQ0MWU3ZGQ1NWFjLi43NmY2YzY5ZGUwZTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC00OSw2ICs0OSw3IEBAIGludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4raW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuQEAgLTYxLDUgKzYyLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUxYNV9FTl9QU1AgKi9cbiAjZW5kaWYgLyogX19NTFg1RV9BQ0NFTF9QU1BfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuaW5kZXggMzQ4ZmQ3YTk2MjYxNS4uMmJlZmZlZTE0Mjc4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuQEAgLTExOCwxMCArMTE4LDI1IEBAIGJvb2wgbWx4NWVfcHNwX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqXG4ge1xuIFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0dTE2IGRldl9pZCA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZXBzZC1cdTAwM2VpZDtcbi1cdGJvb2wgc3RyaXBfaWN2ID0gdHJ1ZTtcbi1cdHU4IGdlbmVyYXRpb24gPSAwO1xuK1x0c3RydWN0IHBzcF9za2JfZXh0ICpwc2U7XG4rXG4rXHRpZiAobWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpIHtcbitcdFx0LyogVURQICsgUFNQIGhlYWRlcnMgYW5kIFBTUCB0cmFpbGVyIHJlbW92ZWQgYnkgSFcuXG4rXHRcdCAqIENvbnN0cnVjdCB0aGUgUFNQIGV4dGVuc2lvbiBmcm9tIENRRSBtZXRhZGF0YS5cbitcdFx0ICovXG4rXHRcdHBzZSA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9QU1ApO1xuK1x0XHRpZiAodW5saWtlbHkoIXBzZSkpXG4rXHRcdFx0Z290byBkcm9wO1xuK1xuK1x0XHRwc2UtXHUwMDNlc3BpID0gbWx4NWVfcHNwX2dldF9zcGkoY3FlKTtcbitcdFx0cHNlLVx1MDAzZXZlcnNpb24gPSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTtcbitcdFx0cHNlLVx1MDAzZWRldl9pZCA9IGRldl9pZDtcbitcdFx0cHNlLVx1MDAzZWdlbmVyYXRpb24gPSAwO1xuK1x0XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuLVx0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCBnZW5lcmF0aW9uLCBzdHJpcF9pY3YpKVxuK1x0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCAwLCB0cnVlKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuIFx0c2tiLVx1MDAzZWRlY3J5cHRlZCA9IDE7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuaW5kZXggMmIwODBjMzljYzM3ZS4uNDFiNjAyNTliM2JjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuQEAgLTksMTAgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9wc3AuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlbi90eHJ4LmhcIlxuLVxuLS8qIEJpdDMwOiBQU1AgbWFya2VyLCBCaXQyMi0wOiBQU1Agb2JqIGlkICovXG4tI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgPT0gMHgzKVxuLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IEdFTk1BU0soMjIsIDApKVxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gXG4gc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZSB7XG4gXHR1MzIgdGFpbGVuO1xuQEAgLTgyLDcgKzc5LDI5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX3BzcF90eF9pZHNfbGVuKHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGVcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHRyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuK1x0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbitcbitcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1AgfHxcbitcdFx0cHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQO1xuK1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbitcbitcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0cmV0dXJuIChtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFx1MDAyNiBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX01BU0spIFx1MDAzZVx1MDAzZVxuK1x0XHRNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX1NISUZUO1xuK31cbitcbitzdGF0aWMgaW5saW5lIF9fYmUzMiBtbHg1ZV9wc3BfZ2V0X3NwaShzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuK3tcbitcdHJldHVybiBjcWUtXHUwMDNlZnRfbWV0YWRhdGE7XG4gfVxuIFxuIGJvb2wgbWx4NWVfcHNwX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTExMCw2ICsxMjksMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3BfaXNfZGVjYXAoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgX19iZTMyIG1seDVlX3BzcF9nZXRfc3BpKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5pbmRleCAzYjlkNDJjN2U5YzI4Li4zYzZlZjUwMGQwZmIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYyODYsNyArNjI4NiwxMyBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBzdGF0aWMgaW50IG1seDVlX3VwZGF0ZV9uaWNfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0cmV0dXJuIG1seDVlX3JlZnJlc2hfdGlycyhwcml2LVx1MDAzZW1kZXYsIGZhbHNlLCBmYWxzZSk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gbWx4NWVfcmVmcmVzaF90aXJzKHByaXYtXHUwMDNlbWRldiwgZmFsc2UsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1seDVlX3Byb2ZpbGUgbWx4NWVfbmljX3Byb2ZpbGUgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xuaW5kZXggZmI3MTEwYjFiNjgzNC4uYzdlYWFiM2Y3OTY3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xuQEAgLTIyMjEsNiArMjIyMSwzMyBAQCBzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIHBhZ2Vfc2l6ZSAqIG5yX2ZyYWdzICsgZGF0YV9iY250IFx1MDAzYz0gR1JPX0xFR0FDWV9NQVhfU0laRTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbWx4NWVfaHdfZ3JvX3BzcF9tYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuK3tcbisjaWZkZWYgQ09ORklHX01MWDVfRU5fUFNQXG4rXHRzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZSA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfUFNQKTtcbitcdGJvb2wgaXNfcHNwID0gbWx4NWVfcHNwX2lzX3J4X2Zsb3coY3FlKTtcbitcbitcdGlmIChsaWtlbHkoIWlzX3BzcCBcdTAwMjZcdTAwMjYgIXBzZSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LyogTm8gbWF0Y2ggb24gUFNQIHN0YXR1cyBjaGFuZ2UgKG5vIGNyeXB0byAtXHUwMDNlIGNyeXB0byBvciB2aWNlLXZlcnNhKS4gKi9cbitcdGlmICh1bmxpa2VseShpc19wc3AgIT0gISFwc2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBTUEkgYW5kIHZlcnNpb24gYXJlIG9ubHkgYXZhaWxhYmxlIGluIENRRSBtZXRhZGF0YSBmb3IgZGVjYXAgZmxvd3MuXG4rXHQgKiBOb24tZGVjYXAgUFNQIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUsIGZvcmNlIGEgZmx1c2guXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSghbWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBObyBtYXRjaCBvbiBzZWN1cml0eSBwYXJhbWV0ZXJzIGNoYW5nZS4gKi9cbitcdHJldHVybiBwc2UtXHUwMDNlc3BpID09IG1seDVlX3BzcF9nZXRfc3BpKGNxZSkgXHUwMDI2XHUwMDI2XG4rXHRcdHBzZS1cdTAwM2V2ZXJzaW9uID09IG1seDVlX3BzcF9nZXRfdmVyc2lvbihjcWUpO1xuKyNlbHNlXG4rXHRyZXR1cm4gdHJ1ZTtcbisjZW5kaWZcbit9XG4rXG4gc3RhdGljIHZvaWQgbWx4NWVfaGFuZGxlX3J4X2NxZV9tcHdycV9zaGFtcG8oc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4gXHR1MTYgZGF0YV9iY250XHRcdD0gbXB3cnFfZ2V0X2NxZV9ieXRlX2NudChjcWUpIC0gY3FlLVx1MDAzZXNoYW1wby5oZWFkZXJfc2l6ZTtcbkBAIC0yMjU4LDggKzIyODUsOSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcVxuIFx0ZGF0YV9vZmZzZXQgPSB3cWVfb2Zmc2V0IFx1MDAyNiAocGFnZV9zaXplIC0gMSk7XG4gXHRwYWdlX2lkeCA9IHdxZV9vZmZzZXQgXHUwMDNlXHUwMDNlIHJxLVx1MDAzZW1wd3FlLnBhZ2Vfc2hpZnQ7XG4gXHRpZiAoKnNrYiBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKG1hdGNoIFx1MDAyNlx1MDAyNiBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2UoKnNrYiwgZGF0YV9iY250LFxuLVx0XHRcdFx0XHRcdFx0IHBhZ2Vfc2l6ZSkpKSB7XG4rXHQgICAgIShtYXRjaCBcdTAwMjZcdTAwMjZcbitcdCAgICAgIG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsIHBhZ2Vfc2l6ZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICBtbHg1ZV9od19ncm9fcHNwX21hdGNoKCpza2IsIGNxZSkpKSB7XG4gXHRcdG1hdGNoID0gZmFsc2U7XG4gXHRcdG1seDVlX3NoYW1wb19mbHVzaF9za2IocnEsIGNxZSwgbWF0Y2gpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmNcbmluZGV4IDFiYzdiOTAxOTEyNGEuLjcwMTk1ZmNkZGZjODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmNcbkBAIC00ODExLDE0ICs0ODExLDE0IEBAIHN0YXRpYyBib29sIGlzX2Zsb3dfcnVsZV9kdXBsaWNhdGVfYWxsb3dlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIG5ldGlmX2lzX2xhZ19wb3J0KGRldikgXHUwMDI2XHUwMDI2IHJwcml2IFx1MDAyNlx1MDAyNiBycHJpdi1cdTAwM2VyZXAtXHUwMDNldnBvcnQgIT0gTUxYNV9WUE9SVF9VUExJTks7XG4gfVxuIFxuLS8qIEFzIElQc2VjIGFuZCBUQyBvcmRlciBpcyBub3QgYWxpZ25lZCBiZXR3ZWVuIHNvZnR3YXJlIGFuZCBoYXJkd2FyZS1vZmZsb2FkLFxuLSAqIGVpdGhlciBJUHNlYyBvZmZsb2FkIG9yIFRDIG9mZmxvYWQsIG5vdCBib3RoLCBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS5cbisvKiBUQyBvZmZsb2FkIGFuZCBhY2NlbCBwcm90b2NvbHMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgZmxvd190YWcgd2l0aFxuKyAqIHN0ZWVyaW5nIHJ1bGVzIGFuZCB0aGV5IGNhbm5vdCBzaW11bHRhbmVvdXNseSBvcGVyYXRlIG9uIHRoZSBzYW1lIGludGVyZmFjZS5cbisgKiBBZGRpdGlvbmFsbHksIGFzIElQc2VjIGFuZCBUQyBvcmRlciBpcyBub3QgYWxpZ25lZCBiZXR3ZWVuIHNvZnR3YXJlIGFuZFxuKyAqIGhhcmR3YXJlLW9mZmxvYWQsIG9ubHkgb25lIGlzIGFsbG93ZWQgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICAqL1xuLXN0YXRpYyBib29sIGlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbitzdGF0aWMgYm9vbCBpc190Y19hY2NlbF9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcbitcdFx0XHRcdCAgICAgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NTFg1X0VOX0lQU0VDKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuIFx0aWYgKGZpbHRlciAhPSBwcml2LVx1MDAzZW5ldGRldilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTQ4MjgsMjcgKzQ4MjgsMzUgQEAgc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHhcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG1seDVlX3RjX2Jsb2NrX2lwc2VjX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4rXHRcdFx0XHRcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuK1x0aW50IHJldCA9IDA7XG4gXG4tXHRpZiAoIWlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKVxuK1x0aWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAobWRldi1cdTAwM2VudW1fYmxvY2tfdGMpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja19pcHNlYysrO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4rXHRpZiAobWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YylcbitcdFx0cmV0ID0gLUVCVVNZO1xuK1x0ZWxzZVxuK1x0XHRtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX2FjY2VsKys7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtbHg1ZV90Y191bmJsb2NrX2lwc2VjX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGlmICghaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXG4rXHRpZiAoIWlzX3RjX2FjY2VsX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwcml2LVx1MDAzZW1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjLS07XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuK1x0aWYgKCFXQVJOX09OX09OQ0UoIXByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCkpXG4rXHRcdHByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbC0tO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIH1cbiBcbiBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbkBAIC00ODYzLDcgKzQ4NzEsNyBAQCBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdGlmICghbWx4NV9lc3dfaG9sZChwcml2LVx1MDAzZW1kZXYpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0ZXJyID0gbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuK1x0ZXJyID0gbWx4NWVfdGNfYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlc3dfcmVsZWFzZTtcbiBcbkBAIC00OTEyLDcgKzQ5MjAsNyBAQCBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBlcnJfZnJlZTpcbiBcdG1seDVlX2Zsb3dfcHV0KHByaXYsIGZsb3cpO1xuIG91dDpcbi1cdG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuK1x0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRtbHg1X2Vzd19wdXQocHJpdi1cdTAwM2VtZGV2KTtcbiBlc3dfcmVsZWFzZTpcbiBcdG1seDVfZXN3X3JlbGVhc2UocHJpdi1cdTAwM2VtZGV2KTtcbkBAIC00OTU1LDcgKzQ5NjMsNyBAQCBpbnQgbWx4NWVfZGVsZXRlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdHRyYWNlX21seDVlX2RlbGV0ZV9mbG93ZXIoZik7XG4gXHRtbHg1ZV9mbG93X3B1dChwcml2LCBmbG93KTtcbiBcbi1cdG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuK1x0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRtbHg1X2Vzd19wdXQocHJpdi1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbmluZGV4IGUxYjhjYjc4MzY5ZjEuLjUzYjYwNDNlMzNkMjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbkBAIC0zNiw2ICszNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlc3dpdGNoLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gI2luY2x1ZGUgXCJlbi90Y19jdC5oXCJcbiAjaW5jbHVkZSBcImVuL3RjX3R1bi5oXCJcbiAjaW5jbHVkZSBcImVuL3RjL2ludF9wb3J0LmhcIlxuQEAgLTM3MCwxMSArMzcxLDEzIEBAIHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqbWx4NWVfdGNfdGFibGVfYWxsb2Modm9pZCk7XG4gdm9pZCBtbHg1ZV90Y190YWJsZV9mcmVlKHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqdGMpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9jcWVfcmVnYl9jaGFpbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuIHtcbi1cdHUzMiBjaGFpbiwgcmVnX2I7XG4rXHR1MzIgZmxvd190YWcsIHJlZ19iLCBjaGFpbjtcbiBcbitcdGZsb3dfdGFnID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbiBcdHJlZ19iID0gYmUzMl90b19jcHUoY3FlLVx1MDAzZWZ0X21ldGFkYXRhKTtcbiBcbi1cdGlmIChyZWdfYiBcdTAwM2VcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpXG4rXHRpZiAoZmxvd190YWcgIT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTk9ORSB8fFxuK1x0ICAgIChyZWdfYiBcdTAwM2VcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjaGFpbiA9IHJlZ19iIFx1MDAyNiBNTFg1RV9UQ19UQUJMRV9DSEFJTl9UQUdfTUFTSztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuY1xuaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21seDUvbWFjc2VjLmhcdTAwM2VcbiAjaW5jbHVkZSBcImZzX2NvcmUuaFwiXG4gI2luY2x1ZGUgXCJsaWIvbWFjc2VjX2ZzLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gI2luY2x1ZGUgXCJtbHg1X2NvcmUuaFwiXG4gXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cbkBAIC00NSw5ICs0Niw2IEBAXG4gI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIT1VUX1NDSSAweDhcbiAjZGVmaW5lIE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhfU0NJIChNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIT1VUX1NDSSArIE1BQ1NFQ19TQ0lfTEVOKVxuIFxuLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi9cbi0jZGVmaW5lIG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpICgoZnNfaWQpIHwgQklUKDMwKSlcbi1cbiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHtcbiBcdF9fYmUxNiBldGhlcnR5cGU7XG4gXHR1OCB0Y2lfYW47XG5AQCAtMTc1NywxMSArMTc1NSwxMCBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsXG4gXHRyeF90YWJsZXMgPSBcdTAwMjZyeF9mcy1cdTAwM2V0YWJsZXM7XG4gXHRmdF9jcnlwdG8gPSBcdTAwMjZyeF90YWJsZXMtXHUwMDNlZnRfY3J5cHRvO1xuIFxuLVx0LyogU2V0IGJpdFszMSAtIDMwXSBtYWNzZWMgbWFya2VyIC0gMHgwMSAqL1xuIFx0LyogU2V0IGJpdFsxNS0wXSBmcyBpZCAqL1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpO1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBmaWVsZCwgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7XG4rXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIGZzX2lkKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgb2Zmc2V0LCAwKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7XG4gXG5AQCAtMTc3OCw2ICsxNzc1LDkgQEAgbWFjc2VjX2ZzX3J4X2FkZF9ydWxlKHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzLFxuIFx0LyogUnggY3J5cHRvIHRhYmxlIHdpdGggU0NJIHJ1bGUgKi9cbiBcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXHUwMDI2Zmxvd19hY3QsIGF0dHJzLCB0cnVlKTtcbiBcbitcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzIHw9IEZMT1dfQ09OVEVYVF9IQVNfVEFHO1xuK1x0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XG4rXG4gXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxuQEAgLTE4MDMsNiArMTgwMyw5IEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcyxcbiBcbiBcdFx0bWFjc2VjX2ZzX3J4X3NldHVwX2Z0ZShzcGVjLCBcdTAwMjZmbG93X2FjdCwgYXR0cnMsIGZhbHNlKTtcbiBcbitcdFx0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7XG4rXHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDO1xuK1xuIFx0XHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcdFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbiBcdFx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHxcbkBAIC0yMTYwLDggKzIxNjMsOCBAQCBzdGF0aWMgaW50IG1seDVfbWFjc2VjX2ZzX2FkZF9yb2NlX3J1bGVfcngoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsIHUzMlxuIFxuIFx0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjtcbiBcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhLCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181KTtcbi1cdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfNSxcbi1cdFx0IG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpKTtcbitcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbitcdFx0IG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUsIGZzX2lkKTtcbiBcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9BTExPVztcbiBcdG5ld19ydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9mcy1cdTAwM2Vyb2NlLmZ0X21hY3NlY19vcF9jaGVjaywgc3BlYywgXHUwMDI2Zmxvd19hY3QsXG4gXHRcdFx0XHQgICAgICAgTlVMTCwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmhcbmluZGV4IDE1YWNhZmY0MzY0MTcuLmI4YjhiNDEyZDVjM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXG5AQCAtNiwxMSArNiwxMCBAQFxuIFxuICNpZmRlZiBDT05GSUdfTUxYNV9NQUNTRUNcbiBcbi0vKiBCaXQzMSAtIDMwOiBNQUNzZWMgbWFya2VyLCBCaXQxNS0wOiBNQUNzZWMgaWQgKi9cbi0jZGVmaW5lIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYIFVTSFJUX01BWCAvKiBNdXN0IGJlIHBvd2VyIG9mIHR3byAqL1xuLSNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFTSyBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWFxuLSNkZWZpbmUgTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcdTAwM2VcdTAwM2UgMzApIFx1MDAyNiAweDMpICA9PSAweDEpXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFx1MDAyNiBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLKVxuKy8qIE1BQ3NlYyBmc19pZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzE1OjBdICovXG4rI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVggVVNIUlRfTUFYIC8qIE11c3QgYmUgcG93ZXIgb2YgdHdvICovXG4rI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWFxuKyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXG4gXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cbiAjZGVmaW5lIE1MWDVfRVRIX1dRRV9GVF9NRVRBX01BQ1NFQ19NQVNLIFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbmluZGV4IDY0M2I0YWFjMjAzMzYuLjQwNmMwZjdlNjNkODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG5AQCAtMTgxMCw2ICsxODEwLDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcbiBcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KFx1MDAyNmRldi1cdTAwM2Vsb2NrX2tleSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VpbnRmX3N0YXRlX211dGV4KTtcbiBcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmRldi1cdTAwM2VpbnRmX3N0YXRlX211dGV4LCBcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNld2Nfc3RhdGVfbG9jayk7XG4gXG5AQCAtMTg5OCw2ICsxODk5LDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VhbGxvY19tdXRleCk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLndjX2hlYWQubG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZWludGZfc3RhdGVfbXV0ZXgpO1xuIFx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC0xOTI1LDYgKzE5MjcsNyBAQCB2b2lkIG1seDVfbWRldl91bmluaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2ViZnJlZ3MucmVnX2hlYWQubG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2V3Y19zdGF0ZV9sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZWludGZfc3RhdGVfbXV0ZXgpO1xuIFx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbmluZGV4IGIxODcxYzA4MjFkMGIuLjJkOWJjNzUyZTQzMWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTc4OCw4ICs3ODgsMTEgQEAgc3RydWN0IG1seDVfY29yZV9kZXYge1xuIFx0dTMyICAgICAgICAgICAgICAgICAgICAgIHZzY19hZGRyO1xuIFx0c3RydWN0IG1seDVfaHZfdmhjYVx0Kmh2X3ZoY2E7XG4gXHRzdHJ1Y3QgbWx4NV9od21vblx0Kmh3bW9uO1xuLVx0dTY0XHRcdFx0bnVtX2Jsb2NrX3RjO1xuLVx0dTY0XHRcdFx0bnVtX2Jsb2NrX2lwc2VjO1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IG11dGV4IGxvY2s7XG4rXHRcdHU2NCBudW1fdGM7XG4rXHRcdHU2NCBudW1fYWNjZWw7XG4rXHR9IG9mZmxvYWRfYmxvY2s7XG4gI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQ1xuIFx0c3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnM7XG4gXHQvKiBNQUNzZWMgbm90aWZpZXIgY2hhaW4gdG8gc3luYyBNQUNzZWMgY29yZSBhbmQgSUIgZGF0YWJhc2UgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbmluZGV4IDMxNTY0OGE3NzBkMDAuLjliODk5NzIzYTYzNWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuQEAgLTE2LDExICsxNiwxMiBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3RydWUsIGtzZnRfZXEsIGtzZnRfbmUsIGtzZnRfZ3QsIGtzZnRfcmFpc2VzXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X25vbmVcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuLWZyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IEtzZnRTa2lwRXgsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBOZXREcnZDb250RW52XG4tZnJvbSBsaWIucHkgaW1wb3J0IE5ldGxpbmssIE5sRXJyb3IsIFBTUEZhbWlseSwgUnRubEZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBOZXRsaW5rLCBObEVycm9yLCBOZXRkZXZGYW1pbHksIFBTUEZhbWlseSwgUnRubEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4rZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgZXRodG9vbCwgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuLCBDbWRFeGl0RmFpbHVyZVxuIGZyb20gbGliLnB5IGltcG9ydCBpcFxuIFxuIFxuQEAgLTMwLDE1ICszMSwyNSBAQCBkZWYgX2dldF9vdXRxKHMpOlxuICAgICByZXR1cm4gc3RydWN0LnVucGFjayhcIklcIiwgb3V0cSlbMF1cbiBcbiBcbitkZWYgX3JlY3ZfZXhhY3Qoc29jaywgbik6XG4rICAgIGJ1ZiA9IGInJ1xuKyAgICB3aGlsZSBsZW4oYnVmKSBcdTAwM2MgbjpcbisgICAgICAgIGNodW5rID0gc29jay5yZWN2KG4gLSBsZW4oYnVmKSlcbisgICAgICAgIGlmIG5vdCBjaHVuazpcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgYnVmICs9IGNodW5rXG4rICAgIHJldHVybiBidWZcbitcbitcbiBkZWYgX3NlbmRfd2l0aF9hY2soY2ZnLCBtc2cpOlxuLSAgICBjZmcuY29tbV9zb2NrLnNlbmQobXNnKVxuLSAgICByZXNwb25zZSA9IGNmZy5jb21tX3NvY2sucmVjdig0KVxuKyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKVxuKyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpXG4gICAgIGlmIHJlc3BvbnNlICE9IGInYWNrXFwwJzpcbiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlXCIsIHJlc3BvbnNlKVxuIFxuIFxuIGRlZiBfcmVtb3RlX3JlYWRfbGVuKGNmZyk6XG4tICAgIGNmZy5jb21tX3NvY2suc2VuZChiJ3JlYWQgbGVuXFwwJylcbisgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGIncmVhZCBsZW5cXDAnKVxuICAgICByZXR1cm4gaW50KGNmZy5jb21tX3NvY2sucmVjdigxMDI0KVs6LTFdLmRlY29kZSgndXRmLTgnKSlcbiBcbiBcbkBAIC05Nyw3ICsxMDgsNyBAQCBkZWYgX3NlbmRfY2FyZWZ1bChjZmcsIHMsIHJvdW5kcyk6XG4gZGVmIF9jaGVja19kYXRhX3J4KGNmZywgZXhwX2xlbik6XG4gICAgIHJlYWRfbGVuID0gLTFcbiAgICAgZm9yIF8gaW4gcmFuZ2UoMzApOlxuLSAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kKGIncmVhZCBsZW5cXDAnKVxuKyAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGIncmVhZCBsZW5cXDAnKVxuICAgICAgICAgcmVhZF9sZW4gPSBpbnQoY2ZnLmNvbW1fc29jay5yZWN2KDEwMjQpWzotMV0uZGVjb2RlKCd1dGYtOCcpKVxuICAgICAgICAgaWYgcmVhZF9sZW4gPT0gZXhwX2xlbjpcbiAgICAgICAgICAgICBicmVha1xuQEAgLTU4Myw2ICs1OTQsMTA4IEBAIGRlZiBfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciBpcHYgaW4gKFwiNFwiLCBcIjZcIik6XG4gICAgICAgICAgICAgeWllbGQgS3NmdE5hbWVkVmFyaWFudChmXCJ2e3Zlcn1faXB7aXB2fVwiLCB2ZXIsIGlwdilcbiBcbitkZWYgX2VuYWJsZV9sb2NhbF9od19ncm8oY2ZnKTpcbisgICAgY2ZnLnJlcXVpcmVfY21kKFwiZXRodG9vbFwiKVxuKyAgICBmZWF0ID0gZXRodG9vbChmXCItayB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKVswXVxuKyAgICBncm8gPSBmZWF0LmdldChcInJ4LWdyby1od1wiKVxuKyAgICBpZiBub3QgZ3JvIG9yIFwiYWN0aXZlXCIgbm90IGluIGdybyBvciBcImZpeGVkXCIgbm90IGluIGdybzpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJIVyBHUk8gZmVhdHVyZSBub3QgcmVwb3J0ZWQgYnkgZXRodG9vbFwiKVxuKyAgICBpZiBncm9bXCJmaXhlZFwiXSBhbmQgbm90IGdyb1tcImFjdGl2ZVwiXTpcbisgICAgICAgIHJhaXNlIEtzZnRYZmFpbEV4KFwiSFcgR1JPIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXCIpXG4rICAgIGlmIG5vdCBncm9bXCJhY3RpdmVcIl06XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgZXRodG9vbChmXCItSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9uXCIpXG4rICAgICAgICBleGNlcHQgQ21kRXhpdEZhaWx1cmUgYXMgZTpcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwiQ2Fubm90IGVuYWJsZSBIVyBHUk8gdmlhIGV0aHRvb2xcIikgZnJvbSBlXG4rICAgICAgICBkZWZlcihldGh0b29sLCBmXCItSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9mZlwiKVxuKyAgICAgICAgZmVhdCA9IGV0aHRvb2woZlwiLWsge2NmZy5pZm5hbWV9XCIsIGpzb249VHJ1ZSlbMF1cbisgICAgICAgIGdybyA9IGZlYXQuZ2V0KFwicngtZ3JvLWh3XCIsIHt9KVxuKyAgICAgICAgaWYgbm90IGdyby5nZXQoXCJhY3RpdmVcIik6XG4rICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIkhXIEdSTyBmYWlsZWQgdG8gYWN0aXZhdGVcIilcbitcbitcbitkZWYgX3JlbW90ZV9zZW5kKGNmZywgc2l6ZSk6XG4rICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiJ2RhdGEgc2VuZFxcMCcgKyBzdHJ1Y3QucGFjaygnIUknLCBzaXplKSlcbisgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KVxuKyAgICBpZiByZXNwb25zZSAhPSBiJ2Fja1xcMCc6XG4rICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXCJVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZSB0byBkYXRhIHNlbmRcIiwgcmVzcG9uc2UpXG4rXG4rXG4rZGVmIF9yZWN2X2FsbChzLCBleHBlY3RlZCwgdGltZW91dD0yMCk6XG4rICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KVxuKyAgICB0b3RhbCA9IDBcbisgICAgdHJ5OlxuKyAgICAgICAgd2hpbGUgdG90YWwgXHUwMDNjIGV4cGVjdGVkOlxuKyAgICAgICAgICAgIGRhdGEgPSBzLnJlY3YobWluKDY1NTM2LCBleHBlY3RlZCAtIHRvdGFsKSlcbisgICAgICAgICAgICBpZiBub3QgZGF0YTpcbisgICAgICAgICAgICAgICAgYnJlYWtcbisgICAgICAgICAgICB0b3RhbCArPSBsZW4oZGF0YSlcbisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OlxuKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxuKyAgICAgICAgICAgIGZcIlRpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcIlxuKyAgICAgICAgICAgIGZcIihyZXNwb25kZXIgbWF5IGhhdmUgZmFpbGVkIHRvIHNlbmQpXCIpXG4rICAgIGlmIHRvdGFsIFx1MDAzYyBleHBlY3RlZDpcbisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbisgICAgICAgICAgICBmXCJTaG9ydCByZWFkOiBnb3Qge3RvdGFsfS97ZXhwZWN0ZWR9IGJ5dGVzIFwiXG4rICAgICAgICAgICAgZlwiKHJlc3BvbmRlciBjb25uZWN0aW9uIGNsb3NlZCBlYXJseSlcIilcbisgICAgcmV0dXJuIHRvdGFsXG4rXG4rXG4rZGVmIF9kYXRhX2h3X2dybyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcbisgICAgXCJcIlwiIFRlc3QgUFNQIGRhdGEgdHJhbnNmZXIgd2l0aCBIVyBHUk8gZW5hYmxlZCBcIlwiXCJcbisgICAgX2luaXRfcHNwX2RldihjZmcpXG4rICAgICMgVmVyc2lvbiAwIGlzIHJlcXVpcmVkIGJ5IHNwZWMsIGRvbid0IGxldCBpdCBza2lwXG4rICAgIGlmIHZlcnNpb246XG4rICAgICAgICBuYW1lID0gY2ZnLnBzcG5sLmNvbnN0c1tcInZlcnNpb25cIl0uZW50cmllc19ieV92YWxbdmVyc2lvbl0ubmFtZVxuKyAgICAgICAgaWYgbmFtZSBub3QgaW4gY2ZnLnBzcF9pbmZvWydwc3AtdmVyc2lvbnMtY2FwJ106XG4rICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIlBTUCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcIiwgbmFtZSlcbitcbisgICAgX2VuYWJsZV9sb2NhbF9od19ncm8oY2ZnKVxuK1xuKyAgICBzID0gX21ha2VfcHNwX2Nvbm4oY2ZnLCB2ZXJzaW9uLCBpcHZlcilcbisgICAgdHJ5OlxuKyAgICAgICAgcnhfYXNzb2MgPSBjZmcucHNwbmwucnhfYXNzb2Moe1widmVyc2lvblwiOiB2ZXJzaW9uLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRldi1pZFwiOiBjZmcucHNwX2Rldl9pZCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2NrLWZkXCI6IHMuZmlsZW5vKCl9KVxuKyAgICAgICAgcnggPSByeF9hc3NvY1sncngta2V5J11cbisgICAgICAgIHR4ID0gX3NwaV94Y2hnKHMsIHJ4KVxuKyAgICAgICAgY2ZnLnBzcG5sLnR4X2Fzc29jKHtcImRldi1pZFwiOiBjZmcucHNwX2Rldl9pZCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVyc2lvblwiOiB2ZXJzaW9uLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eC1rZXlcIjogdHgsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvY2stZmRcIjogcy5maWxlbm8oKX0pXG4rXG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1wiaWZpbmRleFwiOiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlbMF1cbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwicXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwiKSBmcm9tIGVcbisgICAgICAgICAgICByYWlzZVxuKyAgICAgICAgaWYgKCdyeC1ody1ncm8tcGFja2V0cycgbm90IGluIGJlZm9yZSBvclxuKyAgICAgICAgICAgICdyeC1ody1ncm8td2lyZS1wYWNrZXRzJyBub3QgaW4gYmVmb3JlKTpcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwicngtaHctZ3JvLXBhY2tldHMgY291bnRlciBub3QgYXZhaWxhYmxlXCIpXG4rXG4rICAgICAgICAjIFJlbW90ZSBzZW5kcyBkYXRhIGluIDhLQiBjaHVua3M7IEdTTyBvbiByZW1vdGUgVFggc2VnbWVudHMgdGhlbSxcbisgICAgICAgICMgSFcgR1JPIHJlYXNzZW1ibGVzIG9uIGxvY2FsIFJYXG4rICAgICAgICBkYXRhX2xlbiA9IDEwICogNjU1MzZcbisgICAgICAgIF9yZW1vdGVfc2VuZChjZmcsIGRhdGFfbGVuKVxuKyAgICAgICAgcmVjdl9sZW4gPSBfcmVjdl9hbGwocywgZGF0YV9sZW4pXG4rICAgICAgICBrc2Z0X2VxKHJlY3ZfbGVuLCBkYXRhX2xlbilcbitcbisgICAgICAgIGNmZy53YWl0X2h3X3N0YXRzX3NldHRsZSgpXG4rICAgICAgICBhZnRlciA9IGNmZy5uZXRubC5xc3RhdHNfZ2V0KHtcImlmaW5kZXhcIjogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpWzBdXG4rICAgICAgICBrc2Z0X2d0KGFmdGVyWydyeC1ody1ncm8tcGFja2V0cyddLFxuKyAgICAgICAgICAgICAgICBiZWZvcmVbJ3J4LWh3LWdyby1wYWNrZXRzJ10pXG4rICAgICAgICBrc2Z0X2d0KGFmdGVyWydyeC1ody1ncm8td2lyZS1wYWNrZXRzJ10sXG4rICAgICAgICAgICAgICAgIGJlZm9yZVsncngtaHctZ3JvLXdpcmUtcGFja2V0cyddKVxuKyAgICBmaW5hbGx5OlxuKyAgICAgICAgX2Nsb3NlX3BzcF9jb25uKGNmZywgcylcbitcbitAa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKSlcbitkZWYgZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XG4rICAgIFwiXCJcIiBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuKyAgICBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcilcbitcbiBcbiBkZWYgX2dldF9pcF92YXJpYW50cygpOlxuICAgICBmb3IgaXB2IGluIChcIjRcIiwgXCI2XCIpOlxuQEAgLTkzNyw3ICsxMDUwLDYgQEAgZGVmIF9zZXR1cF9wc3BfYXR0cmlidXRlcyhjZmcpOlxuICAgICBjZmcucHNwX2Rldl9wZWVyX25zaWQgPSBfZ2V0X25zaWQoY2ZnLm5ldG5zLm5hbWUpXG4gXG4gXG4tXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFwiXCJcIlxuIFxuQEAgLTk1NCw2ICsxMDY2LDcgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gXG4gICAgIHdpdGggZW52IGFzIGNmZzpcbiAgICAgICAgIGNmZy5wc3BubCA9IFBTUEZhbWlseSgpXG4rICAgICAgICBjZmcubmV0bmwgPSBOZXRkZXZGYW1pbHkoKVxuIFxuICAgICAgICAgaWYgaGFzX2NvbnQ6XG4gICAgICAgICAgICAgX3NldHVwX3BzcF9hdHRyaWJ1dGVzKGNmZylcbkBAIC05NzMsNyArMTA4Niw3IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcuY29tbV9wb3J0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEpXG4gXG4tICAgICAgICAgICAgICAgIGNhc2VzID0gW2RhdGFfYmFzaWNfc2VuZCwgZGF0YV9tc3NfYWRqdXN0XVxuKyAgICAgICAgICAgICAgICBjYXNlcyA9IFtkYXRhX2Jhc2ljX3NlbmQsIGRhdGFfaHdfZ3JvLCBkYXRhX21zc19hZGp1c3RdXG4gXG4gICAgICAgICAgICAgICAgIGlmIGhhc19jb250OlxuICAgICAgICAgICAgICAgICAgICAgY2FzZXMgKz0gW1xuQEAgLTk5MCw3ICsxMTAzLDcgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VfcGZ4PXtcImRldl9cIiwgXCJkYXRhX1wiLCBcImFzc29jX1wiLCBcInJlbW92YWxfXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXG4gXG4tICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiXCJleGl0XFwwXCIpXG4rICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiXCJleGl0XFwwXCIpXG4gICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suY2xvc2UoKVxuICAgICAgICAgZmluYWxseTpcbiAgICAgICAgICAgICBpZiBzcnYgYW5kIChzcnYuc3Rkb3V0IG9yIHNydi5zdGRlcnIpOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xuaW5kZXggYTI2ZTc2MjhiYmIxMy4uOWE2NzViZjQ0OWY1ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvcG9sbC5oXHUwMDNlXG5AQCAtMTE4LDYgKzExOSwzNCBAQCBzdGF0aWMgdm9pZCBzZW5kX3N0cihpbnQgc29jaywgaW50IHZhbHVlKVxuIFx0c2VuZChzb2NrLCBidWYsIHJldCArIDEsIE1TR19XQUlUQUxMKTtcbiB9XG4gXG4rc3RhdGljIGludCBzZW5kX2RhdGEoaW50IHNvY2ssIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBzYnVmWzgxOTJdID0gezB9O1xuK1x0c3NpemVfdCBzZW50O1xuK1xuK1x0d2hpbGUgKGxlbiBcdTAwM2UgMCkge1xuK1x0XHRzaXplX3QgY2h1bmsgPSBsZW47XG4rXG4rXHRcdGlmIChjaHVuayBcdTAwM2Ugc2l6ZW9mKHNidWYpKVxuK1x0XHRcdGNodW5rID0gc2l6ZW9mKHNidWYpO1xuK1xuK1x0XHRzZW50ID0gc2VuZChzb2NrLCBzYnVmLCBjaHVuaywgTVNHX05PU0lHTkFMKTtcbitcdFx0aWYgKHNlbnQgXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFUlI6ICVzOiAlc1xcblwiLCBfX2Z1bmNfXyxcbitcdFx0XHRcdHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGlmIChzZW50ID09IDApIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFUlI6ICVzOiBwZWVyIGNsb3NlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGxlbiAtPSBzZW50O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHQgICAgaW50IHNlcnZlcl9zb2NrLCBpbnQgY29tbV9zb2NrKVxuQEAgLTE4NSwyMiArMjE0LDIyIEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHRvZmYgKz0gbjtcbi1cdFx0XHRuID0gb2ZmO1xuIFxuICNkZWZpbmUgX19jb25zdW1lKHN6KVx0XHRcdFx0XHRcdFxcXG4gXHRcdCh7XHRcdFx0XHRcdFx0XFxcbi1cdFx0XHRpZiAobiA9PSAoc3opKSB7XHRcdFx0XFxcbi1cdFx0XHRcdG9mZiA9IDA7XHRcdFx0XFxcbi1cdFx0XHR9IGVsc2Uge1x0XHRcdFx0XFxcbi1cdFx0XHRcdG9mZiAtPSAoc3opO1x0XHRcdFxcXG4tXHRcdFx0XHRtZW1tb3ZlKGJ1ZiwgXHUwMDI2YnVmWyhzeildLCBvZmYpO1x0XFxcbi1cdFx0XHR9XHRcdFx0XHRcdFxcXG4rXHRcdFx0b2ZmIC09IChzeik7XHRcdFx0XHRcXFxuK1x0XHRcdG1lbW1vdmUoYnVmLCBcdTAwMjZidWZbKHN6KV0sIG9mZik7XHRcdFxcXG4gXHRcdH0pXG4gXG4tI2RlZmluZSBjbWQoX25hbWUpXHRcdFx0XHRcdFx0XHRcXFxuKy8qIE9ubHkgbWF0Y2ggb25jZSB0aGUgY29tbWFuZCBhbmQgaXRzIF9leHRyYV9zeiBieXRlIHBheWxvYWQgYXJlIGJvdGhcbisgKiBidWZmZXJlZCwgb3RoZXJ3aXNlIGEgc3BsaXQgcmVhZCB3b3VsZCBjb25zdW1lIHRoZSBuYW1lIGFuZCBzdHJhbmRcbisgKiB0aGUgcGF5bG9hZCwgZGVzeW5jaHJvbml6aW5nIHRoZSBwYXJzZXIgZm9yIGdvb2QuXG4rICovXG4rI2RlZmluZSBjbWQoX25hbWUsIF9leHRyYV9zeilcdFx0XHRcdFx0XHRcXFxuIFx0XHQoe1x0XHRcdFx0XHRcdFx0XFxcbiBcdFx0XHRzc2l6ZV90IHN6ID0gc2l6ZW9mKF9uYW1lKTtcdFx0XHRcXFxuLVx0XHRcdGJvb2wgbWF0Y2ggPSBuIFx1MDAzZT0gc3ogXHUwMDI2XHUwMDI2XHQhbWVtY21wKGJ1ZiwgX25hbWUsIHN6KTsgXFxcbitcdFx0XHRib29sIG1hdGNoID0gb2ZmIFx1MDAzZT0gc3ogKyAoX2V4dHJhX3N6KSBcdTAwMjZcdTAwMjZcdFx0XFxcbitcdFx0XHRcdCFtZW1jbXAoYnVmLCBfbmFtZSwgc3opO1x0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdFx0aWYgKG1hdGNoKSB7XHRcdFx0XHRcdFxcXG4gXHRcdFx0XHRkYmcoXCJjb21tYW5kOiBcIiBfbmFtZSBcIlxcblwiKTtcdFx0XFxcbkBAIC0yMTMsMTAgKzI0MiwxMCBAQCBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcbiBcdFx0XHRkbyB7XG4gXHRcdFx0XHRjb25zdW1lZCA9IGZhbHNlO1xuIFxuLVx0XHRcdFx0aWYgKGNtZChcInJlYWQgbGVuXCIpKVxuK1x0XHRcdFx0aWYgKGNtZChcInJlYWQgbGVuXCIsIDApKVxuIFx0XHRcdFx0XHRzZW5kX3N0cihjb21tX3NvY2ssIGRhdGFfcmVhZCk7XG4gXG4tXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBlY2hvXCIpKSB7XG4rXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBlY2hvXCIsIDApKSB7XG4gXHRcdFx0XHRcdGlmIChkYXRhX3NvY2sgXHUwMDNlPSAwKVxuIFx0XHRcdFx0XHRcdHNlbmQoZGF0YV9zb2NrLCBcImVjaG9cIiwgNSxcbiBcdFx0XHRcdFx0XHQgICAgIE1TR19XQUlUQUxMKTtcbkBAIC0yMjQsNyArMjUzLDI3IEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLFxuIFx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk46IGVjaG8gYnV0IG5vIGRhdGEgc29ja1xcblwiKTtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCJkYXRhIGNsb3NlXCIpKSB7XG4rXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBzZW5kXCIsIDQpKSB7XG4rXHRcdFx0XHRcdF9fdTMyIGxlbjtcbitcbitcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNmxlbiwgYnVmLCBzaXplb2YobGVuKSk7XG4rXHRcdFx0XHRcdF9fY29uc3VtZShzaXplb2YobGVuKSk7XG4rXHRcdFx0XHRcdGxlbiA9IG50b2hsKGxlbik7XG4rXG4rXHRcdFx0XHRcdGlmIChkYXRhX3NvY2sgXHUwMDNjIDApIHtcbitcdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcdFx0XHRcdFwiV0FSTjogc2VuZCBidXQgbm8gZGF0YSBzb2NrXFxuXCIpO1xuK1x0XHRcdFx0XHRcdHNlbmRfZXJyKGNvbW1fc29jayk7XG4rXHRcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRcdH1cbitcbitcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbitcdFx0XHRcdFx0aWYgKHNlbmRfZGF0YShkYXRhX3NvY2ssIGxlbikpXG4rXHRcdFx0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4rXHRcdFx0XHRcdFx0XHRcIldBUk46IHNlbmQgaW5jb21wbGV0ZSBmb3IgJXUgYnl0ZXNcXG5cIixcbitcdFx0XHRcdFx0XHRcdGxlbik7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBjbG9zZVwiLCAwKSkge1xuIFx0XHRcdFx0XHRpZiAoZGF0YV9zb2NrIFx1MDAzZT0gMCkge1xuIFx0XHRcdFx0XHRcdGNsb3NlKGRhdGFfc29jayk7XG4gXHRcdFx0XHRcdFx0ZGF0YV9zb2NrID0gLTE7XG5AQCAtMjMzLDI2ICsyODIsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0XHRcdFx0cmFjZV9jbG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCJjb25uIHBzcFwiKSkge1xuK1x0XHRcdFx0aWYgKGNtZChcImNvbm4gcHNwXCIsIDIpKSB7XG4gXHRcdFx0XHRcdGlmIChhY2NlcHRfY2ZnICE9IEFDQ0VQVF9DRkdfTk9ORSlcbiBcdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJXQVJOOiBvbGQgY29ubiBjb25maWcgc3RpbGwgc2V0IVxcblwiKTtcbiBcdFx0XHRcdFx0YWNjZXB0X2NmZyA9IEFDQ0VQVF9DRkdfUFNQO1xuIFx0XHRcdFx0XHRzZW5kX2Fjayhjb21tX3NvY2spO1xuIFx0XHRcdFx0XHQvKiBuZXh0IHR3byBieXRlcyBhcmUgdmVyc2lvbnMgKi9cbi1cdFx0XHRcdFx0aWYgKG9mZiBcdTAwM2U9IDIpIHtcbi1cdFx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2cHNwX3ZlcnMsIGJ1ZiwgMik7XG4tXHRcdFx0XHRcdFx0X19jb25zdW1lKDIpO1xuLVx0XHRcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk46IHNob3J0IGNvbm4gcHNwIGNvbW1hbmQhXFxuXCIpO1xuLVx0XHRcdFx0XHR9XG4rXHRcdFx0XHRcdG1lbWNweShcdTAwMjZwc3BfdmVycywgYnVmLCAyKTtcbitcdFx0XHRcdFx0X19jb25zdW1lKDIpO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKGNtZChcImNvbm4gY2xyXCIpKSB7XG4rXHRcdFx0XHRpZiAoY21kKFwiY29ubiBjbHJcIiwgMCkpIHtcbiBcdFx0XHRcdFx0aWYgKGFjY2VwdF9jZmcgIT0gQUNDRVBUX0NGR19OT05FKVxuIFx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk46IG9sZCBjb25uIGNvbmZpZyBzdGlsbCBzZXQhXFxuXCIpO1xuIFx0XHRcdFx0XHRhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCJleGl0XCIpKVxuK1x0XHRcdFx0aWYgKGNtZChcImV4aXRcIiwgMCkpXG4gXHRcdFx0XHRcdHNob3VsZF9xdWl0ID0gdHJ1ZTtcbiAjdW5kZWYgY21kXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwOTozNDoxNC40MDYyOTI4MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg0MDQ0ODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IE1lbGxhbm94IG1seDUgRHJpdmVyIC0gTm90IEZ1enphYmxlIGluIFN0YW5kYXJkIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIHRvIHN1cHBvcnQgUFNQIGhhcmR3YXJlIEdSTy9kZWNhcHN1bGF0aW9uLiBJdCdzIGFkZGluZyBuZXcgZmVhdHVyZXMsIG1vZGlmeWluZyBleGlzdGluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBUQyBvZmZsb2FkLCBpbnRyb2R1Y2luZyBhIHVuaWZpZWQgZmxvdyB0YWcsIGFuZCB1cGRhdGluZyBzZXZlcmFsIGZpbGVzIChgaXBzZWNfZnMuY2AsIGBtYWNzZWMuY2AsIGBwc3AuY2AsIGBlbl9yeC5jYCwgYGVuX3RjLmNgKSB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVyZSBhcmUgYWxzbyBhc3NvY2lhdGVkIHRlc3RzIGluIGBwc3AucHlgIGFuZCBgcHNwX3Jlc3BvbmRlci5jYC4gSSdtIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGNvcmUgTWVsbGFub3ggZmlsZXMuXG5cblRoZSBjb2RlIGlzIGZvY3VzZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9gLiBUaGlzIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRpb24gaXQncyByZWxhdGVkIHRvIHRoZSBDb25uZWN0WC00LzUvNi83IG5ldHdvcmsgY2FyZHMsIGEgaGlnaC1lbmQgU21hcnROSUMuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCdzIHRoZSBrZXkuXG5cbkxldCBtZSB0aGlua+KApiBJcyBgbWx4NWAgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyPyBZZXMsIGFic29sdXRlbHkuIEl0J3MgKnRoZSogTWVsbGFub3ggQ29ubmVjdFggZHJpdmVyLiBBbmQgZG9lcyBRRU1VIGVtdWxhdGUgTWVsbGFub3ggQ29ubmVjdFgtNCsgTklDcz8gTm9wZS4gUUVNVSBoYXMgc29tZSBlbXVsYXRpb24sIGJ1dCBpdCdzIG5vdCByZWxldmFudCBoZXJlLiBTbywgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gZXhpc3RzIGZvciBgbWx4NWAsIHBlcmlvZC5cblxuSSByZWNhbGwgdGhhdCBTeXprYWxsZXIgdXN1YWxseSBkb2Vzbid0IGZ1enogaGFyZHdhcmUgZHJpdmVycyB1bmxlc3MgdGhlcmUncyBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgdkRQQS4gVGhpcyBzZWVtcyB0byBiZSBldGhlcm5ldCBhY2NlbGVyYXRpb24gZm9yIElQc2VjL01BQ3NlYy9QU1AsIHdoaWNoLCBhcyBJIHNlZSBpdCwgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE5JQy4gTGV0J3MgbWFrZSBzdXJlLCBvbmNlIGFnYWluLiBDaGVja2luZyBjYXJlZnVsbHksIEkgZG9uJ3Qgc2VlIGFueSBRRU1VIGVtdWxhdGlvbiBmb3IgYG1seDVgIGluIHRoZSBzdGFuZGFyZCBRRU1VLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGBtbHg1YCBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgKGEgU21hcnROSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkpIHRoYXQgcmVsaWVzIG9uIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBBbmQgSSd2ZSBkb3VibGUtY2hlY2tlZCwgdGhlIGNoYW5nZXMgYXJlIGFsbCBpbiBgbWx4NWAgYW5kIHNlbGZ0ZXN0cyB0aGF0IHJlbHkgb24gdGhhdC4gSSdtIGNvbmZpZGVudCBhYm91dCB0aGF0LiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDM1LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwOTozNDo1MC4yNDY3NDU2NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrcg5f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 09:33:07 +0000 UTC FinishedAt: 2026-08-04 09:34:51 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwOTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0NGRhNDExOTg4Mjc4MDNjYzYwYjNkMGQ2ZTVjYTFjODBjYTRlOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDA5OjM0OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbkBAIC05OCw2ICYjNDM7OTgsNyBAQCBlbnVtIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXG4gXHRNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgJiM0MzsgMSxcbiBcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUwsXG4mIzQzO1x0TUxYNUVfQUNDRUxfRlNfUFNQX0RFQ0FQX0ZUX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxuICNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuaW5kZXggM2YyMTJlNDZmYzJmOS4uYTBiYjE5Y2M5NTZkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuQEAgLTIxOCw2ICYjNDM7MjE4LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF90eF9maW5pc2goc3RydWN0IG1seDVlX3R4cXNxICpzcSxcbiAjZW5kaWZcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4mIzQzO1x0aWYgKG1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpXG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YyYjNDM7JiM0Mzs7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjKSlcbiYjNDM7XHRcdG1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fdGMtLTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF9yeChwcml2KTtcbkBAIC0yMjksNiAmIzQzOzI1MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHByaXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUxYNV9FTl9QU1BcbiYjNDM7XHRyZXR1cm4gbWx4NWVfcHNwX3VwZGF0ZV9yeChwcml2KTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF90eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2Zsb3dfdGFnLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNDIyZjk2ZmZjZWQwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaFxuQEAgLTAsMCAmIzQzOzEsNDUgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTGludXgtT3BlbklCICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OIFx1MDAyNiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX01MWDVFX0ZMT1dfVEFHX0hfX1xuJiM0MzsjZGVmaW5lIF9fTUxYNUVfRkxPV19UQUdfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbHg1L2RldmljZS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKiBVbmlmaWVkIGFjY2VsIGZsb3dfdGFnIGxheW91dCBpbiBDUUUgc29wX2Ryb3BfcXBuIFsyMzowXTpcbiYjNDM7ICpcbiYjNDM7ICogICBbMjM6MjFdID0gcHJvdG9jb2wgSUQgKDMgYml0cyk6XG4mIzQzOyAqICAgICAgICAgICAgICAwID0gbm9uZSAoZGVmYXVsdClcbiYjNDM7ICogICAgICAgICAgICAgIDEgPSBJUHNlY1xuJiM0MzsgKiAgICAgICAgICAgICAgMiA9IE1BQ3NlY1xuJiM0MzsgKiAgICAgICAgICAgICAgMyA9IFBTUCAoSFcgZGVjcnlwdGVkLCBQU1AgaGVhZGVyIHByZXNlbnQpXG4mIzQzOyAqICAgICAgICAgICAgICA0ID0gUFNQIGRlY2FwIChIVyBkZWNyeXB0ZWQgXHUwMDI2IGRlY2Fwc3VsYXRlZClcbiYjNDM7ICogICAgICAgICAgICAgIDUtNyA9IHJlc2VydmVkXG4mIzQzOyAqICAgWzIwOjE3XSA9IFBTUCB2ZXJzaW9uICg0IGJpdHMsIHZhbGlkIHdoZW4gcHJvdG8gPT0gUFNQIGRlY2FwKVxuJiM0MzsgKiAgIDE2ICAgICAgPSByZXNlcnZlZFxuJiM0MzsgKiAgIFsxNTowXSAgPSB1c2VkIGJ5IG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gVEMpLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLXHRcdEdFTk1BU0soMjMsIDIxKVxuJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX05PTkVcdFx0KDAgXHUwMDNjXHUwMDNjIDIxKVxuJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDXHQoMSBcdTAwM2NcdTAwM2MgMjEpXG4mIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDXHQoMiBcdTAwM2NcdTAwM2MgMjEpXG4mIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQXHRcdCgzIFx1MDAzY1x1MDAzYyAyMSlcbiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVBcdCg0IFx1MDAzY1x1MDAzYyAyMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVFx0MTdcbiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX01BU0tcdCgweEYgXHUwMDNjXHUwMDNjIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJlMzJfdG9fY3B1KGNxZS1cdTAwM2Vzb3BfZHJvcF9xcG4pIFx1MDAyNiAweEZGRkZGRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFx1MDAyNiBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19NTFg1RV9GTE9XX1RBR19IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5pbmRleCAzMjk2MDhjNTkzMTNiLi4wODFjYjJmMzFiZTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5AQCAtNCw2ICYjNDM7NCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW4vZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlc3dpdGNoLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpcHNlYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZnNfY29yZS5oXCYjMzQ7XG5AQCAtMTg5LDcgJiM0MzsxOTEsNyBAQCBzdGF0aWMgdm9pZCBpcHNlY19yeF9ydWxlX2FkZF9tYXRjaF9vYmooc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSxcbiBcdFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yKTtcbiBcdFx0TUxYNV9TRVQoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX3ZhbHVlLFxuIFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yLFxuLVx0XHRcdCBzYV9lbnRyeS1cdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpKTtcbiYjNDM7XHRcdFx0IHNhX2VudHJ5LVx1MDAzZWlwc2VjX29ial9pZCk7XG4gXG4gXHRcdHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWFfZW5hYmxlIHw9IE1MWDVfTUFUQ0hfTUlTQ19QQVJBTUVURVJTXzI7XG4gXHR9XG5AQCAtMjA2NSw3ICYjNDM7MjA2Nyw3IEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdGlmICghYXR0cnMtXHUwMDNlZHJvcCkge1xuIFx0XHRpZiAocnggIT0gaXBzZWMtXHUwMDNlcnhfZXN3KVxuIFx0XHRcdGVyciA9IHNldHVwX21vZGlmeV9oZWFkZXIoaXBzZWMsIGF0dHJzLVx1MDAzZXR5cGUsXG4tXHRcdFx0XHRcdFx0ICBzYV9lbnRyeS1cdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpLFxuJiM0MztcdFx0XHRcdFx0XHQgIHNhX2VudHJ5LVx1MDAzZWlwc2VjX29ial9pZCxcbiBcdFx0XHRcdFx0XHQgIFhGUk1fREVWX09GRkxPQURfSU4sIFx1MDAyNmZsb3dfYWN0KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IG1seDVfZXN3X2lwc2VjX3J4X3NldHVwX21vZGlmeV9oZWFkZXIoc2FfZW50cnksIFx1MDAyNmZsb3dfYWN0KTtcbkBAIC0yMDk4LDYgJiM0MzsyMTAwLDEwIEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdFx0Zmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QO1xuIFx0ZWxzZVxuIFx0XHRmbG93X2FjdC5hY3Rpb24gfD0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUO1xuJiM0MztcdGlmICghYXR0cnMtXHUwMDNlZHJvcCBcdTAwMjZcdTAwMjYgcnggIT0gaXBzZWMtXHUwMDNlcnhfZXN3KSB7XG4mIzQzO1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbiYjNDM7XHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7XG4mIzQzO1x0fVxuIFx0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbiBcdGRlc3RbMF0uZnQgPSByeC1cdTAwM2VmdC5zdGF0dXM7XG4gXHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuQEAgLTI1NzQsNTMgJiM0MzsyNTgwLDE5IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfcmVhZF9zdGF0cyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgdm9pZCAqaXBzZWNfc3RhdHMpXG4gXHR9XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENIXG4tc3RhdGljIGludCBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLXtcbi1cdHN0cnVjdCBtbHg1X2Vzd2l0Y2ggKmVzdyA9IG1kZXYtXHUwMDNlcHJpdi5lc3dpdGNoO1xuLVx0aW50IGVyciA9IDA7XG4tXG4tXHRpZiAoZXN3KSB7XG4tXHRcdGVyciA9IG1seDVfZXN3X2xvY2soZXN3KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuLVx0aWYgKG1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKSB7XG4tXHRcdGVyciA9IC1FQlVTWTtcbi1cdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190YyYjNDM7JiM0Mzs7XG4tXG4tdW5sb2NrOlxuLVx0aWYgKGVzdylcbi1cdFx0bWx4NV9lc3dfdW5sb2NrKGVzdyk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyBpbnQgbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbi17XG4tXHRpZiAobWRldi1cdTAwM2VudW1fYmxvY2tfaXBzZWMpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190YyYjNDM7JiM0Mzs7XG4tXHRyZXR1cm4gMDtcbi19XG4tI2VuZGlmXG4tXG4tc3RhdGljIHZvaWQgbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuJiM0MztzdGF0aWMgYm9vbCBhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiB7XG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190Yy0tO1xuJiM0MztcdHJldHVybiBzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUIHx8XG4mIzQzO1x0XHRzYV9lbnRyeS1cdTAwM2VhdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTjtcbiB9XG4gXG4gaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4ge1xuJiM0MztcdGJvb2wgYmxvY2tfdGMgPSBhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tXHRcdGVyciA9IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4mIzQzO1x0aWYgKGJsb2NrX3RjKSB7XG4mIzQzO1x0XHRlcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMjYzNiw4ICYjNDM7MjYwOCw4IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dDpcbi1cdGlmIChzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxuLVx0XHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4mIzQzO1x0aWYgKGJsb2NrX3RjKVxuJiM0MztcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMjY1MSw4ICYjNDM7MjYyMyw4IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdGlmIChpcHNlY19ydWxlLVx1MDAzZXBrdF9yZWZvcm1hdClcbiBcdFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhtZGV2LCBpcHNlY19ydWxlLVx1MDAzZXBrdF9yZWZvcm1hdCk7XG4gXG4tXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcbi1cdFx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKG1kZXYpO1xuJiM0MztcdGlmIChhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpKVxuJiM0MztcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1kZXYpO1xuIFxuIFx0aWYgKHNhX2VudHJ5LVx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX09VVCkge1xuIFx0XHR0eF9mdF9wdXQoc2FfZW50cnktXHUwMDNlaXBzZWMsIHNhX2VudHJ5LVx1MDAzZWF0dHJzLnR5cGUpO1xuQEAgLTI2ODYsNyAmIzQzOzI2NTgsNyBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuJiM0MztcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0yNzAxLDcgJiM0MzsyNjczLDcgQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dDpcbi1cdG1seDVlX2lwc2VjX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4mIzQzO1x0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI3MTIsNyAmIzQzOzI2ODQsNyBAQCB2b2lkIG1seDVlX2FjY2VsX2lwc2VjX2ZzX2RlbF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIFxuIFx0bWx4NV9kZWxfZmxvd19ydWxlcyhpcHNlY19ydWxlLVx1MDAzZXJ1bGUpO1xuIFxuLVx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbiYjNDM7XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFxuIFx0aWYgKHBvbF9lbnRyeS1cdTAwM2VhdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTikge1xuIFx0XHRyeF9mdF9wdXRfcG9saWN5KHBvbF9lbnRyeS1cdTAwM2VpcHNlYyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaFxuaW5kZXggNDViMGQxOWU3MzVjYi4uNmRlYTU5NzhhNDBlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcbkBAIC0zOCwxMCAmIzQzOzM4LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZW4uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2VuL3R4cnguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9mbG93X3RhZy5oXCYjMzQ7XG4gXG4tLyogQml0MzE6IElQc2VjIG1hcmtlciwgQml0MzA6IHJlc2VydmVkLCBCaXQyOS0yNDogSVBzZWMgc3luZHJvbWUsIEJpdDIzLTA6IElQc2VjIG9iaiBpZCAqL1xuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgPT0gMHgyKVxuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9TWU5EUk9NKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgR0VOTUFTSyg1LCAwKSlcbiYjNDM7LyogSVBzZWMgb2JqIGlkIGluIGZ0X21ldGFkYXRhIGJpdHNbMjM6MF0gKi9cbiAjZGVmaW5lIE1MWDVfSVBTRUNfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IEdFTk1BU0soMjMsIDApKVxuIFxuIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9pcHNlY19zdGF0ZSB7XG5AQCAtNzQsNyAmIzQzOzczLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWx4NWVfaXBzZWNfdHhfaWRzX2xlbihzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfaXBzZWNfc3RcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pcHNlY19pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuLVx0cmV0dXJuIE1MWDVfSVBTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuJiM0MztcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19JUFNFQztcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX2lwc2VjX2VzZWdfbWV0YShzdHJ1Y3QgbWx4NV93cWVfZXRoX3NlZyAqZXNlZylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmNcbmluZGV4IGRhZmY1M2JhN2QwOWYuLmFhN2EyODk1NDg2MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7ZW4uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xpYi9hc28uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2xpYi9jcnlwdG8uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW5fYWNjZWwvbWFjc2VjLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1MWDVfTUFDU0VDX0VQTl9TQ09QRV9NSUQgMHg4MDAwMDAwMExcbkBAIC0zMjQsNiAmIzQzOzMyNSw4IEBAIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhX2ZzKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcbiBcdG1seDVfbWFjc2VjX2ZzX2RlbF9ydWxlKG1hY3NlYy1cdTAwM2VtZGV2LVx1MDAzZW1hY3NlY19mcywgc2EtXHUwMDNlbWFjc2VjX3J1bGUsIGFjdGlvbiwgbmV0ZGV2LFxuIFx0XHRcdFx0ZnNfaWQpO1xuIFx0c2EtXHUwMDNlbWFjc2VjX3J1bGUgPSBOVUxMO1xuJiM0MztcdGlmICghaXNfdHgpXG4mIzQzO1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWFjc2VjLVx1MDAzZW1kZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1ZV9tYWNzZWNfY2xlYW51cF9zYShzdHJ1Y3QgbWx4NWVfbWFjc2VjICptYWNzZWMsXG5AQCAtMzQzLDYgJiM0MzszNDYsNyBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhX2ZzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFx0Y29uc3Qgc3RydWN0IG1hY3NlY190eF9zYyAqdHhfc2MgPSBcdTAwMjZjdHgtXHUwMDNlc2VjeS1cdTAwM2V0eF9zYztcbiBcdHN0cnVjdCBtbHg1X21hY3NlY19ydWxlX2F0dHJzIHJ1bGVfYXR0cnM7XG4gXHR1bmlvbiBtbHg1X21hY3NlY19ydWxlICptYWNzZWNfcnVsZTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChpc190eCBcdTAwMjZcdTAwMjYgdHhfc2MtXHUwMDNlZW5jb2Rpbmdfc2EgIT0gc2EtXHUwMDNlYXNzb2NfbnVtKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zNTMsMTMgJiM0MzszNTcsMjYgQEAgc3RhdGljIGludCBtbHg1ZV9tYWNzZWNfaW5pdF9zYV9mcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbiBcdHJ1bGVfYXR0cnMuYWN0aW9uID0gKGlzX3R4KSA/IE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9FTkNSWVBUIDpcbiBcdFx0XHRcdCAgICAgIE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9ERUNSWVBUO1xuIFxuJiM0MztcdGlmICghaXNfdHgpIHtcbiYjNDM7XHRcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocHJpdi1cdTAwM2VtZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1hY3NlY19ydWxlID0gbWx4NV9tYWNzZWNfZnNfYWRkX3J1bGUobWFjc2VjX2ZzLCBjdHgsIFx1MDAyNnJ1bGVfYXR0cnMsIGZzX2lkKTtcbi1cdGlmICghbWFjc2VjX3J1bGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmICghbWFjc2VjX3J1bGUpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dF91bmJsb2NrX3RjO1xuJiM0MztcdH1cbiBcbiBcdHNhLVx1MDAzZW1hY3NlY19ydWxlID0gbWFjc2VjX3J1bGU7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF91bmJsb2NrX3RjOlxuJiM0MztcdGlmICghaXNfdHgpXG4mIzQzO1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocHJpdi1cdTAwM2VtZGV2KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuQEAgLTczNSwxMiAmIzQzOzc1MiwxMiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19hZGRfcnhzYyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcbiBcdCAqIGEgbm9uLU5VTEwgbWRfZHN0IHdpdGggdW5pbml0aWFsaXNlZCBjb250ZW50cy5cbiBcdCAqL1xuIFx0ZXJyID0geGFfYWxsb2MoXHUwMDI2bWFjc2VjLVx1MDAzZXNjX3hhcnJheSwgXHUwMDI2c2NfeGFycmF5X2VsZW1lbnQtXHUwMDNlZnNfaWQsIHNjX3hhcnJheV9lbGVtZW50LFxuLVx0XHQgICAgICAgWEFfTElNSVQoMSwgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdCAgICAgICBYQV9MSU1JVCgxLCBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWYgKGVyciA9PSAtRUJVU1kpXG4gXHRcdFx0bmV0ZGV2X2VycihjdHgtXHUwMDNlbmV0ZGV2LFxuIFx0XHRcdFx0ICAgXCYjMzQ7TUFDc2VjIG9mZmxvYWQ6IHVuYWJsZSB0byBjcmVhdGUgZW50cnkgZm9yIFJYIFNDICglZCBSeCBTQ3MgYWxyZWFkeSBhbGxvY2F0ZWQpXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpO1xuJiM0MztcdFx0XHRcdCAgIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCk7XG4gXHRcdGdvdG8gZGVzdHJveV9tZF9kc3Q7XG4gXHR9XG4gXG5AQCAtMTEzNyw3ICYjNDM7MTE1NCwxMiBAQCBzdGF0aWMgaW50IG1hY3NlY191cGRfc2VjeV9od19hZGRyZXNzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFx0c3RydWN0IG1seDVlX21hY3NlY19zYSAqcnhfc2E7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0O1xuIFx0aW50IGksIGVyciA9IDA7XG4mIzQzO1x0Ym9vbCBibG9ja190YztcbiBcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBUQyBibG9jayBhY3Jvc3MgdGhlIG9wZXJhdGlvbiwgdG8gcHJldmVudCBhIG1pc3RpbWVkIFRDXG4mIzQzO1x0ICogZmlsdGVyIGFkZCBmcm9tIHByZXZlbnRpbmcgdGhlIDJuZCBsb29wIGZyb20gaGFwcGVuaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGJsb2NrX3RjID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwcml2LVx1MDAzZW1kZXYpID09IDA7XG4gXG4gXHRsaXN0ID0gXHUwMDI2bWFjc2VjX2RldmljZS1cdTAwM2VtYWNzZWNfcnhfc2NfbGlzdF9oZWFkO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X3NjLCB0bXAsIGxpc3QsIHJ4X3NjX2xpc3RfZWxlbWVudCkge1xuQEAgLTExNjgsNiAmIzQzOzExOTAsOCBAQCBzdGF0aWMgaW50IG1hY3NlY191cGRfc2VjeV9od19hZGRyZXNzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFxuIFx0bWVtY3B5KG1hY3NlY19kZXZpY2UtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbiBvdXQ6XG4mIzQzO1x0aWYgKGJsb2NrX3RjKVxuJiM0MztcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHByaXYtXHUwMDNlbWRldik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNzAwLDcgJiM0MzsxNzI0LDcgQEAgdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoIW1hY3NlYylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZnNfaWQgPSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcbiYjNDM7XHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRBX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNjX3hhcnJheV9lbGVtZW50ID0geGFfbG9hZChcdTAwMjZtYWNzZWMtXHUwMDNlc2NfeGFycmF5LCBmc19pZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG5pbmRleCAyN2RmNzJlMjMxMDZkLi41NzE2MjRmMmRiMTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmhcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbHg1L2RyaXZlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtsaWIvbWFjc2VjX2ZzLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgbWx4NWVfcHJpdjtcbkBAIC0zMSw3ICYjNDM7MzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX3NrYl9pc19vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX21hY3NlY19pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuLVx0cmV0dXJuIE1MWDVfTUFDU0VDX01FVEFEQVRBX01BUktFUihiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpKTtcbiYjNDM7XHR1MzIgcHJvdG8gPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDO1xuIH1cbiBcbiB2b2lkIG1seDVlX21hY3NlY19vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbmluZGV4IDczYjIzMjM3OTI2M2EuLmFkOGRiZDhjMmYyNzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuQEAgLTYsNyAmIzQzOzYsOSBAQFxuICNpbmNsdWRlIFwmIzM0O21seDVfY29yZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cHNwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtsaWIvY3J5cHRvLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZW5fYWNjZWwvZW5fYWNjZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL3BzcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL3BzcF9yeHR4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtmc19jb3JlLmhcJiMzNDtcbiBcbiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHtcbkBAIC0yMSw2ICYjNDM7MjMsMTMgQEAgZW51bSBhY2NlbF9wc3Bfc3luZHJvbWUge1xuIFx0UFNQX0JBRF9UUkFJTEVSLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBjb25zdCB1OCBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW10gPSB7XG4mIzQzO1x0UFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyOCxcbiYjNDM7XHRQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMjU2LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUyBBUlJBWV9TSVpFKHBzcF9zdXBwb3J0ZWRfdmVyc2lvbnMpXG4mIzQzO1xuIHN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG5AQCAtNDEsNyAmIzQzOzUwLDcgQEAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpyeF9tb2RpZnlfaGRyO1xuJiM0MztcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiB9O1xuIFxuQEAgLTUyLDYgJiM0Mzs2MSwxNSBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1ZHBfcnVsZXNbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4gfTtcbiBcbiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSB7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZHJvcF9ncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xuJiM0MztcdHN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdCAqcmVmb3JtYXQ7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGVbTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlNdO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1bnN1cHBvcnRlZF9ydWxlO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2O1xuIFx0c3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7XG5AQCAtNjMsMTIgJiM0Mzs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcbiYjNDM7XHQvKiBXaGVuIHNldCwgc3RlZXJpbmcgaXMgY29uZmlndXJlZCB0byBkZWNhcHN1bGF0ZSBQU1AgKHJlbW92ZSBVRFAmIzQzO1BTUFxuJiM0MztcdCAqIGhlYWRlcnMgYW5kIFBTUCB0cmFpbGVyKSBhbmQgaGFuZCBvZmYgdGhlIFNQSSBpbiBjcWUuZnRfbWV0YWRhdGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBkZWNhcF9lbmFibGVkO1xuIFxuIFx0c3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIGRlY3J5cHRbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2NoZWNrX3RhYmxlIGNoZWNrO1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHJ4O1xuIH07XG4gXG4mIzQzO3N0YXRpYyBib29sIHNoYW1wb19lbmFibGVkKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY2hhbm5lbHMucGFyYW1zLnBhY2tldF9tZXJnZS50eXBlID09XG4mIzQzO1x0XHRNTFg1RV9QQUNLRVRfTUVSR0VfU0hBTVBPO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXG4gc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXG4ge1xuQEAgLTExMCw2ICYjNDM7MTM5LDE1IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICoqcnVsZSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICoqbW9kaGRyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCptb2RoZHIpIHtcbiYjNDM7XHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGRldiwgKm1vZGhkcik7XG4mIzQzO1x0XHQqbW9kaGRyID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxuIHtcbkBAIC00MDIsMTUgJiM0Mzs0NDAsMTYxIEBAIGludCBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpY1xuJiM0Mzt2b2lkIGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY2FwLVx1MDAzZXVuc3VwcG9ydGVkX3J1bGUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY2FwLVx1MDAzZXJ1bGVbaV0pO1xuJiM0MztcdGlmIChkZWNhcC1cdTAwM2VyZWZvcm1hdCkge1xuJiM0MztcdFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhmcy1cdTAwM2VtZGV2LCBkZWNhcC1cdTAwM2VyZWZvcm1hdCk7XG4mIzQzO1x0XHRkZWNhcC1cdTAwM2VyZWZvcm1hdCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZGVjYXAtXHUwMDNlbW9kaWZ5X2hkcik7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZkZWNhcC1cdTAwM2Vkcm9wX2dyb3VwKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZkZWNhcC1cdTAwM2VmdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX2Z0ZV9wc3BfdmVyc2lvbihzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHU4IHZlcnNpb24pXG4mIzQzO3tcbiYjNDM7XHR2b2lkICptaXNjX3BhcmFtc182O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4mIzQzO1x0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfNjtcbiYjNDM7XHRtaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYSxcbiYjNDM7XHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbiYjNDM7XHRNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uKTtcbiYjNDM7XHRtaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbiYjNDM7XHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbiYjNDM7XHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2M2LCBtaXNjX3BhcmFtc182LCBwc3BfdmVyc2lvbiwgdmVyc2lvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpY1xuJiM0MztpbnQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSAqZGVjYXApXG4mIzQzO3tcbiYjNDM7XHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdF9wYXJhbXMgcmVmb3JtYXRfcGFyYW1zID0ge307XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4mIzQzO1x0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiYjNDM7XHRpbnQgaSwgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0c3BlYyA9IGt2emFsbG9jX29iaigqc3BlYyk7XG4mIzQzO1x0aWYgKCFzcGVjKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSBGVCAqL1xuJiM0MztcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgJiM0MzsgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7XG4mIzQzO1x0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9ERUNBUF9GVF9MRVZFTDtcbiYjNDM7XHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbiYjNDM7XHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9mdChmcywgXHUwMDI2ZnRfYXR0ciwgXHUwMDI2ZGVjYXAtXHUwMDNlZnQpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIGRlY2FwIHJ4IGZ0IGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3NwZWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgZHJvcCBncm91cCAqL1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNhcC1cdTAwM2VmdCwgXHUwMDI2ZGVjYXAtXHUwMDNlZHJvcF9ncm91cCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgcnggZHJvcF9ncm91cCBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBZGQgZGVmYXVsdCBkcm9wIHJ1bGUgKi9cbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShkZWNhcC1cdTAwM2VmdCwgTlVMTCwgZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2ZGVjYXAtXHUwMDNldW5zdXBwb3J0ZWRfcnVsZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgdW5zdXBwb3J0ZWQgdmVyc2lvbnMgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG1vZGlmeV9oZHI6IGNvcHkgU1BJIGZyb20gUkVHX0NfMCB0byBSRUdfQiAqL1xuJiM0MztcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xuJiM0MztcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19maWVsZCxcbiYjNDM7XHRcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQ18wKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfb2Zmc2V0LCAwKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsXG4mIzQzO1x0XHQgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xuJiM0MztcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApO1xuJiM0MztcbiYjNDM7XHRtb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgMSwgYWN0aW9uKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG1vZGlmeV9oZHIpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRkZWNhcC1cdTAwM2Vtb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiYjNDM7XG4mIzQzO1x0LyogcGt0X3JlZm9ybWF0OiBkZWNhcCBQU1AgdHJhbnNwb3J0ICovXG4mIzQzO1x0cmVmb3JtYXRfcGFyYW1zLnR5cGUgPSBNTFg1X1JFRk9STUFUX1RZUEVfUkVNT1ZFX1BTUF9UUkFOU1BPUlQ7XG4mIzQzO1x0cmVmb3JtYXQgPSBtbHg1X3BhY2tldF9yZWZvcm1hdF9hbGxvYyhtZGV2LCBcdTAwMjZyZWZvcm1hdF9wYXJhbXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCk7XG4mIzQzO1x0aWYgKElTX0VSUihyZWZvcm1hdCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIocmVmb3JtYXQpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRkZWNhcC1cdTAwM2VyZWZvcm1hdCA9IHJlZm9ybWF0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU4IHZlcnNpb24gPSBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW2ldO1xuJiM0MztcdFx0c3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBtYXRjaCh2ZXJzaW9uKSA9XHUwMDNlIGRlY2FwLCBjb3B5IFNQSSwgZndkIHRvIHJ4IEZUICovXG4mIzQzO1x0XHRzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3BlYywgdmVyc2lvbik7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE92ZXJyaWRlIHRoZSBmbG93IHRhZyBzZXQgaW4gdGhlIGRlY3J5cHQgdGFibGUgd2l0aFxuJiM0MztcdFx0ICogdGhlIGRlY2FwIFBTUCBtYXJrZXIgYW5kIHZlcnNpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XG4mIzQzO1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUCB8XG4mIzQzO1x0XHRcdCgodTMyKXZlcnNpb24gXHUwMDNjXHUwMDNjIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9QQUNLRVRfUkVGT1JNQVQgfFxuJiM0MztcdFx0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8XG4mIzQzO1x0XHRcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcbiYjNDM7XHRcdGZsb3dfYWN0LnBrdF9yZWZvcm1hdCA9IHJlZm9ybWF0O1xuJiM0MztcdFx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4mIzQzO1x0XHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuJiM0MztcdFx0ZGVzdC5mdCA9IGZzLVx1MDAzZXJ4LmZ0O1xuJiM0MztcbiYjNDM7XHRcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY2FwLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4mIzQzO1x0XHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRlY2FwLVx1MDAzZXJ1bGVbaV0gPSBydWxlO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIG91dF9zcGVjO1xuJiM0MztcbiYjNDM7b3V0X2VycjpcbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfZGVzdHJveShmcywgZGVjYXApO1xuJiM0MztvdXRfc3BlYzpcbiYjNDM7XHRrdmZyZWUoc3BlYyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQpXG4ge1xuIFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjcnlwdC1cdTAwM2VydWxlKTtcbi1cdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbi1cdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbi1cdFx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbi1cdH1cbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLVx1MDAzZW1kZXYsIFx1MDAyNmRlY3J5cHQtXHUwMDNlbW9kaWZ5X2hkcik7XG4gXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSk7XG4gXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ncm91cCk7XG4gXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZkZWNyeXB0LVx1MDAzZWZ0KTtcbkBAIC00MzEsMTEgJiM0Mzs2MTUsMTEgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uICpkZWZhdWx0X2Rlc3QpXG4ge1xuIFx0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcbi1cdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHIgPSBOVUxMO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuIFx0TUxYNV9ERUNMQVJFX0ZMT1dfQUNUKGZsb3dfYWN0KTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RoZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiBcdGludCBlcnIgPSAwO1xuQEAgLTQ3OSwzMCAmIzQzOzY2MywzNiBAQCBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHR9XG4gXHRkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4gXG4tXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xuLVx0c2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpO1xuLVx0Zmxvd19hY3QuY3J5cHRvLnR5cGUgPSBNTFg1X0ZMT1dfQ09OVEVYVF9FTkNSWVBUX0RFQ1JZUFRfVFlQRV9QU1A7XG4tXHQvKiBTZXQgYml0WzMxLCAzMF0gUFNQIG1hcmtlciAqL1xuLSNkZWZpbmUgTUxYNUVfUFNQX01BUktFUl9CSVQgKEJJVCgzMCkgfCBCSVQoMzEpKVxuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpO1xuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBmaWVsZCwgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBNTFg1RV9QU1BfTUFSS0VSX0JJVCk7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIG9mZnNldCwgMCk7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMzIpO1xuLVxuLVx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSwgYWN0aW9uKTtcbi1cdGlmIChJU19FUlIobW9kaWZ5X2hkcikpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFsbG9jIHBzcCBzZXQgbW9kaWZ5X2hlYWRlcl9pZCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4tXHRcdG1vZGlmeV9oZHIgPSBOVUxMO1xuJiM0MztcdC8qIENyZWF0ZSBtb2RpZnlfaGRyIHRvIGNvcHkgU1BJIHRvIFJFR19DXzAgKi9cbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9DT1BZKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXG4mIzQzO1x0XHQgTUxYNV9BQ1RJT05fSU5fRklFTERfUFNQX0hFQURFUl8xKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfb2Zmc2V0LCAwKTtcbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbiYjNDM7XHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsXG4mIzQzO1x0XHQgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0NfMCk7XG4mIzQzO1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMCk7XG4mIzQzO1xuJiM0MztcdG1vZGhkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSxcbiYjNDM7XHRcdFx0XHRcdCAgYWN0aW9uKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG1vZGhkcikpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIobW9kaGRyKTtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZW1vZGlmeV9oZHIgPSBtb2RoZHI7XG4gXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSO1xuLVx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4mIzQzO1x0LyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi9cbiYjNDM7XHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBQU1AgbWFya2VyIHZpYSBmbG93X3RhZyAqL1xuJiM0MztcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XG4mIzQzO1x0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1A7XG4mIzQzO1xuJiM0MztcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xuJiM0MztcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4mIzQzO1x0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8XG4mIzQzO1x0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4mIzQzO1x0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGhkcjtcbiBcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4gXHRkZXN0LmZ0ID0gZnMtXHUwMDNlY2hlY2suZnQ7XG4gXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG5AQCAtNTIzLDkgJiM0Mzs3MTMsNTAgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIGRlY2FwX3dhbnRlZClcbiYjNDM7e1xuJiM0MztcdGJvb2wgZGVjYXBfc3VwcG9ydGVkID1cbiYjNDM7XHRcdE1MWDVfQ0FQX0ZMT1dUQUJMRShmcy1cdTAwM2VtZGV2LFxuJiM0MztcdFx0XHRcdCAgIGZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5yZWZvcm1hdF9kZWxfcHNwX3RyYW5zcG9ydCk7XG4mIzQzO1x0Ym9vbCBkZWNhcF9lbmFibGUgPSBkZWNhcF93YW50ZWQgXHUwMDI2XHUwMDI2IGRlY2FwX3N1cHBvcnRlZDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgdGhlIGRlY2FwIHRhYmxlIGlmIG5lZWRlZC4gKi9cbiYjNDM7XHRpZiAoZGVjYXBfZW5hYmxlIFx1MDAyNlx1MDAyNiAhZnMtXHUwMDNlZGVjYXAuZnQpIHtcbiYjNDM7XHRcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoZnMsIFx1MDAyNmZzLVx1MDAzZWRlY2FwKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bWx4NV9jb3JlX3dhcm4oZnMtXHUwMDNlbWRldixcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRcdGRlY2FwX2VuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZGVjYXBfZW5hYmxlID09IGZzLVx1MDAzZWRlY2FwX2VuYWJsZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUmVkaXJlY3QgdHJhZmZpYyB0byB0aGUgY29ycmVjdCB0YWJsZS4gKi9cbiYjNDM7XHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuJiM0MztcdGRlc3QuZnQgPSBkZWNhcF9lbmFibGUgPyBmcy1cdTAwM2VkZWNhcC5mdCA6IGZzLVx1MDAzZXJ4LmZ0O1xuJiM0MztcdGVyciA9IG1seDVfbW9kaWZ5X3J1bGVfZGVzdGluYXRpb24oZnMtXHUwMDNlY2hlY2sucnVsZSwgXHUwMDI2ZGVzdCwgTlVMTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3lfZnQ7XG4mIzQzO1xuJiM0MztcdGZzLVx1MDAzZWRlY2FwX2VuYWJsZWQgPSBkZWNhcF9lbmFibGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2Rlc3Ryb3lfZnQ6XG4mIzQzO1x0aWYgKGRlY2FwX2VuYWJsZSlcbiYjNDM7XHRcdGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9kZXN0cm95KGZzLCBcdTAwMjZmcy1cdTAwM2VkZWNhcCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4gXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbiYjNDM7XHRib29sIHRjX2Jsb2NrZWQgPSBmcy1cdTAwM2VyeC5mdDtcbiBcdGludCBpO1xuIFxuIFx0LyogZGlzY29ubmVjdCAqL1xuQEAgLTUzNCwxOSAmIzQzOzc2NSwyOSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4gXHR9XG4gXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY2FwKTtcbiBcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZXJ4KTtcbiYjNDM7XHRpZiAodGNfYmxvY2tlZClcbiYjNDM7XHRcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChmcy1cdTAwM2VtZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgYm9vbCBkZWNhcF9lbmFibGUsXG4gXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbiBcdGludCBpLCBlcnI7XG4gXG4mIzQzO1x0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChmcy1cdTAwM2VtZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1RDIG9mZmxvYWQgYWN0aXZlLCBjYW5ub3QgZW5hYmxlIFBTUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VyeCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX3VuYmxvY2tfdGM7XG4gXHR9XG4gXG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG5AQCAtNTczLDYgJiM0Mzs4MTQsMTIgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0XHRtbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSwgXHUwMDI2ZGVzdCk7XG4gXHR9XG4gXG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKGZzLCBkZWNhcF9lbmFibGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIFJYIHN0ZWVyaW5nIGNvbmZpZyBmb3IgSFcgR1JPXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gZXJyX2RlY3J5cHRfZnQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuIGVycl9kZWNyeXB0X2Z0OlxuQEAgLTU4Myw2ICYjNDM7ODMwLDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuIGVycl9mdDpcbiBcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZXJ4KTtcbiYjNDM7ZXJyX3VuYmxvY2tfdGM6XG4mIzQzO1x0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLVx1MDAzZW1kZXYpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtODM5LDcgJiM0MzsxMDg4LDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBleHRhY2spO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIHNoYW1wb19lbmFibGVkKHByaXYpLFxuJiM0MztcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMTExNiwzICYjNDM7MTM2NiwxNCBAQCB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0cHJpdi1cdTAwM2Vwc3AgPSBOVUxMO1xuIFx0a2ZyZWUocHNwKTtcbiB9XG4mIzQzO1xuJiM0MztpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtXHUwMDNlcHNwO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChwcml2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0aWYgKCFwc3AgfHwgIXBzcC1cdTAwM2Vmcy1cdTAwM2VjaGVjay5mdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKHBzcC1cdTAwM2Vmcywgc2hhbXBvX2VuYWJsZWQocHJpdikpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG5pbmRleCAzZjQ0MWU3ZGQ1NWFjLi43NmY2YzY5ZGUwZTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC00OSw2ICYjNDM7NDksNyBAQCBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBpbnQgbWx4NWVfcHNwX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG5AQCAtNjEsNSAmIzQzOzYyLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cbiAjZW5kaWYgLyogQ09ORklHX01MWDVfRU5fUFNQICovXG4gI2VuZGlmIC8qIF9fTUxYNUVfQUNDRUxfUFNQX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbmluZGV4IDM0OGZkN2E5NjI2MTUuLjJiZWZmZWUxNDI3OGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbkBAIC0xMTgsMTAgJiM0MzsxMTgsMjUgQEAgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpcbiB7XG4gXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHR1MTYgZGV2X2lkID0gcHJpdi1cdTAwM2Vwc3AtXHUwMDNlcHNkLVx1MDAzZWlkO1xuLVx0Ym9vbCBzdHJpcF9pY3YgPSB0cnVlO1xuLVx0dTggZ2VuZXJhdGlvbiA9IDA7XG4mIzQzO1x0c3RydWN0IHBzcF9za2JfZXh0ICpwc2U7XG4mIzQzO1xuJiM0MztcdGlmIChtbHg1ZV9wc3BfaXNfZGVjYXAoY3FlKSkge1xuJiM0MztcdFx0LyogVURQICYjNDM7IFBTUCBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlciByZW1vdmVkIGJ5IEhXLlxuJiM0MztcdFx0ICogQ29uc3RydWN0IHRoZSBQU1AgZXh0ZW5zaW9uIGZyb20gQ1FFIG1ldGFkYXRhLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghcHNlKSlcbiYjNDM7XHRcdFx0Z290byBkcm9wO1xuJiM0MztcbiYjNDM7XHRcdHBzZS1cdTAwM2VzcGkgPSBtbHg1ZV9wc3BfZ2V0X3NwaShjcWUpO1xuJiM0MztcdFx0cHNlLVx1MDAzZXZlcnNpb24gPSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTtcbiYjNDM7XHRcdHBzZS1cdTAwM2VkZXZfaWQgPSBkZXZfaWQ7XG4mIzQzO1x0XHRwc2UtXHUwMDNlZ2VuZXJhdGlvbiA9IDA7XG4mIzQzO1x0XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXG4tXHRpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIGdlbmVyYXRpb24sIHN0cmlwX2ljdikpXG4mIzQzO1x0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCAwLCB0cnVlKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuIFx0c2tiLVx1MDAzZWRlY3J5cHRlZCA9IDE7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuaW5kZXggMmIwODBjMzljYzM3ZS4uNDFiNjAyNTliM2JjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuQEAgLTksMTAgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcHNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW4vdHhyeC5oXCYjMzQ7XG4tXG4tLyogQml0MzA6IFBTUCBtYXJrZXIsIEJpdDIyLTA6IFBTUCBvYmogaWQgKi9cbi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX01BUktFUihtZXRhZGF0YSkgICgoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDMwKSBcdTAwMjYgMHgzKSA9PSAweDMpXG4tI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcdTAwMjYgR0VOTUFTSygyMiwgMCkpXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiBcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcbiBcdHUzMiB0YWlsZW47XG5AQCAtODIsNyAmIzQzOzc5LDI5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX3BzcF90eF9pZHNfbGVuKHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGVcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHRyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuJiM0MztcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1AgfHxcbiYjNDM7XHRcdHByb3RvID09IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUDtcbiYjNDM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3BfaXNfZGVjYXAoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiYjNDM7e1xuJiM0MztcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKG1seDVlX2FjY2VsX2Zsb3dfdGFnKGNxZSkgXHUwMDI2IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSykgXHUwMDNlXHUwMDNlXG4mIzQzO1x0XHRNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX1NISUZUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIF9fYmUzMiBtbHg1ZV9wc3BfZ2V0X3NwaShzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNxZS1cdTAwM2VmdF9tZXRhZGF0YTtcbiB9XG4gXG4gYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTEwLDYgJiM0MzsxMjksMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5pbmRleCAzYjlkNDJjN2U5YzI4Li4zYzZlZjUwMGQwZmIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYyODYsNyAmIzQzOzYyODYsMTMgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXG4gc3RhdGljIGludCBtbHg1ZV91cGRhdGVfbmljX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdHJldHVybiBtbHg1ZV9yZWZyZXNoX3RpcnMocHJpdi1cdTAwM2VtZGV2LCBmYWxzZSwgZmFsc2UpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1seDVlX3JlZnJlc2hfdGlycyhwcml2LVx1MDAzZW1kZXYsIGZhbHNlLCBmYWxzZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtbHg1ZV9hY2NlbF91cGRhdGVfcngocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWx4NWVfcHJvZmlsZSBtbHg1ZV9uaWNfcHJvZmlsZSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jXG5pbmRleCBmYjcxMTBiMWI2ODM0Li5jN2VhYWIzZjc5NjdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jXG5AQCAtMjIyMSw2ICYjNDM7MjIyMSwzMyBAQCBzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIHBhZ2Vfc2l6ZSAqIG5yX2ZyYWdzICYjNDM7IGRhdGFfYmNudCBcdTAwM2M9IEdST19MRUdBQ1lfTUFYX1NJWkU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fcHNwX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19NTFg1X0VOX1BTUFxuJiM0MztcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9QU1ApO1xuJiM0MztcdGJvb2wgaXNfcHNwID0gbWx4NWVfcHNwX2lzX3J4X2Zsb3coY3FlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseSghaXNfcHNwIFx1MDAyNlx1MDAyNiAhcHNlKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBObyBtYXRjaCBvbiBQU1Agc3RhdHVzIGNoYW5nZSAobm8gY3J5cHRvIC1cdTAwM2UgY3J5cHRvIG9yIHZpY2UtdmVyc2EpLiAqL1xuJiM0MztcdGlmICh1bmxpa2VseShpc19wc3AgIT0gISFwc2UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBTUEkgYW5kIHZlcnNpb24gYXJlIG9ubHkgYXZhaWxhYmxlIGluIENRRSBtZXRhZGF0YSBmb3IgZGVjYXAgZmxvd3MuXG4mIzQzO1x0ICogTm9uLWRlY2FwIFBTUCBjYW5ub3QgYmUgbWF0Y2hlZCBoZXJlLCBmb3JjZSBhIGZsdXNoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseSghbWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBObyBtYXRjaCBvbiBzZWN1cml0eSBwYXJhbWV0ZXJzIGNoYW5nZS4gKi9cbiYjNDM7XHRyZXR1cm4gcHNlLVx1MDAzZXNwaSA9PSBtbHg1ZV9wc3BfZ2V0X3NwaShjcWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0cHNlLVx1MDAzZXZlcnNpb24gPT0gbWx4NWVfcHNwX2dldF92ZXJzaW9uKGNxZSk7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3cnFfc2hhbXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuIFx0dTE2IGRhdGFfYmNudFx0XHQ9IG1wd3JxX2dldF9jcWVfYnl0ZV9jbnQoY3FlKSAtIGNxZS1cdTAwM2VzaGFtcG8uaGVhZGVyX3NpemU7XG5AQCAtMjI1OCw4ICYjNDM7MjI4NSw5IEBAIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3cnFfc2hhbXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxXG4gXHRkYXRhX29mZnNldCA9IHdxZV9vZmZzZXQgXHUwMDI2IChwYWdlX3NpemUgLSAxKTtcbiBcdHBhZ2VfaWR4ID0gd3FlX29mZnNldCBcdTAwM2VcdTAwM2UgcnEtXHUwMDNlbXB3cWUucGFnZV9zaGlmdDtcbiBcdGlmICgqc2tiIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEobWF0Y2ggXHUwMDI2XHUwMDI2IG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsXG4tXHRcdFx0XHRcdFx0XHQgcGFnZV9zaXplKSkpIHtcbiYjNDM7XHQgICAgIShtYXRjaCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2UoKnNrYiwgZGF0YV9iY250LCBwYWdlX3NpemUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIG1seDVlX2h3X2dyb19wc3BfbWF0Y2goKnNrYiwgY3FlKSkpIHtcbiBcdFx0bWF0Y2ggPSBmYWxzZTtcbiBcdFx0bWx4NWVfc2hhbXBvX2ZsdXNoX3NrYihycSwgY3FlLCBtYXRjaCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xuaW5kZXggMWJjN2I5MDE5MTI0YS4uNzAxOTVmY2RkZmM4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xuQEAgLTQ4MTEsMTQgJiM0Mzs0ODExLDE0IEBAIHN0YXRpYyBib29sIGlzX2Zsb3dfcnVsZV9kdXBsaWNhdGVfYWxsb3dlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIG5ldGlmX2lzX2xhZ19wb3J0KGRldikgXHUwMDI2XHUwMDI2IHJwcml2IFx1MDAyNlx1MDAyNiBycHJpdi1cdTAwM2VyZXAtXHUwMDNldnBvcnQgIT0gTUxYNV9WUE9SVF9VUExJTks7XG4gfVxuIFxuLS8qIEFzIElQc2VjIGFuZCBUQyBvcmRlciBpcyBub3QgYWxpZ25lZCBiZXR3ZWVuIHNvZnR3YXJlIGFuZCBoYXJkd2FyZS1vZmZsb2FkLFxuLSAqIGVpdGhlciBJUHNlYyBvZmZsb2FkIG9yIFRDIG9mZmxvYWQsIG5vdCBib3RoLCBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS5cbiYjNDM7LyogVEMgb2ZmbG9hZCBhbmQgYWNjZWwgcHJvdG9jb2xzIGNhbiBvdmVyd3JpdGUgZWFjaCBvdGhlciYjMzk7cyBmbG93X3RhZyB3aXRoXG4mIzQzOyAqIHN0ZWVyaW5nIHJ1bGVzIGFuZCB0aGV5IGNhbm5vdCBzaW11bHRhbmVvdXNseSBvcGVyYXRlIG9uIHRoZSBzYW1lIGludGVyZmFjZS5cbiYjNDM7ICogQWRkaXRpb25hbGx5LCBhcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmRcbiYjNDM7ICogaGFyZHdhcmUtb2ZmbG9hZCwgb25seSBvbmUgaXMgYWxsb3dlZCBmb3IgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gICovXG4tc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0MztzdGF0aWMgYm9vbCBpc190Y19hY2NlbF9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfTUxYNV9FTl9JUFNFQykpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdGlmIChmaWx0ZXIgIT0gcHJpdi1cdTAwM2VuZXRkZXYpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC00ODI4LDI3ICYjNDM7NDgyOCwzNSBAQCBzdGF0aWMgYm9vbCBpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7c3RhdGljIGludCBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbi1cdGlmICghaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXG4mIzQzO1x0aWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAobWRldi1cdTAwM2VudW1fYmxvY2tfdGMpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja19pcHNlYyYjNDM7JiM0Mzs7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4mIzQzO1x0aWYgKG1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fdGMpXG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCYjNDM7JiM0Mzs7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7c3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4tXHRpZiAoIWlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKVxuJiM0MztcdGlmICghaXNfdGNfYWNjZWxfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNlbWRldi1cdTAwM2VudW1fYmxvY2tfaXBzZWMtLTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuJiM0MztcdGlmICghV0FSTl9PTl9PTkNFKCFwcml2LVx1MDAzZW1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpKVxuJiM0MztcdFx0cHJpdi1cdTAwM2VtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX2FjY2VsLS07XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIH1cbiBcbiBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbkBAIC00ODYzLDcgJiM0Mzs0ODcxLDcgQEAgaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4gXHRpZiAoIW1seDVfZXN3X2hvbGQocHJpdi1cdTAwM2VtZGV2KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbi1cdGVyciA9IG1seDVlX3RjX2Jsb2NrX2lwc2VjX29mZmxvYWQoZGV2LCBwcml2KTtcbiYjNDM7XHRlcnIgPSBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVzd19yZWxlYXNlO1xuIFxuQEAgLTQ5MTIsNyAmIzQzOzQ5MjAsNyBAQCBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBlcnJfZnJlZTpcbiBcdG1seDVlX2Zsb3dfcHV0KHByaXYsIGZsb3cpO1xuIG91dDpcbi1cdG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuJiM0MztcdG1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpO1xuIFx0bWx4NV9lc3dfcHV0KHByaXYtXHUwMDNlbWRldik7XG4gZXN3X3JlbGVhc2U6XG4gXHRtbHg1X2Vzd19yZWxlYXNlKHByaXYtXHUwMDNlbWRldik7XG5AQCAtNDk1NSw3ICYjNDM7NDk2Myw3IEBAIGludCBtbHg1ZV9kZWxldGVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIFx0dHJhY2VfbWx4NWVfZGVsZXRlX2Zsb3dlcihmKTtcbiBcdG1seDVlX2Zsb3dfcHV0KHByaXYsIGZsb3cpO1xuIFxuLVx0bWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7XG4mIzQzO1x0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRtbHg1X2Vzd19wdXQocHJpdi1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbmluZGV4IGUxYjhjYjc4MzY5ZjEuLjUzYjYwNDNlMzNkMjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtlbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZXN3aXRjaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlbi90Y19jdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW4vdGNfdHVuLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlbi90Yy9pbnRfcG9ydC5oXCYjMzQ7XG5AQCAtMzcwLDExICYjNDM7MzcxLDEzIEBAIHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqbWx4NWVfdGNfdGFibGVfYWxsb2Modm9pZCk7XG4gdm9pZCBtbHg1ZV90Y190YWJsZV9mcmVlKHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqdGMpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9jcWVfcmVnYl9jaGFpbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuIHtcbi1cdHUzMiBjaGFpbiwgcmVnX2I7XG4mIzQzO1x0dTMyIGZsb3dfdGFnLCByZWdfYiwgY2hhaW47XG4gXG4mIzQzO1x0Zmxvd190YWcgPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpO1xuIFx0cmVnX2IgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpO1xuIFxuLVx0aWYgKHJlZ19iIFx1MDAzZVx1MDAzZSAoTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX0JJVFMgJiM0MzsgRVNXX1pPTkVfSURfQklUUykpXG4mIzQzO1x0aWYgKGZsb3dfdGFnICE9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX05PTkUgfHxcbiYjNDM7XHQgICAgKHJlZ19iIFx1MDAzZVx1MDAzZSAoTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX0JJVFMgJiM0MzsgRVNXX1pPTkVfSURfQklUUykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjaGFpbiA9IHJlZ19iIFx1MDAyNiBNTFg1RV9UQ19UQUJMRV9DSEFJTl9UQUdfTUFTSztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuY1xuaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbHg1L21hY3NlYy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7ZnNfY29yZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bGliL21hY3NlY19mcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttbHg1X2NvcmUuaFwmIzM0O1xuIFxuIC8qIE1BQ3NlYyBUWCBmbG93IHN0ZWVyaW5nICovXG5AQCAtNDUsOSAmIzQzOzQ2LDYgQEBcbiAjZGVmaW5lIE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhPVVRfU0NJIDB4OFxuICNkZWZpbmUgTUxYNV9TRUNUQUdfSEVBREVSX1NJWkVfV0lUSF9TQ0kgKE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhPVVRfU0NJICYjNDM7IE1BQ1NFQ19TQ0lfTEVOKVxuIFxuLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi9cbi0jZGVmaW5lIG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpICgoZnNfaWQpIHwgQklUKDMwKSlcbi1cbiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHtcbiBcdF9fYmUxNiBldGhlcnR5cGU7XG4gXHR1OCB0Y2lfYW47XG5AQCAtMTc1NywxMSAmIzQzOzE3NTUsMTAgQEAgbWFjc2VjX2ZzX3J4X2FkZF9ydWxlKHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzLFxuIFx0cnhfdGFibGVzID0gXHUwMDI2cnhfZnMtXHUwMDNldGFibGVzO1xuIFx0ZnRfY3J5cHRvID0gXHUwMDI2cnhfdGFibGVzLVx1MDAzZWZ0X2NyeXB0bztcbiBcbi1cdC8qIFNldCBiaXRbMzEgLSAzMF0gbWFjc2VjIG1hcmtlciAtIDB4MDEgKi9cbiBcdC8qIFNldCBiaXRbMTUtMF0gZnMgaWQgKi9cbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcbi1cdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZGF0YSwgbWFjc2VjX2ZzX3NldF9yeF9mc19pZChmc19pZCkpO1xuJiM0MztcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZGF0YSwgZnNfaWQpO1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApO1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDMyKTtcbiBcbkBAIC0xNzc4LDYgJiM0MzsxNzc1LDkgQEAgbWFjc2VjX2ZzX3J4X2FkZF9ydWxlKHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzLFxuIFx0LyogUnggY3J5cHRvIHRhYmxlIHdpdGggU0NJIHJ1bGUgKi9cbiBcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXHUwMDI2Zmxvd19hY3QsIGF0dHJzLCB0cnVlKTtcbiBcbiYjNDM7XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbiYjNDM7XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQztcbiYjNDM7XG4gXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxuQEAgLTE4MDMsNiAmIzQzOzE4MDMsOSBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsXG4gXG4gXHRcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXHUwMDI2Zmxvd19hY3QsIGF0dHJzLCBmYWxzZSk7XG4gXG4mIzQzO1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbiYjNDM7XHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDO1xuJiM0MztcbiBcdFx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4gXHRcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4gXHRcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG5AQCAtMjE2MCw4ICYjNDM7MjE2Myw4IEBAIHN0YXRpYyBpbnQgbWx4NV9tYWNzZWNfZnNfYWRkX3JvY2VfcnVsZV9yeChzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywgdTMyXG4gXG4gXHRzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU18yO1xuIFx0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWEsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUpO1xuLVx0TUxYNV9TRVQoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX3ZhbHVlLCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181LFxuLVx0XHQgbWFjc2VjX2ZzX3NldF9yeF9mc19pZChmc19pZCkpO1xuJiM0MztcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbiYjNDM7XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181LCBmc19pZCk7XG4gXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQUxMT1c7XG4gXHRuZXdfcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZnMtXHUwMDNlcm9jZS5mdF9tYWNzZWNfb3BfY2hlY2ssIHNwZWMsIFx1MDAyNmZsb3dfYWN0LFxuIFx0XHRcdFx0ICAgICAgIE5VTEwsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXG5pbmRleCAxNWFjYWZmNDM2NDE3Li5iOGI4YjQxMmQ1YzNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaFxuQEAgLTYsMTEgJiM0Mzs2LDEwIEBAXG4gXG4gI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQ1xuIFxuLS8qIEJpdDMxIC0gMzA6IE1BQ3NlYyBtYXJrZXIsIEJpdDE1LTA6IE1BQ3NlYyBpZCAqL1xuLSNkZWZpbmUgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVggVVNIUlRfTUFYIC8qIE11c3QgYmUgcG93ZXIgb2YgdHdvICovXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgID09IDB4MSlcbi0jZGVmaW5lIE1MWDVfTUFDU0VDX1JYX01FVEFEQVRfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXG4mIzQzOy8qIE1BQ3NlYyBmc19pZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzE1OjBdICovXG4mIzQzOyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYIFVTSFJUX01BWCAvKiBNdXN0IGJlIHBvd2VyIG9mIHR3byAqL1xuJiM0MzsjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYXG4mIzQzOyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXG4gXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cbiAjZGVmaW5lIE1MWDVfRVRIX1dRRV9GVF9NRVRBX01BQ1NFQ19NQVNLIFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbmluZGV4IDY0M2I0YWFjMjAzMzYuLjQwNmMwZjdlNjNkODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG5AQCAtMTgxMCw2ICYjNDM7MTgxMCw3IEBAIGludCBtbHg1X21kZXZfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgcHJvZmlsZV9pZHgpXG4gXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XG4gXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZkZXYtXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCwgXHUwMDI2ZGV2LVx1MDAzZWxvY2tfa2V5KTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlbWx4NWVfcmVzLnVwbGlua19uZXRkZXZfbG9jayk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2V3Y19zdGF0ZV9sb2NrKTtcbiBcbkBAIC0xODk4LDYgJiM0MzsxODk5LDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VhbGxvY19tdXRleCk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLndjX2hlYWQubG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2VpbnRmX3N0YXRlX211dGV4KTtcbiBcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXHUwMDI2ZGV2LVx1MDAzZWxvY2tfa2V5KTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMTkyNSw2ICYjNDM7MTkyNyw3IEBAIHZvaWQgbWx4NV9tZGV2X3VuaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZWJmcmVncy5yZWdfaGVhZC5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZXdjX3N0YXRlX2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlbWx4NWVfcmVzLnVwbGlua19uZXRkZXZfbG9jayk7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZWludGZfc3RhdGVfbXV0ZXgpO1xuIFx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbmluZGV4IGIxODcxYzA4MjFkMGIuLjJkOWJjNzUyZTQzMWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTc4OCw4ICYjNDM7Nzg4LDExIEBAIHN0cnVjdCBtbHg1X2NvcmVfZGV2IHtcbiBcdHUzMiAgICAgICAgICAgICAgICAgICAgICB2c2NfYWRkcjtcbiBcdHN0cnVjdCBtbHg1X2h2X3ZoY2FcdCpodl92aGNhO1xuIFx0c3RydWN0IG1seDVfaHdtb25cdCpod21vbjtcbi1cdHU2NFx0XHRcdG51bV9ibG9ja190Yztcbi1cdHU2NFx0XHRcdG51bV9ibG9ja19pcHNlYztcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IG11dGV4IGxvY2s7XG4mIzQzO1x0XHR1NjQgbnVtX3RjO1xuJiM0MztcdFx0dTY0IG51bV9hY2NlbDtcbiYjNDM7XHR9IG9mZmxvYWRfYmxvY2s7XG4gI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQ1xuIFx0c3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnM7XG4gXHQvKiBNQUNzZWMgbm90aWZpZXIgY2hhaW4gdG8gc3luYyBNQUNzZWMgY29yZSBhbmQgSUIgZGF0YWJhc2UgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbmluZGV4IDMxNTY0OGE3NzBkMDAuLjliODk5NzIzYTYzNWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuQEAgLTE2LDExICYjNDM7MTYsMTIgQEAgZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF90cnVlLCBrc2Z0X2VxLCBrc2Z0X25lLCBrc2Z0X2d0LCBrc2Z0X3JhaXNlc1xuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9ub25lXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcbi1mcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeFxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgS3NmdFNraXBFeCwgS3NmdEZhaWxFeCwgS3NmdFhmYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIE5ldERydkNvbnRFbnZcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0bGluaywgTmxFcnJvciwgUFNQRmFtaWx5LCBSdG5sRmFtaWx5XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBOZXRsaW5rLCBObEVycm9yLCBOZXRkZXZGYW1pbHksIFBTUEZhbWlseSwgUnRubEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBia2csIGV0aHRvb2wsIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlbiwgQ21kRXhpdEZhaWx1cmVcbiBmcm9tIGxpYi5weSBpbXBvcnQgaXBcbiBcbiBcbkBAIC0zMCwxNSAmIzQzOzMxLDI1IEBAIGRlZiBfZ2V0X291dHEocyk6XG4gICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKFwmIzM0O0lcJiMzNDssIG91dHEpWzBdXG4gXG4gXG4mIzQzO2RlZiBfcmVjdl9leGFjdChzb2NrLCBuKTpcbiYjNDM7ICAgIGJ1ZiA9IGImIzM5OyYjMzk7XG4mIzQzOyAgICB3aGlsZSBsZW4oYnVmKSBcdTAwM2MgbjpcbiYjNDM7ICAgICAgICBjaHVuayA9IHNvY2sucmVjdihuIC0gbGVuKGJ1ZikpXG4mIzQzOyAgICAgICAgaWYgbm90IGNodW5rOlxuJiM0MzsgICAgICAgICAgICBicmVha1xuJiM0MzsgICAgICAgIGJ1ZiAmIzQzOz0gY2h1bmtcbiYjNDM7ICAgIHJldHVybiBidWZcbiYjNDM7XG4mIzQzO1xuIGRlZiBfc2VuZF93aXRoX2FjayhjZmcsIG1zZyk6XG4tICAgIGNmZy5jb21tX3NvY2suc2VuZChtc2cpXG4tICAgIHJlc3BvbnNlID0gY2ZnLmNvbW1fc29jay5yZWN2KDQpXG4mIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKVxuJiM0MzsgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KVxuICAgICBpZiByZXNwb25zZSAhPSBiJiMzOTthY2tcXDAmIzM5OzpcbiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcJiMzNDtVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZVwmIzM0OywgcmVzcG9uc2UpXG4gXG4gXG4gZGVmIF9yZW1vdGVfcmVhZF9sZW4oY2ZnKTpcbi0gICAgY2ZnLmNvbW1fc29jay5zZW5kKGImIzM5O3JlYWQgbGVuXFwwJiMzOTspXG4mIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzk7cmVhZCBsZW5cXDAmIzM5OylcbiAgICAgcmV0dXJuIGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJiMzOTt1dGYtOCYjMzk7KSlcbiBcbiBcbkBAIC05Nyw3ICYjNDM7MTA4LDcgQEAgZGVmIF9zZW5kX2NhcmVmdWwoY2ZnLCBzLCByb3VuZHMpOlxuIGRlZiBfY2hlY2tfZGF0YV9yeChjZmcsIGV4cF9sZW4pOlxuICAgICByZWFkX2xlbiA9IC0xXG4gICAgIGZvciBfIGluIHJhbmdlKDMwKTpcbi0gICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiJiMzOTtyZWFkIGxlblxcMCYjMzk7KVxuJiM0MzsgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiJiMzOTtyZWFkIGxlblxcMCYjMzk7KVxuICAgICAgICAgcmVhZF9sZW4gPSBpbnQoY2ZnLmNvbW1fc29jay5yZWN2KDEwMjQpWzotMV0uZGVjb2RlKCYjMzk7dXRmLTgmIzM5OykpXG4gICAgICAgICBpZiByZWFkX2xlbiA9PSBleHBfbGVuOlxuICAgICAgICAgICAgIGJyZWFrXG5AQCAtNTgzLDYgJiM0Mzs1OTQsMTA4IEBAIGRlZiBfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciBpcHYgaW4gKFwmIzM0OzRcJiMzNDssIFwmIzM0OzZcJiMzNDspOlxuICAgICAgICAgICAgIHlpZWxkIEtzZnROYW1lZFZhcmlhbnQoZlwmIzM0O3Z7dmVyfV9pcHtpcHZ9XCYjMzQ7LCB2ZXIsIGlwdilcbiBcbiYjNDM7ZGVmIF9lbmFibGVfbG9jYWxfaHdfZ3JvKGNmZyk6XG4mIzQzOyAgICBjZmcucmVxdWlyZV9jbWQoXCYjMzQ7ZXRodG9vbFwmIzM0OylcbiYjNDM7ICAgIGZlYXQgPSBldGh0b29sKGZcJiMzNDstayB7Y2ZnLmlmbmFtZX1cJiMzNDssIGpzb249VHJ1ZSlbMF1cbiYjNDM7ICAgIGdybyA9IGZlYXQuZ2V0KFwmIzM0O3J4LWdyby1od1wmIzM0OylcbiYjNDM7ICAgIGlmIG5vdCBncm8gb3IgXCYjMzQ7YWN0aXZlXCYjMzQ7IG5vdCBpbiBncm8gb3IgXCYjMzQ7Zml4ZWRcJiMzNDsgbm90IGluIGdybzpcbiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O0hXIEdSTyBmZWF0dXJlIG5vdCByZXBvcnRlZCBieSBldGh0b29sXCYjMzQ7KVxuJiM0MzsgICAgaWYgZ3JvW1wmIzM0O2ZpeGVkXCYjMzQ7XSBhbmQgbm90IGdyb1tcJiMzNDthY3RpdmVcJiMzNDtdOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRYZmFpbEV4KFwmIzM0O0hXIEdSTyBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVwmIzM0OylcbiYjNDM7ICAgIGlmIG5vdCBncm9bXCYjMzQ7YWN0aXZlXCYjMzQ7XTpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGV0aHRvb2woZlwmIzM0Oy1LIHtjZmcuaWZuYW1lfSByeC1ncm8taHcgb25cJiMzNDspXG4mIzQzOyAgICAgICAgZXhjZXB0IENtZEV4aXRGYWlsdXJlIGFzIGU6XG4mIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7Q2Fubm90IGVuYWJsZSBIVyBHUk8gdmlhIGV0aHRvb2xcJiMzNDspIGZyb20gZVxuJiM0MzsgICAgICAgIGRlZmVyKGV0aHRvb2wsIGZcJiMzNDstSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9mZlwmIzM0OylcbiYjNDM7ICAgICAgICBmZWF0ID0gZXRodG9vbChmXCYjMzQ7LWsge2NmZy5pZm5hbWV9XCYjMzQ7LCBqc29uPVRydWUpWzBdXG4mIzQzOyAgICAgICAgZ3JvID0gZmVhdC5nZXQoXCYjMzQ7cngtZ3JvLWh3XCYjMzQ7LCB7fSlcbiYjNDM7ICAgICAgICBpZiBub3QgZ3JvLmdldChcJiMzNDthY3RpdmVcJiMzNDspOlxuJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O0hXIEdSTyBmYWlsZWQgdG8gYWN0aXZhdGVcJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9yZW1vdGVfc2VuZChjZmcsIHNpemUpOlxuJiM0MzsgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGImIzM5O2RhdGEgc2VuZFxcMCYjMzk7ICYjNDM7IHN0cnVjdC5wYWNrKCYjMzk7IUkmIzM5Oywgc2l6ZSkpXG4mIzQzOyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpXG4mIzQzOyAgICBpZiByZXNwb25zZSAhPSBiJiMzOTthY2tcXDAmIzM5OzpcbiYjNDM7ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXCYjMzQ7VW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgdG8gZGF0YSBzZW5kXCYjMzQ7LCByZXNwb25zZSlcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3JlY3ZfYWxsKHMsIGV4cGVjdGVkLCB0aW1lb3V0PTIwKTpcbiYjNDM7ICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KVxuJiM0MzsgICAgdG90YWwgPSAwXG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgd2hpbGUgdG90YWwgXHUwMDNjIGV4cGVjdGVkOlxuJiM0MzsgICAgICAgICAgICBkYXRhID0gcy5yZWN2KG1pbig2NTUzNiwgZXhwZWN0ZWQgLSB0b3RhbCkpXG4mIzQzOyAgICAgICAgICAgIGlmIG5vdCBkYXRhOlxuJiM0MzsgICAgICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgICAgICAgICAgdG90YWwgJiM0Mzs9IGxlbihkYXRhKVxuJiM0MzsgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OlxuJiM0MzsgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiYjNDM7ICAgICAgICAgICAgZlwmIzM0O1RpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgZlwmIzM0OyhyZXNwb25kZXIgbWF5IGhhdmUgZmFpbGVkIHRvIHNlbmQpXCYjMzQ7KVxuJiM0MzsgICAgaWYgdG90YWwgXHUwMDNjIGV4cGVjdGVkOlxuJiM0MzsgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbiYjNDM7ICAgICAgICAgICAgZlwmIzM0O1Nob3J0IHJlYWQ6IGdvdCB7dG90YWx9L3tleHBlY3RlZH0gYnl0ZXMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgIGZcJiMzNDsocmVzcG9uZGVyIGNvbm5lY3Rpb24gY2xvc2VkIGVhcmx5KVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiB0b3RhbFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDsgVGVzdCBQU1AgZGF0YSB0cmFuc2ZlciB3aXRoIEhXIEdSTyBlbmFibGVkIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpXG4mIzQzOyAgICAjIFZlcnNpb24gMCBpcyByZXF1aXJlZCBieSBzcGVjLCBkb24mIzM5O3QgbGV0IGl0IHNraXBcbiYjNDM7ICAgIGlmIHZlcnNpb246XG4mIzQzOyAgICAgICAgbmFtZSA9IGNmZy5wc3BubC5jb25zdHNbXCYjMzQ7dmVyc2lvblwmIzM0O10uZW50cmllc19ieV92YWxbdmVyc2lvbl0ubmFtZVxuJiM0MzsgICAgICAgIGlmIG5hbWUgbm90IGluIGNmZy5wc3BfaW5mb1smIzM5O3BzcC12ZXJzaW9ucy1jYXAmIzM5O106XG4mIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7UFNQIHZlcnNpb24gbm90IHN1cHBvcnRlZFwmIzM0OywgbmFtZSlcbiYjNDM7XG4mIzQzOyAgICBfZW5hYmxlX2xvY2FsX2h3X2dybyhjZmcpXG4mIzQzO1xuJiM0MzsgICAgcyA9IF9tYWtlX3BzcF9jb25uKGNmZywgdmVyc2lvbiwgaXB2ZXIpXG4mIzQzOyAgICB0cnk6XG4mIzQzOyAgICAgICAgcnhfYXNzb2MgPSBjZmcucHNwbmwucnhfYXNzb2Moe1wmIzM0O3ZlcnNpb25cJiMzNDs6IHZlcnNpb24sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtkZXYtaWRcJiMzNDs6IGNmZy5wc3BfZGV2X2lkLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG4mIzQzOyAgICAgICAgcnggPSByeF9hc3NvY1smIzM5O3J4LWtleSYjMzk7XVxuJiM0MzsgICAgICAgIHR4ID0gX3NwaV94Y2hnKHMsIHJ4KVxuJiM0MzsgICAgICAgIGNmZy5wc3BubC50eF9hc3NvYyh7XCYjMzQ7ZGV2LWlkXCYjMzQ7OiBjZmcucHNwX2Rldl9pZCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDt2ZXJzaW9uXCYjMzQ7OiB2ZXJzaW9uLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3R4LWtleVwmIzM0OzogdHgsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG4mIzQzO1xuJiM0MzsgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1wmIzM0O2lmaW5kZXhcJiMzNDs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVswXVxuJiM0MzsgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgICAgIGlmIGUuZXJyb3IgPT0gZXJybm8uRU9QTk9UU1VQUDpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7cXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwmIzM0OykgZnJvbSBlXG4mIzQzOyAgICAgICAgICAgIHJhaXNlXG4mIzQzOyAgICAgICAgaWYgKCYjMzk7cngtaHctZ3JvLXBhY2tldHMmIzM5OyBub3QgaW4gYmVmb3JlIG9yXG4mIzQzOyAgICAgICAgICAgICYjMzk7cngtaHctZ3JvLXdpcmUtcGFja2V0cyYjMzk7IG5vdCBpbiBiZWZvcmUpOlxuJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O3J4LWh3LWdyby1wYWNrZXRzIGNvdW50ZXIgbm90IGF2YWlsYWJsZVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgIyBSZW1vdGUgc2VuZHMgZGF0YSBpbiA4S0IgY2h1bmtzOyBHU08gb24gcmVtb3RlIFRYIHNlZ21lbnRzIHRoZW0sXG4mIzQzOyAgICAgICAgIyBIVyBHUk8gcmVhc3NlbWJsZXMgb24gbG9jYWwgUlhcbiYjNDM7ICAgICAgICBkYXRhX2xlbiA9IDEwICogNjU1MzZcbiYjNDM7ICAgICAgICBfcmVtb3RlX3NlbmQoY2ZnLCBkYXRhX2xlbilcbiYjNDM7ICAgICAgICByZWN2X2xlbiA9IF9yZWN2X2FsbChzLCBkYXRhX2xlbilcbiYjNDM7ICAgICAgICBrc2Z0X2VxKHJlY3ZfbGVuLCBkYXRhX2xlbilcbiYjNDM7XG4mIzQzOyAgICAgICAgY2ZnLndhaXRfaHdfc3RhdHNfc2V0dGxlKClcbiYjNDM7ICAgICAgICBhZnRlciA9IGNmZy5uZXRubC5xc3RhdHNfZ2V0KHtcJiMzNDtpZmluZGV4XCYjMzQ7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlbMF1cbiYjNDM7ICAgICAgICBrc2Z0X2d0KGFmdGVyWyYjMzk7cngtaHctZ3JvLXBhY2tldHMmIzM5O10sXG4mIzQzOyAgICAgICAgICAgICAgICBiZWZvcmVbJiMzOTtyeC1ody1ncm8tcGFja2V0cyYjMzk7XSlcbiYjNDM7ICAgICAgICBrc2Z0X2d0KGFmdGVyWyYjMzk7cngtaHctZ3JvLXdpcmUtcGFja2V0cyYjMzk7XSxcbiYjNDM7ICAgICAgICAgICAgICAgIGJlZm9yZVsmIzM5O3J4LWh3LWdyby13aXJlLXBhY2tldHMmIzM5O10pXG4mIzQzOyAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgIF9jbG9zZV9wc3BfY29ubihjZmcsIHMpXG4mIzQzO1xuJiM0MztAa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKSlcbiYjNDM7ZGVmIGRhdGFfaHdfZ3JvKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IFRlc3QgUFNQIGRhdGEgdHJhbnNmZXIgd2l0aCBIVyBHUk8gZW5hYmxlZCBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuJiM0MzsgICAgX2RhdGFfaHdfZ3JvKGNmZywgdmVyc2lvbiwgaXB2ZXIpXG4mIzQzO1xuIFxuIGRlZiBfZ2V0X2lwX3ZhcmlhbnRzKCk6XG4gICAgIGZvciBpcHYgaW4gKFwmIzM0OzRcJiMzNDssIFwmIzM0OzZcJiMzNDspOlxuQEAgLTkzNyw3ICYjNDM7MTA1MCw2IEBAIGRlZiBfc2V0dXBfcHNwX2F0dHJpYnV0ZXMoY2ZnKTpcbiAgICAgY2ZnLnBzcF9kZXZfcGVlcl9uc2lkID0gX2dldF9uc2lkKGNmZy5uZXRucy5uYW1lKVxuIFxuIFxuLVxuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiBcJiMzNDtcJiMzNDtcJiMzNDtcbiBcbkBAIC05NTQsNiAmIzQzOzEwNjYsNyBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiBcbiAgICAgd2l0aCBlbnYgYXMgY2ZnOlxuICAgICAgICAgY2ZnLnBzcG5sID0gUFNQRmFtaWx5KClcbiYjNDM7ICAgICAgICBjZmcubmV0bmwgPSBOZXRkZXZGYW1pbHkoKVxuIFxuICAgICAgICAgaWYgaGFzX2NvbnQ6XG4gICAgICAgICAgICAgX3NldHVwX3BzcF9hdHRyaWJ1dGVzKGNmZylcbkBAIC05NzMsNyAmIzQzOzEwODYsNyBAQCBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fcG9ydCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xKVxuIFxuLSAgICAgICAgICAgICAgICBjYXNlcyA9IFtkYXRhX2Jhc2ljX3NlbmQsIGRhdGFfbXNzX2FkanVzdF1cbiYjNDM7ICAgICAgICAgICAgICAgIGNhc2VzID0gW2RhdGFfYmFzaWNfc2VuZCwgZGF0YV9od19ncm8sIGRhdGFfbXNzX2FkanVzdF1cbiBcbiAgICAgICAgICAgICAgICAgaWYgaGFzX2NvbnQ6XG4gICAgICAgICAgICAgICAgICAgICBjYXNlcyAmIzQzOz0gW1xuQEAgLTk5MCw3ICYjNDM7MTEwMyw3IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlX3BmeD17XCYjMzQ7ZGV2X1wmIzM0OywgXCYjMzQ7ZGF0YV9cJiMzNDssIFwmIzM0O2Fzc29jX1wmIzM0OywgXCYjMzQ7cmVtb3ZhbF9cJiMzNDt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXG4gXG4tICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiXCYjMzQ7ZXhpdFxcMFwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiXCYjMzQ7ZXhpdFxcMFwmIzM0OylcbiAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5jbG9zZSgpXG4gICAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICAgIGlmIHNydiBhbmQgKHNydi5zdGRvdXQgb3Igc3J2LnN0ZGVycik6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jXG5pbmRleCBhMjZlNzYyOGJiYjEzLi45YTY3NWJmNDQ5ZjVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmNcbkBAIC0xLDUgJiM0MzsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3BvbGwuaFx1MDAzZVxuQEAgLTExOCw2ICYjNDM7MTE5LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfc3RyKGludCBzb2NrLCBpbnQgdmFsdWUpXG4gXHRzZW5kKHNvY2ssIGJ1ZiwgcmV0ICYjNDM7IDEsIE1TR19XQUlUQUxMKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc2VuZF9kYXRhKGludCBzb2NrLCBzaXplX3QgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBzYnVmWzgxOTJdID0gezB9O1xuJiM0MztcdHNzaXplX3Qgc2VudDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGxlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0c2l6ZV90IGNodW5rID0gbGVuO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjaHVuayBcdTAwM2Ugc2l6ZW9mKHNidWYpKVxuJiM0MztcdFx0XHRjaHVuayA9IHNpemVvZihzYnVmKTtcbiYjNDM7XG4mIzQzO1x0XHRzZW50ID0gc2VuZChzb2NrLCBzYnVmLCBjaHVuaywgTVNHX05PU0lHTkFMKTtcbiYjNDM7XHRcdGlmIChzZW50IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyA9PSBFSU5UUilcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0VSUjogJXM6ICVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoc2VudCA9PSAwKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtFUlI6ICVzOiBwZWVyIGNsb3NlZFxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRsZW4gLT0gc2VudDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcbiBcdCAgICBpbnQgc2VydmVyX3NvY2ssIGludCBjb21tX3NvY2spXG5AQCAtMTg1LDIyICYjNDM7MjE0LDIyIEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHRvZmYgJiM0Mzs9IG47XG4tXHRcdFx0biA9IG9mZjtcbiBcbiAjZGVmaW5lIF9fY29uc3VtZShzeilcdFx0XHRcdFx0XHRcXFxuIFx0XHQoe1x0XHRcdFx0XHRcdFxcXG4tXHRcdFx0aWYgKG4gPT0gKHN6KSkge1x0XHRcdFxcXG4tXHRcdFx0XHRvZmYgPSAwO1x0XHRcdFxcXG4tXHRcdFx0fSBlbHNlIHtcdFx0XHRcdFxcXG4tXHRcdFx0XHRvZmYgLT0gKHN6KTtcdFx0XHRcXFxuLVx0XHRcdFx0bWVtbW92ZShidWYsIFx1MDAyNmJ1Zlsoc3opXSwgb2ZmKTtcdFxcXG4tXHRcdFx0fVx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRvZmYgLT0gKHN6KTtcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdG1lbW1vdmUoYnVmLCBcdTAwMjZidWZbKHN6KV0sIG9mZik7XHRcdFxcXG4gXHRcdH0pXG4gXG4tI2RlZmluZSBjbWQoX25hbWUpXHRcdFx0XHRcdFx0XHRcXFxuJiM0MzsvKiBPbmx5IG1hdGNoIG9uY2UgdGhlIGNvbW1hbmQgYW5kIGl0cyBfZXh0cmFfc3ogYnl0ZSBwYXlsb2FkIGFyZSBib3RoXG4mIzQzOyAqIGJ1ZmZlcmVkLCBvdGhlcndpc2UgYSBzcGxpdCByZWFkIHdvdWxkIGNvbnN1bWUgdGhlIG5hbWUgYW5kIHN0cmFuZFxuJiM0MzsgKiB0aGUgcGF5bG9hZCwgZGVzeW5jaHJvbml6aW5nIHRoZSBwYXJzZXIgZm9yIGdvb2QuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIGNtZChfbmFtZSwgX2V4dHJhX3N6KVx0XHRcdFx0XHRcdFxcXG4gXHRcdCh7XHRcdFx0XHRcdFx0XHRcXFxuIFx0XHRcdHNzaXplX3Qgc3ogPSBzaXplb2YoX25hbWUpO1x0XHRcdFxcXG4tXHRcdFx0Ym9vbCBtYXRjaCA9IG4gXHUwMDNlPSBzeiBcdTAwMjZcdTAwMjZcdCFtZW1jbXAoYnVmLCBfbmFtZSwgc3opOyBcXFxuJiM0MztcdFx0XHRib29sIG1hdGNoID0gb2ZmIFx1MDAzZT0gc3ogJiM0MzsgKF9leHRyYV9zeikgXHUwMDI2XHUwMDI2XHRcdFxcXG4mIzQzO1x0XHRcdFx0IW1lbWNtcChidWYsIF9uYW1lLCBzeik7XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdFx0XHRpZiAobWF0Y2gpIHtcdFx0XHRcdFx0XFxcbiBcdFx0XHRcdGRiZyhcJiMzNDtjb21tYW5kOiBcJiMzNDsgX25hbWUgXCYjMzQ7XFxuXCYjMzQ7KTtcdFx0XFxcbkBAIC0yMTMsMTAgJiM0MzsyNDIsMTAgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0ZG8ge1xuIFx0XHRcdFx0Y29uc3VtZWQgPSBmYWxzZTtcbiBcbi1cdFx0XHRcdGlmIChjbWQoXCYjMzQ7cmVhZCBsZW5cJiMzNDspKVxuJiM0MztcdFx0XHRcdGlmIChjbWQoXCYjMzQ7cmVhZCBsZW5cJiMzNDssIDApKVxuIFx0XHRcdFx0XHRzZW5kX3N0cihjb21tX3NvY2ssIGRhdGFfcmVhZCk7XG4gXG4tXHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgZWNob1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgZWNob1wmIzM0OywgMCkpIHtcbiBcdFx0XHRcdFx0aWYgKGRhdGFfc29jayBcdTAwM2U9IDApXG4gXHRcdFx0XHRcdFx0c2VuZChkYXRhX3NvY2ssIFwmIzM0O2VjaG9cJiMzNDssIDUsXG4gXHRcdFx0XHRcdFx0ICAgICBNU0dfV0FJVEFMTCk7XG5AQCAtMjI0LDcgJiM0MzsyNTMsMjcgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dBUk46IGVjaG8gYnV0IG5vIGRhdGEgc29ja1xcblwmIzM0Oyk7XG4gXHRcdFx0XHRcdHNlbmRfYWNrKGNvbW1fc29jayk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgY2xvc2VcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGNtZChcJiMzNDtkYXRhIHNlbmRcJiMzNDssIDQpKSB7XG4mIzQzO1x0XHRcdFx0XHRfX3UzMiBsZW47XG4mIzQzO1xuJiM0MztcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNmxlbiwgYnVmLCBzaXplb2YobGVuKSk7XG4mIzQzO1x0XHRcdFx0XHRfX2NvbnN1bWUoc2l6ZW9mKGxlbikpO1xuJiM0MztcdFx0XHRcdFx0bGVuID0gbnRvaGwobGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0XHRpZiAoZGF0YV9zb2NrIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XHRcdFx0XHRcdFwmIzM0O1dBUk46IHNlbmQgYnV0IG5vIGRhdGEgc29ja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0XHRcdHNlbmRfZXJyKGNvbW1fc29jayk7XG4mIzQzO1x0XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHRcdHNlbmRfYWNrKGNvbW1fc29jayk7XG4mIzQzO1x0XHRcdFx0XHRpZiAoc2VuZF9kYXRhKGRhdGFfc29jaywgbGVuKSlcbiYjNDM7XHRcdFx0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XCYjMzQ7V0FSTjogc2VuZCBpbmNvbXBsZXRlIGZvciAldSBieXRlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHRsZW4pO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRpZiAoY21kKFwmIzM0O2RhdGEgY2xvc2VcJiMzNDssIDApKSB7XG4gXHRcdFx0XHRcdGlmIChkYXRhX3NvY2sgXHUwMDNlPSAwKSB7XG4gXHRcdFx0XHRcdFx0Y2xvc2UoZGF0YV9zb2NrKTtcbiBcdFx0XHRcdFx0XHRkYXRhX3NvY2sgPSAtMTtcbkBAIC0yMzMsMjYgJiM0MzsyODIsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0XHRcdFx0cmFjZV9jbG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCYjMzQ7Y29ubiBwc3BcJiMzNDspKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGNtZChcJiMzNDtjb25uIHBzcFwmIzM0OywgMikpIHtcbiBcdFx0XHRcdFx0aWYgKGFjY2VwdF9jZmcgIT0gQUNDRVBUX0NGR19OT05FKVxuIFx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXQVJOOiBvbGQgY29ubiBjb25maWcgc3RpbGwgc2V0IVxcblwmIzM0Oyk7XG4gXHRcdFx0XHRcdGFjY2VwdF9jZmcgPSBBQ0NFUFRfQ0ZHX1BTUDtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdFx0LyogbmV4dCB0d28gYnl0ZXMgYXJlIHZlcnNpb25zICovXG4tXHRcdFx0XHRcdGlmIChvZmYgXHUwMDNlPSAyKSB7XG4tXHRcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNnBzcF92ZXJzLCBidWYsIDIpO1xuLVx0XHRcdFx0XHRcdF9fY29uc3VtZSgyKTtcbi1cdFx0XHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTjogc2hvcnQgY29ubiBwc3AgY29tbWFuZCFcXG5cJiMzNDspO1xuLVx0XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0XHRtZW1jcHkoXHUwMDI2cHNwX3ZlcnMsIGJ1ZiwgMik7XG4mIzQzO1x0XHRcdFx0XHRfX2NvbnN1bWUoMik7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRpZiAoY21kKFwmIzM0O2Nvbm4gY2xyXCYjMzQ7KSkge1xuJiM0MztcdFx0XHRcdGlmIChjbWQoXCYjMzQ7Y29ubiBjbHJcJiMzNDssIDApKSB7XG4gXHRcdFx0XHRcdGlmIChhY2NlcHRfY2ZnICE9IEFDQ0VQVF9DRkdfTk9ORSlcbiBcdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTjogb2xkIGNvbm4gY29uZmlnIHN0aWxsIHNldCFcXG5cJiMzNDspO1xuIFx0XHRcdFx0XHRhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCYjMzQ7ZXhpdFwmIzM0OykpXG4mIzQzO1x0XHRcdFx0aWYgKGNtZChcJiMzNDtleGl0XCYjMzQ7LCAwKSlcbiBcdFx0XHRcdFx0c2hvdWxkX3F1aXQgPSB0cnVlO1xuICN1bmRlZiBjbWRcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwOTozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTQ0ZGE0MTE5ODgyNzgwM2NjNjBiM2QwZDZlNWNhMWM4MGNhNGU5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDk6MzQ6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oCmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oCkBAIC05OCw2ICYjNDM7OTgsNyBAQCBlbnVtIHsKICNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUCkKIAlNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgJiM0MzsgMSwKIAlNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMLAomIzQzOwlNTFg1RV9BQ0NFTF9GU19QU1BfREVDQVBfRlRfTEVWRUwsCiAJTUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaAppbmRleCAzZjIxMmU0NmZjMmY5Li5hMGJiMTljYzk1NmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaApAQCAtMjE4LDYgJiM0MzsyMTgsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLAogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttZGV2LSZndDtvZmZsb2FkX2Jsb2NrLmxvY2spOwomIzQzOwlpZiAobWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpCiYjNDM7CQlyZXQgPSAtRUJVU1k7CiYjNDM7CWVsc2UKJiM0MzsJCW1kZXYtJmd0O29mZmxvYWRfYmxvY2subnVtX3RjJiM0MzsmIzQzOzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldikKJiM0Mzt7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttZGV2LSZndDtvZmZsb2FkX2Jsb2NrLmxvY2spOwomIzQzOwlpZiAoIVdBUk5fT05fT05DRSghbWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fdGMpKQomIzQzOwkJbWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fdGMtLTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXJldHVybiBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7CkBAIC0yMjksNiAmIzQzOzI1MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAltbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19NTFg1X0VOX1BTUAomIzQzOwlyZXR1cm4gbWx4NWVfcHNwX3VwZGF0ZV9yeChwcml2KTsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gMDsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3R4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXJldHVybiBtbHg1ZV9rdGxzX2luaXRfdHgocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ0MjJmOTZmZmNlZDAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaApAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIExpbnV4LU9wZW5JQiAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiwgTlZJRElBIENPUlBPUkFUSU9OICZhbXA7IEFGRklMSUFURVMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX01MWDVFX0ZMT1dfVEFHX0hfXwomIzQzOyNkZWZpbmUgX19NTFg1RV9GTE9XX1RBR19IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWx4NS9kZXZpY2UuaCZndDsKJiM0MzsKJiM0MzsvKiBVbmlmaWVkIGFjY2VsIGZsb3dfdGFnIGxheW91dCBpbiBDUUUgc29wX2Ryb3BfcXBuIFsyMzowXToKJiM0MzsgKgomIzQzOyAqICAgWzIzOjIxXSA9IHByb3RvY29sIElEICgzIGJpdHMpOgomIzQzOyAqICAgICAgICAgICAgICAwID0gbm9uZSAoZGVmYXVsdCkKJiM0MzsgKiAgICAgICAgICAgICAgMSA9IElQc2VjCiYjNDM7ICogICAgICAgICAgICAgIDIgPSBNQUNzZWMKJiM0MzsgKiAgICAgICAgICAgICAgMyA9IFBTUCAoSFcgZGVjcnlwdGVkLCBQU1AgaGVhZGVyIHByZXNlbnQpCiYjNDM7ICogICAgICAgICAgICAgIDQgPSBQU1AgZGVjYXAgKEhXIGRlY3J5cHRlZCAmYW1wOyBkZWNhcHN1bGF0ZWQpCiYjNDM7ICogICAgICAgICAgICAgIDUtNyA9IHJlc2VydmVkCiYjNDM7ICogICBbMjA6MTddID0gUFNQIHZlcnNpb24gKDQgYml0cywgdmFsaWQgd2hlbiBwcm90byA9PSBQU1AgZGVjYXApCiYjNDM7ICogICAxNiAgICAgID0gcmVzZXJ2ZWQKJiM0MzsgKiAgIFsxNTowXSAgPSB1c2VkIGJ5IG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gVEMpLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFTSwkJR0VOTUFTSygyMywgMjEpCiYjNDM7I2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19OT05FCQkoMCAmbHQ7Jmx0OyAyMSkKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDCSgxICZsdDsmbHQ7IDIxKQomIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDCSgyICZsdDsmbHQ7IDIxKQomIzQzOyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQCQkoMyAmbHQ7Jmx0OyAyMSkKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUAkoNCAmbHQ7Jmx0OyAyMSkKJiM0MzsKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQJMTcKJiM0MzsjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSwkoMHhGICZsdDsmbHQ7IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgbWx4NWVfYWNjZWxfZmxvd190YWcoc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBiZTMyX3RvX2NwdShjcWUtJmd0O3NvcF9kcm9wX3FwbikgJmFtcDsgMHhGRkZGRkY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWx4NWVfYWNjZWxfZmxvd190YWcoY3FlKSAmYW1wOyBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYgLyogX19NTFg1RV9GTE9XX1RBR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmMKaW5kZXggMzI5NjA4YzU5MzEzYi4uMDgxY2IyZjMxYmUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmMKQEAgLTQsNiAmIzQzOzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtlbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vZnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL2Zsb3dfdGFnLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtlc3dpdGNoLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpcHNlYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZnNfY29yZS5oJiMzNDsKQEAgLTE4OSw3ICYjNDM7MTkxLDcgQEAgc3RhdGljIHZvaWQgaXBzZWNfcnhfcnVsZV9hZGRfbWF0Y2hfb2JqKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnksCiAJCQkJIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzIpOwogCQlNTFg1X1NFVChmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtJmd0O21hdGNoX3ZhbHVlLAogCQkJIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzIsCi0JCQkgc2FfZW50cnktJmd0O2lwc2VjX29ial9pZCB8IEJJVCgzMSkpOwomIzQzOwkJCSBzYV9lbnRyeS0mZ3Q7aXBzZWNfb2JqX2lkKTsKIAogCQlzcGVjLSZndDttYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjsKIAl9CkBAIC0yMDY1LDcgJiM0MzsyMDY3LDcgQEAgc3RhdGljIGludCByeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KQogCWlmICghYXR0cnMtJmd0O2Ryb3ApIHsKIAkJaWYgKHJ4ICE9IGlwc2VjLSZndDtyeF9lc3cpCiAJCQllcnIgPSBzZXR1cF9tb2RpZnlfaGVhZGVyKGlwc2VjLCBhdHRycy0mZ3Q7dHlwZSwKLQkJCQkJCSAgc2FfZW50cnktJmd0O2lwc2VjX29ial9pZCB8IEJJVCgzMSksCiYjNDM7CQkJCQkJICBzYV9lbnRyeS0mZ3Q7aXBzZWNfb2JqX2lkLAogCQkJCQkJICBYRlJNX0RFVl9PRkZMT0FEX0lOLCAmYW1wO2Zsb3dfYWN0KTsKIAkJZWxzZQogCQkJZXJyID0gbWx4NV9lc3dfaXBzZWNfcnhfc2V0dXBfbW9kaWZ5X2hlYWRlcihzYV9lbnRyeSwgJmFtcDtmbG93X2FjdCk7CkBAIC0yMDk4LDYgJiM0MzsyMTAwLDEwIEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSkKIAkJZmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QOwogCWVsc2UKIAkJZmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDsKJiM0MzsJaWYgKCFhdHRycy0mZ3Q7ZHJvcCAmYW1wOyZhbXA7IHJ4ICE9IGlwc2VjLSZndDtyeF9lc3cpIHsKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRzsKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDOwomIzQzOwl9CiAJZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTsKIAlkZXN0WzBdLmZ0ID0gcngtJmd0O2Z0LnN0YXR1czsKIAlkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSOwpAQCAtMjU3NCw1MyAmIzQzOzI1ODAsMTkgQEAgdm9pZCBtbHg1ZV9hY2NlbF9pcHNlY19mc19yZWFkX3N0YXRzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LCB2b2lkICppcHNlY19zdGF0cykKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENICi1zdGF0aWMgaW50IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpCi17Ci0Jc3RydWN0IG1seDVfZXN3aXRjaCAqZXN3ID0gbWRldi0mZ3Q7cHJpdi5lc3dpdGNoOwotCWludCBlcnIgPSAwOwotCi0JaWYgKGVzdykgewotCQllcnIgPSBtbHg1X2Vzd19sb2NrKGVzdyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChtZGV2LSZndDtudW1fYmxvY2tfaXBzZWMpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQltZGV2LSZndDtudW1fYmxvY2tfdGMmIzQzOyYjNDM7OwotCi11bmxvY2s6Ci0JaWYgKGVzdykKLQkJbWx4NV9lc3dfdW5sb2NrKGVzdyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldikKLXsKLQlpZiAobWRldi0mZ3Q7bnVtX2Jsb2NrX2lwc2VjKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbWRldi0mZ3Q7bnVtX2Jsb2NrX3RjJiM0MzsmIzQzOzsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpCiYjNDM7c3RhdGljIGJvb2wgYWNjZWxfaXBzZWNfc2hvdWxkX2Jsb2NrX3RjKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpCiB7Ci0JbWRldi0mZ3Q7bnVtX2Jsb2NrX3RjLS07CiYjNDM7CXJldHVybiBzYV9lbnRyeS0mZ3Q7YXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCB8fAomIzQzOwkJc2FfZW50cnktJmd0O2F0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOOwogfQogCiBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSkKIHsKJiM0MzsJYm9vbCBibG9ja190YyA9IGFjY2VsX2lwc2VjX3Nob3VsZF9ibG9ja190YyhzYV9lbnRyeSk7CiAJaW50IGVycjsKIAotCWlmIChzYV9lbnRyeS0mZ3Q7YXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkgewotCQllcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiYjNDM7CWlmIChibG9ja190YykgewomIzQzOwkJZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChzYV9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yNjM2LDggJiM0MzsyNjA4LDggQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpCiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JaWYgKHNhX2VudHJ5LSZndDthdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKQotCQltbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktJmd0O2lwc2VjLSZndDttZGV2KTsKJiM0MzsJaWYgKGJsb2NrX3RjKQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjY1MSw4ICYjNDM7MjYyMyw4IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSkKIAlpZiAoaXBzZWNfcnVsZS0mZ3Q7cGt0X3JlZm9ybWF0KQogCQltbHg1X3BhY2tldF9yZWZvcm1hdF9kZWFsbG9jKG1kZXYsIGlwc2VjX3J1bGUtJmd0O3BrdF9yZWZvcm1hdCk7CiAKLQlpZiAoc2FfZW50cnktJmd0O2F0dHJzLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpCi0JCW1seDVlX2lwc2VjX3VuYmxvY2tfdGNfb2ZmbG9hZChtZGV2KTsKJiM0MzsJaWYgKGFjY2VsX2lwc2VjX3Nob3VsZF9ibG9ja190YyhzYV9lbnRyeSkpCiYjNDM7CQltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWRldik7CiAKIAlpZiAoc2FfZW50cnktJmd0O2F0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX09VVCkgewogCQl0eF9mdF9wdXQoc2FfZW50cnktJmd0O2lwc2VjLCBzYV9lbnRyeS0mZ3Q7YXR0cnMudHlwZSk7CkBAIC0yNjg2LDcgJiM0MzsyNjU4LDcgQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KQogewogCWludCBlcnI7CiAKLQllcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwomIzQzOwllcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI3MDEsNyAmIzQzOzI2NzMsNyBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpCiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwomIzQzOwltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjcxMiw3ICYjNDM7MjY4NCw3IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpCiAKIAltbHg1X2RlbF9mbG93X3J1bGVzKGlwc2VjX3J1bGUtJmd0O3J1bGUpOwogCi0JbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS0mZ3Q7aXBzZWMtJmd0O21kZXYpOwomIzQzOwltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LSZndDtpcHNlYy0mZ3Q7bWRldik7CiAKIAlpZiAocG9sX2VudHJ5LSZndDthdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTikgewogCQlyeF9mdF9wdXRfcG9saWN5KHBvbF9lbnRyeS0mZ3Q7aXBzZWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaAppbmRleCA0NWIwZDE5ZTczNWNiLi42ZGVhNTk3OGE0MGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmgKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2VuLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtlbi90eHJ4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAKLS8qIEJpdDMxOiBJUHNlYyBtYXJrZXIsIEJpdDMwOiByZXNlcnZlZCwgQml0MjktMjQ6IElQc2VjIHN5bmRyb21lLCBCaXQyMy0wOiBJUHNlYyBvYmogaWQgKi8KLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpICZndDsmZ3Q7IDMwKSAmYW1wOyAweDMpID09IDB4MikKLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9TWU5EUk9NKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgJmd0OyZndDsgMjQpICZhbXA7IEdFTk1BU0soNSwgMCkpCiYjNDM7LyogSVBzZWMgb2JqIGlkIGluIGZ0X21ldGFkYXRhIGJpdHNbMjM6MF0gKi8KICNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSAmYW1wOyBHRU5NQVNLKDIzLCAwKSkKIAogc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0YXRlIHsKQEAgLTc0LDcgJiM0Mzs3Myw5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX2lwc2VjX3R4X2lkc19sZW4oc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1X2lwc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIHsKLQlyZXR1cm4gTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIoYmUzMl90b19jcHUoY3FlLSZndDtmdF9tZXRhZGF0YSkpOwomIzQzOwl1MzIgcHJvdG8gPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9pcHNlY19lc2VnX21ldGEoc3RydWN0IG1seDVfd3FlX2V0aF9zZWcgKmVzZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmMKaW5kZXggZGFmZjUzYmE3ZDA5Zi4uYWE3YTI4OTU0ODYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICYjMzQ7ZW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xpYi9hc28uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xpYi9jcnlwdG8uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9hY2NlbC9lbl9hY2NlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvbWFjc2VjLmgmIzM0OwogCiAjZGVmaW5lIE1MWDVfTUFDU0VDX0VQTl9TQ09QRV9NSUQgMHg4MDAwMDAwMEwKQEAgLTMyNCw2ICYjNDM7MzI1LDggQEAgc3RhdGljIHZvaWQgbWx4NWVfbWFjc2VjX2NsZWFudXBfc2FfZnMoc3RydWN0IG1seDVlX21hY3NlYyAqbWFjc2VjLAogCW1seDVfbWFjc2VjX2ZzX2RlbF9ydWxlKG1hY3NlYy0mZ3Q7bWRldi0mZ3Q7bWFjc2VjX2ZzLCBzYS0mZ3Q7bWFjc2VjX3J1bGUsIGFjdGlvbiwgbmV0ZGV2LAogCQkJCWZzX2lkKTsKIAlzYS0mZ3Q7bWFjc2VjX3J1bGUgPSBOVUxMOwomIzQzOwlpZiAoIWlzX3R4KQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1hY3NlYy0mZ3Q7bWRldik7CiB9CiAKIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYywKQEAgLTM0Myw2ICYjNDM7MzQ2LDcgQEAgc3RhdGljIGludCBtbHg1ZV9tYWNzZWNfaW5pdF9zYV9mcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCwKIAljb25zdCBzdHJ1Y3QgbWFjc2VjX3R4X3NjICp0eF9zYyA9ICZhbXA7Y3R4LSZndDtzZWN5LSZndDt0eF9zYzsKIAlzdHJ1Y3QgbWx4NV9tYWNzZWNfcnVsZV9hdHRycyBydWxlX2F0dHJzOwogCXVuaW9uIG1seDVfbWFjc2VjX3J1bGUgKm1hY3NlY19ydWxlOwomIzQzOwlpbnQgZXJyID0gMDsKIAogCWlmIChpc190eCAmYW1wOyZhbXA7IHR4X3NjLSZndDtlbmNvZGluZ19zYSAhPSBzYS0mZ3Q7YXNzb2NfbnVtKQogCQlyZXR1cm4gMDsKQEAgLTM1MywxMyAmIzQzOzM1NywyNiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhX2ZzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LAogCXJ1bGVfYXR0cnMuYWN0aW9uID0gKGlzX3R4KSA/IE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9FTkNSWVBUIDoKIAkJCQkgICAgICBNTFg1X0FDQ0VMX01BQ1NFQ19BQ1RJT05fREVDUllQVDsKIAomIzQzOwlpZiAoIWlzX3R4KSB7CiYjNDM7CQllcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHByaXYtJmd0O21kZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiAJbWFjc2VjX3J1bGUgPSBtbHg1X21hY3NlY19mc19hZGRfcnVsZShtYWNzZWNfZnMsIGN0eCwgJmFtcDtydWxlX2F0dHJzLCBmc19pZCk7Ci0JaWYgKCFtYWNzZWNfcnVsZSkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmICghbWFjc2VjX3J1bGUpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dF91bmJsb2NrX3RjOwomIzQzOwl9CiAKIAlzYS0mZ3Q7bWFjc2VjX3J1bGUgPSBtYWNzZWNfcnVsZTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dF91bmJsb2NrX3RjOgomIzQzOwlpZiAoIWlzX3R4KQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHByaXYtJmd0O21kZXYpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LApAQCAtNzM1LDEyICYjNDM7NzUyLDEyIEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2FkZF9yeHNjKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4KQogCSAqIGEgbm9uLU5VTEwgbWRfZHN0IHdpdGggdW5pbml0aWFsaXNlZCBjb250ZW50cy4KIAkgKi8KIAllcnIgPSB4YV9hbGxvYygmYW1wO21hY3NlYy0mZ3Q7c2NfeGFycmF5LCAmYW1wO3NjX3hhcnJheV9lbGVtZW50LSZndDtmc19pZCwgc2NfeGFycmF5X2VsZW1lbnQsCi0JCSAgICAgICBYQV9MSU1JVCgxLCBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWCksIEdGUF9LRVJORUwpOwomIzQzOwkJICAgICAgIFhBX0xJTUlUKDEsIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCksIEdGUF9LRVJORUwpOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciA9PSAtRUJVU1kpCiAJCQluZXRkZXZfZXJyKGN0eC0mZ3Q7bmV0ZGV2LAogCQkJCSAgICYjMzQ7TUFDc2VjIG9mZmxvYWQ6IHVuYWJsZSB0byBjcmVhdGUgZW50cnkgZm9yIFJYIFNDICglZCBSeCBTQ3MgYWxyZWFkeSBhbGxvY2F0ZWQpXG4mIzM0OywKLQkJCQkgICBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWCk7CiYjNDM7CQkJCSAgIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCk7CiAJCWdvdG8gZGVzdHJveV9tZF9kc3Q7CiAJfQogCkBAIC0xMTM3LDcgJiM0MzsxMTU0LDEyIEBAIHN0YXRpYyBpbnQgbWFjc2VjX3VwZF9zZWN5X2h3X2FkZHJlc3Moc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsCiAJc3RydWN0IG1seDVlX21hY3NlY19zYSAqcnhfc2E7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAlpbnQgaSwgZXJyID0gMDsKJiM0MzsJYm9vbCBibG9ja190YzsKIAomIzQzOwkvKiBCZXN0LWVmZm9ydCBUQyBibG9jayBhY3Jvc3MgdGhlIG9wZXJhdGlvbiwgdG8gcHJldmVudCBhIG1pc3RpbWVkIFRDCiYjNDM7CSAqIGZpbHRlciBhZGQgZnJvbSBwcmV2ZW50aW5nIHRoZSAybmQgbG9vcCBmcm9tIGhhcHBlbmluZy4KJiM0MzsJICovCiYjNDM7CWJsb2NrX3RjID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwcml2LSZndDttZGV2KSA9PSAwOwogCiAJbGlzdCA9ICZhbXA7bWFjc2VjX2RldmljZS0mZ3Q7bWFjc2VjX3J4X3NjX2xpc3RfaGVhZDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfc2MsIHRtcCwgbGlzdCwgcnhfc2NfbGlzdF9lbGVtZW50KSB7CkBAIC0xMTY4LDYgJiM0MzsxMTkwLDggQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCwKIAogCW1lbWNweShtYWNzZWNfZGV2aWNlLSZndDtkZXZfYWRkciwgZGV2LSZndDtkZXZfYWRkciwgZGV2LSZndDthZGRyX2xlbik7CiBvdXQ6CiYjNDM7CWlmIChibG9ja190YykKJiM0MzsJCW1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwcml2LSZndDttZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzAwLDcgJiM0MzsxNzI0LDcgQEAgdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJaWYgKCFtYWNzZWMpCiAJCXJldHVybjsKIAotCWZzX2lkID0gTUxYNV9NQUNTRUNfUlhfTUVUQURBVF9IQU5ETEUobWFjc2VjX21ldGFfZGF0YSk7CiYjNDM7CWZzX2lkID0gTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1hY3NlY19tZXRhX2RhdGEpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXNjX3hhcnJheV9lbGVtZW50ID0geGFfbG9hZCgmYW1wO21hY3NlYy0mZ3Q7c2NfeGFycmF5LCBmc19pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmgKaW5kZXggMjdkZjcyZTIzMTA2ZC4uNTcxNjI0ZjJkYjE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuaApAQCAtOSw2ICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWx4NS9kcml2ZXIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzdF9tZXRhZGF0YS5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xpYi9tYWNzZWNfZnMuaCYjMzQ7CiAKIHN0cnVjdCBtbHg1ZV9wcml2OwpAQCAtMzEsNyAmIzQzOzMyLDkgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX21hY3NlY19za2JfaXNfb2ZmbG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIHsKLQlyZXR1cm4gTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7ZnRfbWV0YWRhdGEpKTsKJiM0MzsJdTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByb3RvID09IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQzsKIH0KIAogdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMKaW5kZXggNzNiMjMyMzc5MjYzYS4uYWQ4ZGJkOGMyZjI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYwpAQCAtNiw3ICYjNDM7Niw5IEBACiAjaW5jbHVkZSAmIzM0O21seDVfY29yZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cHNwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtsaWIvY3J5cHRvLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZW5fYWNjZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL3BzcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL3BzcF9yeHR4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtmc19jb3JlLmgmIzM0OwogCiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHsKQEAgLTIxLDYgJiM0MzsyMywxMyBAQCBlbnVtIGFjY2VsX3BzcF9zeW5kcm9tZSB7CiAJUFNQX0JBRF9UUkFJTEVSLAogfTsKIAomIzQzO3N0YXRpYyBjb25zdCB1OCBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW10gPSB7CiYjNDM7CVBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8xMjgsCiYjNDM7CVBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8yNTYsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TIEFSUkFZX1NJWkUocHNwX3N1cHBvcnRlZF92ZXJzaW9ucykKJiM0MzsKIHN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUgewogCXN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpuczsKIAlzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDsKQEAgLTQxLDcgJiM0Mzs1MCw3IEBAIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSB7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiAJc3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlOwotCXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKnJ4X21vZGlmeV9oZHI7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiB9OwogCkBAIC01Miw2ICYjNDM7NjEsMTUgQEAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVkcF9ydWxlc1tBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTsKIH07CiAKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY2FwX3RhYmxlIHsKJiM0MzsJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmRyb3BfZ3JvdXA7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiYjNDM7CXN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdCAqcmVmb3JtYXQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlW01MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TXTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVuc3VwcG9ydGVkX3J1bGU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBtbHg1ZV9wc3BfZnMgewogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2OwogCXN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyOwpAQCAtNjMsMTIgJiM0Mzs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHsKIAlzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7CiAJc3RydWN0IG1seDVfZmMgKnJ4X2Vycl9jb3VudGVyOwogCXN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjsKJiM0MzsJLyogV2hlbiBzZXQsIHN0ZWVyaW5nIGlzIGNvbmZpZ3VyZWQgdG8gZGVjYXBzdWxhdGUgUFNQIChyZW1vdmUgVURQJiM0MztQU1AKJiM0MzsJICogaGVhZGVycyBhbmQgUFNQIHRyYWlsZXIpIGFuZCBoYW5kIG9mZiB0aGUgU1BJIGluIGNxZS5mdF9tZXRhZGF0YS4KJiM0MzsJICovCiYjNDM7CWJvb2wgZGVjYXBfZW5hYmxlZDsKIAogCXN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSBkZWNyeXB0W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdOwogCXN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7CiAJc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSByeDsKIH07CiAKJiM0MztzdGF0aWMgYm9vbCBzaGFtcG9fZW5hYmxlZChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtjaGFubmVscy5wYXJhbXMucGFja2V0X21lcmdlLnR5cGUgPT0KJiM0MzsJCU1MWDVFX1BBQ0tFVF9NRVJHRV9TSEFNUE87CiYjNDM7fQomIzQzOwogLyogUFNQIFJYIGZsb3cgc3RlZXJpbmcgKi8KIHN0YXRpYyBlbnVtIG1seDVfdHJhZmZpY190eXBlcyBmc19wc3AydHQoZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpKQogewpAQCAtMTEwLDYgJiM0MzsxMzksMTUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICoqbW9kaGRyKQomIzQzO3sKJiM0MzsJaWYgKCptb2RoZHIpIHsKJiM0MzsJCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGRldiwgKm1vZGhkcik7CiYjNDM7CQkqbW9kaGRyID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LAogCQkJCQkgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cCkKIHsKQEAgLTQwMiwxNSAmIzQzOzQ0MCwxNjEgQEAgaW50IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYwomIzQzO3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKCZhbXA7ZGVjYXAtJmd0O3Vuc3VwcG9ydGVkX3J1bGUpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7IGkmIzQzOyYjNDM7KQomIzQzOwkJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtkZWNhcC0mZ3Q7cnVsZVtpXSk7CiYjNDM7CWlmIChkZWNhcC0mZ3Q7cmVmb3JtYXQpIHsKJiM0MzsJCW1seDVfcGFja2V0X3JlZm9ybWF0X2RlYWxsb2MoZnMtJmd0O21kZXYsIGRlY2FwLSZndDtyZWZvcm1hdCk7CiYjNDM7CQlkZWNhcC0mZ3Q7cmVmb3JtYXQgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtJmd0O21kZXYsICZhbXA7ZGVjYXAtJmd0O21vZGlmeV9oZHIpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKCZhbXA7ZGVjYXAtJmd0O2Ryb3BfZ3JvdXApOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9mdCgmYW1wO2RlY2FwLSZndDtmdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX2Z0ZV9wc3BfdmVyc2lvbihzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHU4IHZlcnNpb24pCiYjNDM7ewomIzQzOwl2b2lkICptaXNjX3BhcmFtc182OwomIzQzOwomIzQzOwltZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7CiYjNDM7CXNwZWMtJmd0O21hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU182OwomIzQzOwltaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfY3JpdGVyaWEsCiYjNDM7CQkJCSAgICAgbWlzY19wYXJhbWV0ZXJzXzYpOwomIzQzOwlNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uKTsKJiM0MzsJbWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtJmd0O21hdGNoX3ZhbHVlLAomIzQzOwkJCQkgICAgIG1pc2NfcGFyYW1ldGVyc182KTsKJiM0MzsJTUxYNV9TRVQoZnRlX21hdGNoX3NldF9taXNjNiwgbWlzY19wYXJhbXNfNiwgcHNwX3ZlcnNpb24sIHZlcnNpb24pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMKJiM0MztpbnQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKJiM0MzsJCQkJICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKQomIzQzO3sKJiM0MzsJdTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfcGt0X3JlZm9ybWF0X3BhcmFtcyByZWZvcm1hdF9wYXJhbXMgPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtJmd0O21kZXY7CiYjNDM7CXN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdCAqcmVmb3JtYXQ7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlOwomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiYjNDM7CWludCBpLCBlcnIgPSAwOwomIzQzOwomIzQzOwlzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTsKJiM0MzsJaWYgKCFzcGVjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBGVCAqLwomIzQzOwlmdF9hdHRyLm1heF9mdGUgPSAxICYjNDM7IE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TOwomIzQzOwlmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX0RFQ0FQX0ZUX0xFVkVMOwomIzQzOwlmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTzsKJiM0MzsJZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7ZGVjYXAtJmd0O2Z0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBmdCBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9zcGVjOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBkcm9wIGdyb3VwICovCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNhcC0mZ3Q7ZnQsICZhbXA7ZGVjYXAtJmd0O2Ryb3BfZ3JvdXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsCiYjNDM7CQkJICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgcnggZHJvcF9ncm91cCBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWRkIGRlZmF1bHQgZHJvcCBydWxlICovCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGRlY2FwLSZndDtmdCwgTlVMTCwgZnMtJmd0O3J4X2JhZF9jb3VudGVyLAomIzQzOwkJCQkgICAgICAmYW1wO2RlY2FwLSZndDt1bnN1cHBvcnRlZF9ydWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIGRlY2FwIHVuc3VwcG9ydGVkIHZlcnNpb25zIGRyb3AgcnVsZSBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogbW9kaWZ5X2hkcjogY29weSBTUEkgZnJvbSBSRUdfQ18wIHRvIFJFR19CICovCiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpOwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsCiYjNDM7CQkgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0NfMCk7CiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19vZmZzZXQsIDApOwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi8KJiM0MzsJTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLAomIzQzOwkJIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTsKJiM0MzsJTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMCk7CiYjNDM7CiYjNDM7CW1vZGlmeV9oZHIgPSBtbHg1X21vZGlmeV9oZWFkZXJfYWxsb2MobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwsCiYjNDM7CQkJCQkgICAgICAxLCBhY3Rpb24pOwomIzQzOwlpZiAoSVNfRVJSKG1vZGlmeV9oZHIpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpOwomIzQzOwkJZ290byBvdXRfZXJyOwomIzQzOwl9CiYjNDM7CWRlY2FwLSZndDttb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjsKJiM0MzsKJiM0MzsJLyogcGt0X3JlZm9ybWF0OiBkZWNhcCBQU1AgdHJhbnNwb3J0ICovCiYjNDM7CXJlZm9ybWF0X3BhcmFtcy50eXBlID0gTUxYNV9SRUZPUk1BVF9UWVBFX1JFTU9WRV9QU1BfVFJBTlNQT1JUOwomIzQzOwlyZWZvcm1hdCA9IG1seDVfcGFja2V0X3JlZm9ybWF0X2FsbG9jKG1kZXYsICZhbXA7cmVmb3JtYXRfcGFyYW1zLAomIzQzOwkJCQkJICAgICAgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwpOwomIzQzOwlpZiAoSVNfRVJSKHJlZm9ybWF0KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihyZWZvcm1hdCk7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiYjNDM7CX0KJiM0MzsJZGVjYXAtJmd0O3JlZm9ybWF0ID0gcmVmb3JtYXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4IHZlcnNpb24gPSBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW2ldOwomIzQzOwkJc3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTsKJiM0MzsKJiM0MzsJCS8qIG1hdGNoKHZlcnNpb24pID0mZ3Q7IGRlY2FwLCBjb3B5IFNQSSwgZndkIHRvIHJ4IEZUICovCiYjNDM7CQlzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3BlYywgdmVyc2lvbik7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogT3ZlcnJpZGUgdGhlIGZsb3cgdGFnIHNldCBpbiB0aGUgZGVjcnlwdCB0YWJsZSB3aXRoCiYjNDM7CQkgKiB0aGUgZGVjYXAgUFNQIG1hcmtlciBhbmQgdmVyc2lvbi4KJiM0MzsJCSAqLwomIzQzOwkJc3BlYy0mZ3Q7Zmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7CiYjNDM7CQlzcGVjLSZndDtmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVAgfAomIzQzOwkJCSgodTMyKXZlcnNpb24gJmx0OyZsdDsgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVCk7CiYjNDM7CiYjNDM7CQlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fUEFDS0VUX1JFRk9STUFUIHwKJiM0MzsJCQlNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8CiYjNDM7CQkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUOwomIzQzOwkJZmxvd19hY3QucGt0X3JlZm9ybWF0ID0gcmVmb3JtYXQ7CiYjNDM7CQlmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjsKJiM0MzsJCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7CiYjNDM7CQlkZXN0LmZ0ID0gZnMtJmd0O3J4LmZ0OwomIzQzOwomIzQzOwkJcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjYXAtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCAmYW1wO2Rlc3QsIDEpOwomIzQzOwkJaWYgKElTX0VSUihydWxlKSkgewomIzQzOwkJCWVyciA9IFBUUl9FUlIocnVsZSk7CiYjNDM7CQkJZ290byBvdXRfZXJyOwomIzQzOwkJfQomIzQzOwkJZGVjYXAtJmd0O3J1bGVbaV0gPSBydWxlOwomIzQzOwl9CiYjNDM7CWdvdG8gb3V0X3NwZWM7CiYjNDM7CiYjNDM7b3V0X2VycjoKJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIGRlY2FwKTsKJiM0MztvdXRfc3BlYzoKJiM0MzsJa3ZmcmVlKHNwZWMpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAogCQkJCSAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdCkKIHsKIAlhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZSgmYW1wO2RlY3J5cHQtJmd0O3J1bGUpOwotCWlmIChkZWNyeXB0LSZndDtyeF9tb2RpZnlfaGRyKSB7Ci0JCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCBkZWNyeXB0LSZndDtyeF9tb2RpZnlfaGRyKTsKLQkJZGVjcnlwdC0mZ3Q7cnhfbW9kaWZ5X2hkciA9IE5VTEw7Ci0JfQomIzQzOwlhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLSZndDttZGV2LCAmYW1wO2RlY3J5cHQtJmd0O21vZGlmeV9oZHIpOwogCWFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKCZhbXA7ZGVjcnlwdC0mZ3Q7bWlzc19ydWxlKTsKIAlhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKCZhbXA7ZGVjcnlwdC0mZ3Q7bWlzc19ncm91cCk7CiAJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoJmFtcDtkZWNyeXB0LSZndDtmdCk7CkBAIC00MzEsMTEgJiM0Mzs2MTUsMTEgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAogCQkJCSAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KQogewogCXU4IGFjdGlvbltNTFg1X1VOX1NaX0JZVEVTKHNldF9hZGRfY29weV9hY3Rpb25faW5fYXV0byldID0ge307Ci0Jc3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkciA9IE5VTEw7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKIAlzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLSZndDttZGV2OwogCU1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7CiYjNDM7CXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGhkcjsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiAJaW50IGVyciA9IDA7CkBAIC00NzksMzAgJiM0Mzs2NjMsMzYgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAogCX0KIAlkZWNyeXB0LSZndDttaXNzX3J1bGUgPSBydWxlOwogCi0JLyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi8KLQlzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7Ci0JZmxvd19hY3QuY3J5cHRvLnR5cGUgPSBNTFg1X0ZMT1dfQ09OVEVYVF9FTkNSWVBUX0RFQ1JZUFRfVFlQRV9QU1A7Ci0JLyogU2V0IGJpdFszMSwgMzBdIFBTUCBtYXJrZXIgKi8KLSNkZWZpbmUgTUxYNUVfUFNQX01BUktFUl9CSVQgKEJJVCgzMCkgfCBCSVQoMzEpKQotCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTsKLQlNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7Ci0JTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBNTFg1RV9QU1BfTUFSS0VSX0JJVCk7Ci0JTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApOwotCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7Ci0KLQltb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLCAxLCBhY3Rpb24pOwotCWlmIChJU19FUlIobW9kaWZ5X2hkcikpIHsKLQkJZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gYWxsb2MgcHNwIHNldCBtb2RpZnlfaGVhZGVyX2lkIGVycj0lZFxuJiMzNDssIGVycik7Ci0JCW1vZGlmeV9oZHIgPSBOVUxMOwomIzQzOwkvKiBDcmVhdGUgbW9kaWZ5X2hkciB0byBjb3B5IFNQSSB0byBSRUdfQ18wICovCiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpOwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsCiYjNDM7CQkgTUxYNV9BQ1RJT05fSU5fRklFTERfUFNQX0hFQURFUl8xKTsKJiM0MzsJTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7CiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMCk7ICAvKiAwID0gMzIgYml0cyAqLwomIzQzOwlNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsCiYjNDM7CQkgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0NfMCk7CiYjNDM7CU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApOwomIzQzOwomIzQzOwltb2RoZHIgPSBtbHg1X21vZGlmeV9oZWFkZXJfYWxsb2MobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwsIDEsCiYjNDM7CQkJCQkgIGFjdGlvbik7CiYjNDM7CWlmIChJU19FUlIobW9kaGRyKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihtb2RoZHIpOwogCQlnb3RvIG91dF9lcnI7CiAJfQotCWRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyOwomIzQzOwlkZWNyeXB0LSZndDttb2RpZnlfaGRyID0gbW9kaGRyOwogCi0JZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFI7Ci0JZmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiYjNDM7CS8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovCiYjNDM7CXNldHVwX2Z0ZV91ZHBfcHNwKHNwZWMsIFBTUF9ERUZBVUxUX1VEUF9QT1JUKTsKJiM0MzsKJiM0MzsJLyogU2V0IFBTUCBtYXJrZXIgdmlhIGZsb3dfdGFnICovCiYjNDM7CXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbGFncyA9IEZMT1dfQ09OVEVYVF9IQVNfVEFHOwomIzQzOwlzcGVjLSZndDtmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1A7CiYjNDM7CiYjNDM7CWZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQOwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfAomIzQzOwkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfAomIzQzOwkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUOwomIzQzOwlmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaGRyOwogCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7CiAJZGVzdC5mdCA9IGZzLSZndDtjaGVjay5mdDsKIAlydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKQEAgLTUyMyw5ICYjNDM7NzEzLDUwIEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfcmVjb25maWd1cmUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgICBib29sIGRlY2FwX3dhbnRlZCkKJiM0Mzt7CiYjNDM7CWJvb2wgZGVjYXBfc3VwcG9ydGVkID0KJiM0MzsJCU1MWDVfQ0FQX0ZMT1dUQUJMRShmcy0mZ3Q7bWRldiwKJiM0MzsJCQkJICAgZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlZm9ybWF0X2RlbF9wc3BfdHJhbnNwb3J0KTsKJiM0MzsJYm9vbCBkZWNhcF9lbmFibGUgPSBkZWNhcF93YW50ZWQgJmFtcDsmYW1wOyBkZWNhcF9zdXBwb3J0ZWQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgdGhlIGRlY2FwIHRhYmxlIGlmIG5lZWRlZC4gKi8KJiM0MzsJaWYgKGRlY2FwX2VuYWJsZSAmYW1wOyZhbXA7ICFmcy0mZ3Q7ZGVjYXAuZnQpIHsKJiM0MzsJCWVyciA9IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoZnMsICZhbXA7ZnMtJmd0O2RlY2FwKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQltbHg1X2NvcmVfd2Fybihmcy0mZ3Q7bWRldiwKJiM0MzsJCQkJICAgICAgICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGUmIzM0OywKJiM0MzsJCQkJICAgICAgIGVycik7CiYjNDM7CQkJZGVjYXBfZW5hYmxlID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGRlY2FwX2VuYWJsZSA9PSBmcy0mZ3Q7ZGVjYXBfZW5hYmxlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBSZWRpcmVjdCB0cmFmZmljIHRvIHRoZSBjb3JyZWN0IHRhYmxlLiAqLwomIzQzOwlkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwomIzQzOwlkZXN0LmZ0ID0gZGVjYXBfZW5hYmxlID8gZnMtJmd0O2RlY2FwLmZ0IDogZnMtJmd0O3J4LmZ0OwomIzQzOwllcnIgPSBtbHg1X21vZGlmeV9ydWxlX2Rlc3RpbmF0aW9uKGZzLSZndDtjaGVjay5ydWxlLCAmYW1wO2Rlc3QsIE5VTEwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveV9mdDsKJiM0MzsKJiM0MzsJZnMtJmd0O2RlY2FwX2VuYWJsZWQgPSBkZWNhcF9lbmFibGU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9kZXN0cm95X2Z0OgomIzQzOwlpZiAoZGVjYXBfZW5hYmxlKQomIzQzOwkJYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsICZhbXA7ZnMtJmd0O2RlY2FwKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIHsKIAlzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtJmd0O2ZzLCBmYWxzZSk7CiYjNDM7CWJvb2wgdGNfYmxvY2tlZCA9IGZzLSZndDtyeC5mdDsKIAlpbnQgaTsKIAogCS8qIGRpc2Nvbm5lY3QgKi8KQEAgLTUzNCwxOSAmIzQzOzc2NSwyOSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAkJYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgJmFtcDtmcy0mZ3Q7ZGVjcnlwdFtpXSk7CiAJfQogCWFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KCZhbXA7ZnMtJmd0O2NoZWNrKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsICZhbXA7ZnMtJmd0O2RlY2FwKTsKIAlhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveSgmYW1wO2ZzLSZndDtyeCk7CiYjNDM7CWlmICh0Y19ibG9ja2VkKQomIzQzOwkJbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLSZndDttZGV2KTsKIH0KIAogc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAomIzQzOwkJCQkgIGJvb2wgZGVjYXBfZW5hYmxlLAogCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKIAlpbnQgaSwgZXJyOwogCiYjNDM7CWVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoZnMtJmd0O21kZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7VEMgb2ZmbG9hZCBhY3RpdmUsIGNhbm5vdCBlbmFibGUgUFNQJiMzNDspOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCWVyciA9IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoZnMsICZhbXA7ZnMtJmd0O3J4KTsKIAlpZiAoZXJyKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtGYWlsZWQgY3JlYXRpbmcgUlggc3RlZXJpbmcgdGFibGUmIzM0Oyk7Ci0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl91bmJsb2NrX3RjOwogCX0KIAogCWVyciA9IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoZnMsICZhbXA7ZnMtJmd0O2NoZWNrKTsKQEAgLTU3Myw2ICYjNDM7ODE0LDEyIEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAkJbWx4NV90dGNfZndkX2Rlc3QodHRjLCBmc19wc3AydHQoaSksICZhbXA7ZGVzdCk7CiAJfQogCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShmcywgZGVjYXBfZW5hYmxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ZhaWxlZCBSWCBzdGVlcmluZyBjb25maWcgZm9yIEhXIEdSTyYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX2RlY3J5cHRfZnQ7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyX2RlY3J5cHRfZnQ6CkBAIC01ODMsNiAmIzQzOzgzMCw4IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAlhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveSgmYW1wO2ZzLSZndDtjaGVjayk7CiBlcnJfZnQ6CiAJYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7cngpOwomIzQzO2Vycl91bmJsb2NrX3RjOgomIzQzOwltbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQoZnMtJmd0O21kZXYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTgzOSw3ICYjNDM7MTA4OCw4IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShwcml2LSZndDtwc3AtJmd0O2ZzLCBleHRhY2spOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtJmd0O3BzcC0mZ3Q7ZnMsIHNoYW1wb19lbmFibGVkKHByaXYpLAomIzQzOwkJCQkgICAgIGV4dGFjayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTExNiwzICYjNDM7MTM2NiwxNCBAQCB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogCXByaXYtJmd0O3BzcCA9IE5VTEw7CiAJa2ZyZWUocHNwKTsKIH0KJiM0MzsKJiM0MztpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtJmd0O3BzcDsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Fzc2VydF9sb2NrZWQocHJpdi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJaWYgKCFwc3AgfHwgIXBzcC0mZ3Q7ZnMtJmd0O2NoZWNrLmZ0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBhY2NlbF9wc3BfZnNfcnhfcmVjb25maWd1cmUocHNwLSZndDtmcywgc2hhbXBvX2VuYWJsZWQocHJpdikpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaAppbmRleCAzZjQ0MWU3ZGQ1NWFjLi43NmY2YzY5ZGUwZTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oCkBAIC00OSw2ICYjNDM7NDksNyBAQCBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwomIzQzO2ludCBtbHg1ZV9wc3BfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KQEAgLTYxLDUgJiM0Mzs2Miw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfTUxYNV9FTl9QU1AgKi8KICNlbmRpZiAvKiBfX01MWDVFX0FDQ0VMX1BTUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMKaW5kZXggMzQ4ZmQ3YTk2MjYxNS4uMmJlZmZlZTE0Mjc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMKQEAgLTExOCwxMCAmIzQzOzExOCwyNSBAQCBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKgogewogCXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MTYgZGV2X2lkID0gcHJpdi0mZ3Q7cHNwLSZndDtwc2QtJmd0O2lkOwotCWJvb2wgc3RyaXBfaWN2ID0gdHJ1ZTsKLQl1OCBnZW5lcmF0aW9uID0gMDsKJiM0MzsJc3RydWN0IHBzcF9za2JfZXh0ICpwc2U7CiYjNDM7CiYjNDM7CWlmIChtbHg1ZV9wc3BfaXNfZGVjYXAoY3FlKSkgewomIzQzOwkJLyogVURQICYjNDM7IFBTUCBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlciByZW1vdmVkIGJ5IEhXLgomIzQzOwkJICogQ29uc3RydWN0IHRoZSBQU1AgZXh0ZW5zaW9uIGZyb20gQ1FFIG1ldGFkYXRhLgomIzQzOwkJICovCiYjNDM7CQlwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTsKJiM0MzsJCWlmICh1bmxpa2VseSghcHNlKSkKJiM0MzsJCQlnb3RvIGRyb3A7CiYjNDM7CiYjNDM7CQlwc2UtJmd0O3NwaSA9IG1seDVlX3BzcF9nZXRfc3BpKGNxZSk7CiYjNDM7CQlwc2UtJmd0O3ZlcnNpb24gPSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTsKJiM0MzsJCXBzZS0mZ3Q7ZGV2X2lkID0gZGV2X2lkOwomIzQzOwkJcHNlLSZndDtnZW5lcmF0aW9uID0gMDsKJiM0MzsJCXNrYi0mZ3Q7ZGVjcnlwdGVkID0gMTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCi0JaWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCBnZW5lcmF0aW9uLCBzdHJpcF9pY3YpKQomIzQzOwlpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIDAsIHRydWUpKQogCQlnb3RvIGRyb3A7CiAKIAlza2ItJmd0O2RlY3J5cHRlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCmluZGV4IDJiMDgwYzM5Y2MzN2UuLjQxYjYwMjU5YjNiYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCkBAIC05LDEwICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3BzcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtlbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vdHhyeC5oJiMzNDsKLQotLyogQml0MzA6IFBTUCBtYXJrZXIsIEJpdDIyLTA6IFBTUCBvYmogaWQgKi8KLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSAmZ3Q7Jmd0OyAzMCkgJmFtcDsgMHgzKSA9PSAweDMpCi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpICZhbXA7IEdFTk1BU0soMjIsIDApKQomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAKIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUgewogCXUzMiB0YWlsZW47CkBAIC04Miw3ICYjNDM7NzksMjkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWx4NWVfcHNwX3R4X2lkc19sZW4oc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIHsKLQlyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7ZnRfbWV0YWRhdGEpKTsKJiM0MzsJdTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByb3RvID09IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUCB8fAomIzQzOwkJcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwl1MzIgcHJvdG8gPSBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhjcWUpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHU4IG1seDVlX3BzcF9nZXRfdmVyc2lvbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpICZhbXA7IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSykgJmd0OyZndDsKJiM0MzsJCU1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgX19iZTMyIG1seDVlX3BzcF9nZXRfc3BpKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3FlLSZndDtmdF9tZXRhZGF0YTsKIH0KIAogYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xMTAsNiAmIzQzOzEyOSwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkJICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jCmluZGV4IDNiOWQ0MmM3ZTljMjguLjNjNmVmNTAwZDBmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwpAQCAtNjI4Niw3ICYjNDM7NjI4NiwxMyBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAogc3RhdGljIGludCBtbHg1ZV91cGRhdGVfbmljX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewotCXJldHVybiBtbHg1ZV9yZWZyZXNoX3RpcnMocHJpdi0mZ3Q7bWRldiwgZmFsc2UsIGZhbHNlKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbWx4NWVfcmVmcmVzaF90aXJzKHByaXYtJmd0O21kZXYsIGZhbHNlLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHByaXYpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1seDVlX3Byb2ZpbGUgbWx4NWVfbmljX3Byb2ZpbGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jCmluZGV4IGZiNzExMGIxYjY4MzQuLmM3ZWFhYjNmNzk2N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jCkBAIC0yMjIxLDYgJiM0MzsyMjIxLDMzIEBAIHN0YXRpYyBib29sIG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gcGFnZV9zaXplICogbnJfZnJhZ3MgJiM0MzsgZGF0YV9iY250ICZsdDs9IEdST19MRUdBQ1lfTUFYX1NJWkU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fcHNwX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTUxYNV9FTl9QU1AKJiM0MzsJc3RydWN0IHBzcF9za2JfZXh0ICpwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7CiYjNDM7CWJvb2wgaXNfcHNwID0gbWx4NWVfcHNwX2lzX3J4X2Zsb3coY3FlKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseSghaXNfcHNwICZhbXA7JmFtcDsgIXBzZSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogTm8gbWF0Y2ggb24gUFNQIHN0YXR1cyBjaGFuZ2UgKG5vIGNyeXB0byAtJmd0OyBjcnlwdG8gb3IgdmljZS12ZXJzYSkuICovCiYjNDM7CWlmICh1bmxpa2VseShpc19wc3AgIT0gISFwc2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBTUEkgYW5kIHZlcnNpb24gYXJlIG9ubHkgYXZhaWxhYmxlIGluIENRRSBtZXRhZGF0YSBmb3IgZGVjYXAgZmxvd3MuCiYjNDM7CSAqIE5vbi1kZWNhcCBQU1AgY2Fubm90IGJlIG1hdGNoZWQgaGVyZSwgZm9yY2UgYSBmbHVzaC4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseSghbWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBObyBtYXRjaCBvbiBzZWN1cml0eSBwYXJhbWV0ZXJzIGNoYW5nZS4gKi8KJiM0MzsJcmV0dXJuIHBzZS0mZ3Q7c3BpID09IG1seDVlX3BzcF9nZXRfc3BpKGNxZSkgJmFtcDsmYW1wOwomIzQzOwkJcHNlLSZndDt2ZXJzaW9uID09IG1seDVlX3BzcF9nZXRfdmVyc2lvbihjcWUpOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiB0cnVlOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3cnFfc2hhbXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiB7CiAJdTE2IGRhdGFfYmNudAkJPSBtcHdycV9nZXRfY3FlX2J5dGVfY250KGNxZSkgLSBjcWUtJmd0O3NoYW1wby5oZWFkZXJfc2l6ZTsKQEAgLTIyNTgsOCAmIzQzOzIyODUsOSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcQogCWRhdGFfb2Zmc2V0ID0gd3FlX29mZnNldCAmYW1wOyAocGFnZV9zaXplIC0gMSk7CiAJcGFnZV9pZHggPSB3cWVfb2Zmc2V0ICZndDsmZ3Q7IHJxLSZndDttcHdxZS5wYWdlX3NoaWZ0OwogCWlmICgqc2tiICZhbXA7JmFtcDsKLQkgICAgIShtYXRjaCAmYW1wOyZhbXA7IG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsCi0JCQkJCQkJIHBhZ2Vfc2l6ZSkpKSB7CiYjNDM7CSAgICAhKG1hdGNoICZhbXA7JmFtcDsKJiM0MzsJICAgICAgbWx4NWVfaHdfZ3JvX3NrYl9oYXNfZW5vdWdoX3NwYWNlKCpza2IsIGRhdGFfYmNudCwgcGFnZV9zaXplKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgIG1seDVlX2h3X2dyb19wc3BfbWF0Y2goKnNrYiwgY3FlKSkpIHsKIAkJbWF0Y2ggPSBmYWxzZTsKIAkJbWx4NWVfc2hhbXBvX2ZsdXNoX3NrYihycSwgY3FlLCBtYXRjaCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYwppbmRleCAxYmM3YjkwMTkxMjRhLi43MDE5NWZjZGRmYzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYwpAQCAtNDgxMSwxNCAmIzQzOzQ4MTEsMTQgQEAgc3RhdGljIGJvb2wgaXNfZmxvd19ydWxlX2R1cGxpY2F0ZV9hbGxvd2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIG5ldGlmX2lzX2xhZ19wb3J0KGRldikgJmFtcDsmYW1wOyBycHJpdiAmYW1wOyZhbXA7IHJwcml2LSZndDtyZXAtJmd0O3Zwb3J0ICE9IE1MWDVfVlBPUlRfVVBMSU5LOwogfQogCi0vKiBBcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUtb2ZmbG9hZCwKLSAqIGVpdGhlciBJUHNlYyBvZmZsb2FkIG9yIFRDIG9mZmxvYWQsIG5vdCBib3RoLCBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS4KJiM0MzsvKiBUQyBvZmZsb2FkIGFuZCBhY2NlbCBwcm90b2NvbHMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90aGVyJiMzOTtzIGZsb3dfdGFnIHdpdGgKJiM0MzsgKiBzdGVlcmluZyBydWxlcyBhbmQgdGhleSBjYW5ub3Qgc2ltdWx0YW5lb3VzbHkgb3BlcmF0ZSBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuCiYjNDM7ICogQWRkaXRpb25hbGx5LCBhcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmQKJiM0MzsgKiBoYXJkd2FyZS1vZmZsb2FkLCBvbmx5IG9uZSBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS4KICAqLwotc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO3N0YXRpYyBib29sIGlzX3RjX2FjY2VsX2NoZWNrX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfTUxYNV9FTl9JUFNFQykpCi0JCXJldHVybiBmYWxzZTsKLQogCWlmIChmaWx0ZXIgIT0gcHJpdi0mZ3Q7bmV0ZGV2KQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTQ4MjgsMjcgJiM0Mzs0ODI4LDM1IEBAIHN0YXRpYyBib29sIGlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4CiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKJiM0MztzdGF0aWMgaW50IG1seDVlX3RjX2Jsb2NrX2FjY2VsX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwKJiM0MzsJCQkJCXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi0mZ3Q7bWRldjsKJiM0MzsJaW50IHJldCA9IDA7CiAKLQlpZiAoIWlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKQomIzQzOwlpZiAoIWlzX3RjX2FjY2VsX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKQogCQlyZXR1cm4gMDsKIAotCWlmIChtZGV2LSZndDtudW1fYmxvY2tfdGMpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZGV2LSZndDtudW1fYmxvY2tfaXBzZWMmIzQzOyYjNDM7OwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKJiM0MzsJaWYgKG1kZXYtJmd0O29mZmxvYWRfYmxvY2subnVtX3RjKQomIzQzOwkJcmV0ID0gLUVCVVNZOwomIzQzOwllbHNlCiYjNDM7CQltZGV2LSZndDtvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCYjNDM7JiM0Mzs7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21kZXYtJmd0O29mZmxvYWRfYmxvY2subG9jayk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO3N0YXRpYyB2b2lkIG1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLAomIzQzOwkJCQkJICAgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7Ci0JaWYgKCFpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSkKJiM0MzsJaWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSkKIAkJcmV0dXJuOwogCi0JcHJpdi0mZ3Q7bWRldi0mZ3Q7bnVtX2Jsb2NrX2lwc2VjLS07CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDttZGV2LSZndDtvZmZsb2FkX2Jsb2NrLmxvY2spOwomIzQzOwlpZiAoIVdBUk5fT05fT05DRSghcHJpdi0mZ3Q7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpKQomIzQzOwkJcHJpdi0mZ3Q7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5udW1fYWNjZWwtLTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bWRldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKIH0KIAogaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCkBAIC00ODYzLDcgJiM0Mzs0ODcxLDcgQEAgaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiAJaWYgKCFtbHg1X2Vzd19ob2xkKHByaXYtJmd0O21kZXYpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZXJyID0gbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpOwomIzQzOwllcnIgPSBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7CiAJaWYgKGVycikKIAkJZ290byBlc3dfcmVsZWFzZTsKIApAQCAtNDkxMiw3ICYjNDM7NDkyMCw3IEBAIGludCBtbHg1ZV9jb25maWd1cmVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LAogZXJyX2ZyZWU6CiAJbWx4NWVfZmxvd19wdXQocHJpdiwgZmxvdyk7CiBvdXQ6Ci0JbWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7CiYjNDM7CW1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpOwogCW1seDVfZXN3X3B1dChwcml2LSZndDttZGV2KTsKIGVzd19yZWxlYXNlOgogCW1seDVfZXN3X3JlbGVhc2UocHJpdi0mZ3Q7bWRldik7CkBAIC00OTU1LDcgJiM0Mzs0OTYzLDcgQEAgaW50IG1seDVlX2RlbGV0ZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiAJdHJhY2VfbWx4NWVfZGVsZXRlX2Zsb3dlcihmKTsKIAltbHg1ZV9mbG93X3B1dChwcml2LCBmbG93KTsKIAotCW1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpOwomIzQzOwltbHg1ZV90Y191bmJsb2NrX2FjY2VsX29mZmxvYWQoZGV2LCBwcml2KTsKIAltbHg1X2Vzd19wdXQocHJpdi0mZ3Q7bWRldik7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmgKaW5kZXggZTFiOGNiNzgzNjlmMS4uNTNiNjA0M2UzM2QyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICYjMzQ7ZW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Vzd2l0Y2guaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbl9hY2NlbC9mbG93X3RhZy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vdGNfY3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuL3RjX3R1bi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7ZW4vdGMvaW50X3BvcnQuaCYjMzQ7CkBAIC0zNzAsMTEgJiM0MzszNzEsMTMgQEAgc3RydWN0IG1seDVlX3RjX3RhYmxlICptbHg1ZV90Y190YWJsZV9hbGxvYyh2b2lkKTsKIHZvaWQgbWx4NWVfdGNfdGFibGVfZnJlZShzdHJ1Y3QgbWx4NWVfdGNfdGFibGUgKnRjKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9jcWVfcmVnYl9jaGFpbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKQogewotCXUzMiBjaGFpbiwgcmVnX2I7CiYjNDM7CXUzMiBmbG93X3RhZywgcmVnX2IsIGNoYWluOwogCiYjNDM7CWZsb3dfdGFnID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTsKIAlyZWdfYiA9IGJlMzJfdG9fY3B1KGNxZS0mZ3Q7ZnRfbWV0YWRhdGEpOwogCi0JaWYgKHJlZ19iICZndDsmZ3Q7IChNTFg1RV9UQ19UQUJMRV9DSEFJTl9UQUdfQklUUyAmIzQzOyBFU1dfWk9ORV9JRF9CSVRTKSkKJiM0MzsJaWYgKGZsb3dfdGFnICE9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX05PTkUgfHwKJiM0MzsJICAgIChyZWdfYiAmZ3Q7Jmd0OyAoTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX0JJVFMgJiM0MzsgRVNXX1pPTkVfSURfQklUUykpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAljaGFpbiA9IHJlZ19iICZhbXA7IE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19NQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmMKaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbHg1L21hY3NlYy5oJmd0OwogI2luY2x1ZGUgJiMzNDtmc19jb3JlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtsaWIvbWFjc2VjX2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvZmxvd190YWcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O21seDVfY29yZS5oJiMzNDsKIAogLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi8KQEAgLTQ1LDkgJiM0Mzs0Niw2IEBACiAjZGVmaW5lIE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhPVVRfU0NJIDB4OAogI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIX1NDSSAoTUxYNV9TRUNUQUdfSEVBREVSX1NJWkVfV0lUSE9VVF9TQ0kgJiM0MzsgTUFDU0VDX1NDSV9MRU4pCiAKLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi8KLSNkZWZpbmUgbWFjc2VjX2ZzX3NldF9yeF9mc19pZChmc19pZCkgKChmc19pZCkgfCBCSVQoMzApKQotCiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHsKIAlfX2JlMTYgZXRoZXJ0eXBlOwogCXU4IHRjaV9hbjsKQEAgLTE3NTcsMTEgJiM0MzsxNzU1LDEwIEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywKIAlyeF90YWJsZXMgPSAmYW1wO3J4X2ZzLSZndDt0YWJsZXM7CiAJZnRfY3J5cHRvID0gJmFtcDtyeF90YWJsZXMtJmd0O2Z0X2NyeXB0bzsKIAotCS8qIFNldCBiaXRbMzEgLSAzMF0gbWFjc2VjIG1hcmtlciAtIDB4MDEgKi8KIAkvKiBTZXQgYml0WzE1LTBdIGZzIGlkICovCiAJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpOwogCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTsKLQlNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpKTsKJiM0MzsJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBmc19pZCk7CiAJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApOwogCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7CiAKQEAgLTE3NzgsNiAmIzQzOzE3NzUsOSBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsCiAJLyogUnggY3J5cHRvIHRhYmxlIHdpdGggU0NJIHJ1bGUgKi8KIAltYWNzZWNfZnNfcnhfc2V0dXBfZnRlKHNwZWMsICZhbXA7Zmxvd19hY3QsIGF0dHJzLCB0cnVlKTsKIAomIzQzOwlzcGVjLSZndDtmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7CiYjNDM7CXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQzsKJiM0MzsKIAlmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjsKIAlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfAogCQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfApAQCAtMTgwMyw2ICYjNDM7MTgwMyw5IEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywKIAogCQltYWNzZWNfZnNfcnhfc2V0dXBfZnRlKHNwZWMsICZhbXA7Zmxvd19hY3QsIGF0dHJzLCBmYWxzZSk7CiAKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRzsKJiM0MzsJCXNwZWMtJmd0O2Zsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQzsKJiM0MzsKIAkJZmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiAJCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8CiAJCQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfApAQCAtMjE2MCw4ICYjNDM7MjE2Myw4IEBAIHN0YXRpYyBpbnQgbWx4NV9tYWNzZWNfZnNfYWRkX3JvY2VfcnVsZV9yeChzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcywgdTMyCiAKIAlzcGVjLSZndDttYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjsKIAlNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfY3JpdGVyaWEsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUpOwotCU1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfdmFsdWUsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUsCi0JCSBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7CiYjNDM7CU1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy0mZ3Q7bWF0Y2hfdmFsdWUsCiYjNDM7CQkgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfNSwgZnNfaWQpOwogCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9BTExPVzsKIAluZXdfcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZnMtJmd0O3JvY2UuZnRfbWFjc2VjX29wX2NoZWNrLCBzcGVjLCAmYW1wO2Zsb3dfYWN0LAogCQkJCSAgICAgICBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oCmluZGV4IDE1YWNhZmY0MzY0MTcuLmI4YjhiNDEyZDVjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaApAQCAtNiwxMSAmIzQzOzYsMTAgQEAKIAogI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQwogCi0vKiBCaXQzMSAtIDMwOiBNQUNzZWMgbWFya2VyLCBCaXQxNS0wOiBNQUNzZWMgaWQgKi8KLSNkZWZpbmUgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVggVVNIUlRfTUFYIC8qIE11c3QgYmUgcG93ZXIgb2YgdHdvICovCi0jZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgKLSNkZWZpbmUgTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSAmZ3Q7Jmd0OyAzMCkgJmFtcDsgMHgzKSAgPT0gMHgxKQotI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpICZhbXA7IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spCiYjNDM7LyogTUFDc2VjIGZzX2lkIGluIGZ0X21ldGFkYXRhIGJpdHNbMTU6MF0gKi8KJiM0MzsjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCBVU0hSVF9NQVggLyogTXVzdCBiZSBwb3dlciBvZiB0d28gKi8KJiM0MzsjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYCiYjNDM7I2RlZmluZSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSAmYW1wOyBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLKQogCiAvKiBNQUNzZWMgVFggZmxvdyBzdGVlcmluZyAqLwogI2RlZmluZSBNTFg1X0VUSF9XUUVfRlRfTUVUQV9NQUNTRUNfTUFTSyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYwppbmRleCA2NDNiNGFhYzIwMzM2Li40MDZjMGY3ZTYzZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKQEAgLTE4MTAsNiAmIzQzOzE4MTAsNyBAQCBpbnQgbWx4NV9tZGV2X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHByb2ZpbGVfaWR4KQogCWxvY2tkZXBfcmVnaXN0ZXJfa2V5KCZhbXA7ZGV2LSZndDtsb2NrX2tleSk7CiAJbXV0ZXhfaW5pdCgmYW1wO2Rldi0mZ3Q7aW50Zl9zdGF0ZV9tdXRleCk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmFtcDtkZXYtJmd0O2ludGZfc3RhdGVfbXV0ZXgsICZhbXA7ZGV2LSZndDtsb2NrX2tleSk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtkZXYtJmd0O29mZmxvYWRfYmxvY2subG9jayk7CiAJbXV0ZXhfaW5pdCgmYW1wO2Rldi0mZ3Q7bWx4NWVfcmVzLnVwbGlua19uZXRkZXZfbG9jayk7CiAJbXV0ZXhfaW5pdCgmYW1wO2Rldi0mZ3Q7d2Nfc3RhdGVfbG9jayk7CiAKQEAgLTE4OTgsNiAmIzQzOzE4OTksNyBAQCBpbnQgbWx4NV9tZGV2X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHByb2ZpbGVfaWR4KQogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDthbGxvY19tdXRleCk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO3ByaXYtJmd0O2JmcmVncy53Y19oZWFkLmxvY2spOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtiZnJlZ3MucmVnX2hlYWQubG9jayk7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDtkZXYtJmd0O29mZmxvYWRfYmxvY2subG9jayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO2Rldi0mZ3Q7aW50Zl9zdGF0ZV9tdXRleCk7CiAJbG9ja2RlcF91bnJlZ2lzdGVyX2tleSgmYW1wO2Rldi0mZ3Q7bG9ja19rZXkpOwogCXJldHVybiBlcnI7CkBAIC0xOTI1LDYgJiM0MzsxOTI3LDcgQEAgdm9pZCBtbHg1X21kZXZfdW5pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJbXV0ZXhfZGVzdHJveSgmYW1wO3ByaXYtJmd0O2JmcmVncy5yZWdfaGVhZC5sb2NrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7ZGV2LSZndDt3Y19zdGF0ZV9sb2NrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7ZGV2LSZndDttbHg1ZV9yZXMudXBsaW5rX25ldGRldl9sb2NrKTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2Rldi0mZ3Q7b2ZmbG9hZF9ibG9jay5sb2NrKTsKIAltdXRleF9kZXN0cm95KCZhbXA7ZGV2LSZndDtpbnRmX3N0YXRlX211dGV4KTsKIAlsb2NrZGVwX3VucmVnaXN0ZXJfa2V5KCZhbXA7ZGV2LSZndDtsb2NrX2tleSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgKaW5kZXggYjE4NzFjMDgyMWQwYi4uMmQ5YmM3NTJlNDMxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaApAQCAtNzg4LDggJiM0Mzs3ODgsMTEgQEAgc3RydWN0IG1seDVfY29yZV9kZXYgewogCXUzMiAgICAgICAgICAgICAgICAgICAgICB2c2NfYWRkcjsKIAlzdHJ1Y3QgbWx4NV9odl92aGNhCSpodl92aGNhOwogCXN0cnVjdCBtbHg1X2h3bW9uCSpod21vbjsKLQl1NjQJCQludW1fYmxvY2tfdGM7Ci0JdTY0CQkJbnVtX2Jsb2NrX2lwc2VjOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG11dGV4IGxvY2s7CiYjNDM7CQl1NjQgbnVtX3RjOwomIzQzOwkJdTY0IG51bV9hY2NlbDsKJiM0MzsJfSBvZmZsb2FkX2Jsb2NrOwogI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQwogCXN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzOwogCS8qIE1BQ3NlYyBub3RpZmllciBjaGFpbiB0byBzeW5jIE1BQ3NlYyBjb3JlIGFuZCBJQiBkYXRhYmFzZSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5CmluZGV4IDMxNTY0OGE3NzBkMDAuLjliODk5NzIzYTYzNWEgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkKQEAgLTE2LDExICYjNDM7MTYsMTIgQEAgZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3RydWUsIGtzZnRfZXEsIGtzZnRfbmUsIGtzZnRfZ3QsIGtzZnRfcmFpc2VzCiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3Rfbm9uZQogZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnQKLWZyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IEtzZnRTa2lwRXgsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIE5ldERydkNvbnRFbnYKLWZyb20gbGliLnB5IGltcG9ydCBOZXRsaW5rLCBObEVycm9yLCBQU1BGYW1pbHksIFJ0bmxGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgTmV0bGluaywgTmxFcnJvciwgTmV0ZGV2RmFtaWx5LCBQU1BGYW1pbHksIFJ0bmxGYW1pbHkKIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyCiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCByYW5kX3BvcnQsIHdhaXRfcG9ydF9saXN0ZW4KJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBldGh0b29sLCByYW5kX3BvcnQsIHdhaXRfcG9ydF9saXN0ZW4sIENtZEV4aXRGYWlsdXJlCiBmcm9tIGxpYi5weSBpbXBvcnQgaXAKIAogCkBAIC0zMCwxNSAmIzQzOzMxLDI1IEBAIGRlZiBfZ2V0X291dHEocyk6CiAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJiMzNDtJJiMzNDssIG91dHEpWzBdCiAKIAomIzQzO2RlZiBfcmVjdl9leGFjdChzb2NrLCBuKToKJiM0MzsgICAgYnVmID0gYiYjMzk7JiMzOTsKJiM0MzsgICAgd2hpbGUgbGVuKGJ1ZikgJmx0OyBuOgomIzQzOyAgICAgICAgY2h1bmsgPSBzb2NrLnJlY3YobiAtIGxlbihidWYpKQomIzQzOyAgICAgICAgaWYgbm90IGNodW5rOgomIzQzOyAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgICAgICBidWYgJiM0Mzs9IGNodW5rCiYjNDM7ICAgIHJldHVybiBidWYKJiM0MzsKJiM0MzsKIGRlZiBfc2VuZF93aXRoX2FjayhjZmcsIG1zZyk6Ci0gICAgY2ZnLmNvbW1fc29jay5zZW5kKG1zZykKLSAgICByZXNwb25zZSA9IGNmZy5jb21tX3NvY2sucmVjdig0KQomIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKQomIzQzOyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpCiAgICAgaWYgcmVzcG9uc2UgIT0gYiYjMzk7YWNrXDAmIzM5OzoKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCYjMzQ7VW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UmIzM0OywgcmVzcG9uc2UpCiAKIAogZGVmIF9yZW1vdGVfcmVhZF9sZW4oY2ZnKToKLSAgICBjZmcuY29tbV9zb2NrLnNlbmQoYiYjMzk7cmVhZCBsZW5cMCYjMzk7KQomIzQzOyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzk7cmVhZCBsZW5cMCYjMzk7KQogICAgIHJldHVybiBpbnQoY2ZnLmNvbW1fc29jay5yZWN2KDEwMjQpWzotMV0uZGVjb2RlKCYjMzk7dXRmLTgmIzM5OykpCiAKIApAQCAtOTcsNyAmIzQzOzEwOCw3IEBAIGRlZiBfc2VuZF9jYXJlZnVsKGNmZywgcywgcm91bmRzKToKIGRlZiBfY2hlY2tfZGF0YV9yeChjZmcsIGV4cF9sZW4pOgogICAgIHJlYWRfbGVuID0gLTEKICAgICBmb3IgXyBpbiByYW5nZSgzMCk6Ci0gICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiJiMzOTtyZWFkIGxlblwwJiMzOTspCiYjNDM7ICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzk7cmVhZCBsZW5cMCYjMzk7KQogICAgICAgICByZWFkX2xlbiA9IGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJiMzOTt1dGYtOCYjMzk7KSkKICAgICAgICAgaWYgcmVhZF9sZW4gPT0gZXhwX2xlbjoKICAgICAgICAgICAgIGJyZWFrCkBAIC01ODMsNiAmIzQzOzU5NCwxMDggQEAgZGVmIF9nZXRfcHNwX3Zlcl9pcF92YXJpYW50cygpOgogICAgICAgICBmb3IgaXB2IGluICgmIzM0OzQmIzM0OywgJiMzNDs2JiMzNDspOgogICAgICAgICAgICAgeWllbGQgS3NmdE5hbWVkVmFyaWFudChmJiMzNDt2e3Zlcn1faXB7aXB2fSYjMzQ7LCB2ZXIsIGlwdikKIAomIzQzO2RlZiBfZW5hYmxlX2xvY2FsX2h3X2dybyhjZmcpOgomIzQzOyAgICBjZmcucmVxdWlyZV9jbWQoJiMzNDtldGh0b29sJiMzNDspCiYjNDM7ICAgIGZlYXQgPSBldGh0b29sKGYmIzM0Oy1rIHtjZmcuaWZuYW1lfSYjMzQ7LCBqc29uPVRydWUpWzBdCiYjNDM7ICAgIGdybyA9IGZlYXQuZ2V0KCYjMzQ7cngtZ3JvLWh3JiMzNDspCiYjNDM7ICAgIGlmIG5vdCBncm8gb3IgJiMzNDthY3RpdmUmIzM0OyBub3QgaW4gZ3JvIG9yICYjMzQ7Zml4ZWQmIzM0OyBub3QgaW4gZ3JvOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O0hXIEdSTyBmZWF0dXJlIG5vdCByZXBvcnRlZCBieSBldGh0b29sJiMzNDspCiYjNDM7ICAgIGlmIGdyb1smIzM0O2ZpeGVkJiMzNDtdIGFuZCBub3QgZ3JvWyYjMzQ7YWN0aXZlJiMzNDtdOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFhmYWlsRXgoJiMzNDtIVyBHUk8gbm90IHN1cHBvcnRlZCBieSBkZXZpY2UmIzM0OykKJiM0MzsgICAgaWYgbm90IGdyb1smIzM0O2FjdGl2ZSYjMzQ7XToKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBldGh0b29sKGYmIzM0Oy1LIHtjZmcuaWZuYW1lfSByeC1ncm8taHcgb24mIzM0OykKJiM0MzsgICAgICAgIGV4Y2VwdCBDbWRFeGl0RmFpbHVyZSBhcyBlOgomIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtDYW5ub3QgZW5hYmxlIEhXIEdSTyB2aWEgZXRodG9vbCYjMzQ7KSBmcm9tIGUKJiM0MzsgICAgICAgIGRlZmVyKGV0aHRvb2wsIGYmIzM0Oy1LIHtjZmcuaWZuYW1lfSByeC1ncm8taHcgb2ZmJiMzNDspCiYjNDM7ICAgICAgICBmZWF0ID0gZXRodG9vbChmJiMzNDstayB7Y2ZnLmlmbmFtZX0mIzM0OywganNvbj1UcnVlKVswXQomIzQzOyAgICAgICAgZ3JvID0gZmVhdC5nZXQoJiMzNDtyeC1ncm8taHcmIzM0Oywge30pCiYjNDM7ICAgICAgICBpZiBub3QgZ3JvLmdldCgmIzM0O2FjdGl2ZSYjMzQ7KToKJiM0MzsgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7SFcgR1JPIGZhaWxlZCB0byBhY3RpdmF0ZSYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmVtb3RlX3NlbmQoY2ZnLCBzaXplKToKJiM0MzsgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGImIzM5O2RhdGEgc2VuZFwwJiMzOTsgJiM0Mzsgc3RydWN0LnBhY2soJiMzOTshSSYjMzk7LCBzaXplKSkKJiM0MzsgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KQomIzQzOyAgICBpZiByZXNwb25zZSAhPSBiJiMzOTthY2tcMCYjMzk7OgomIzQzOyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCYjMzQ7VW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgdG8gZGF0YSBzZW5kJiMzNDssIHJlc3BvbnNlKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmVjdl9hbGwocywgZXhwZWN0ZWQsIHRpbWVvdXQ9MjApOgomIzQzOyAgICBzLnNldHRpbWVvdXQodGltZW91dCkKJiM0MzsgICAgdG90YWwgPSAwCiYjNDM7ICAgIHRyeToKJiM0MzsgICAgICAgIHdoaWxlIHRvdGFsICZsdDsgZXhwZWN0ZWQ6CiYjNDM7ICAgICAgICAgICAgZGF0YSA9IHMucmVjdihtaW4oNjU1MzYsIGV4cGVjdGVkIC0gdG90YWwpKQomIzQzOyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgomIzQzOyAgICAgICAgICAgICAgICBicmVhawomIzQzOyAgICAgICAgICAgIHRvdGFsICYjNDM7PSBsZW4oZGF0YSkKJiM0MzsgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgomIzQzOyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAomIzQzOyAgICAgICAgICAgIGYmIzM0O1RpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0OyhyZXNwb25kZXIgbWF5IGhhdmUgZmFpbGVkIHRvIHNlbmQpJiMzNDspCiYjNDM7ICAgIGlmIHRvdGFsICZsdDsgZXhwZWN0ZWQ6CiYjNDM7ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiYjNDM7ICAgICAgICAgICAgZiYjMzQ7U2hvcnQgcmVhZDogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyAmIzM0OwomIzQzOyAgICAgICAgICAgIGYmIzM0OyhyZXNwb25kZXIgY29ubmVjdGlvbiBjbG9zZWQgZWFybHkpJiMzNDspCiYjNDM7ICAgIHJldHVybiB0b3RhbAomIzQzOwomIzQzOwomIzQzO2RlZiBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIF9pbml0X3BzcF9kZXYoY2ZnKQomIzQzOyAgICAjIFZlcnNpb24gMCBpcyByZXF1aXJlZCBieSBzcGVjLCBkb24mIzM5O3QgbGV0IGl0IHNraXAKJiM0MzsgICAgaWYgdmVyc2lvbjoKJiM0MzsgICAgICAgIG5hbWUgPSBjZmcucHNwbmwuY29uc3RzWyYjMzQ7dmVyc2lvbiYjMzQ7XS5lbnRyaWVzX2J5X3ZhbFt2ZXJzaW9uXS5uYW1lCiYjNDM7ICAgICAgICBpZiBuYW1lIG5vdCBpbiBjZmcucHNwX2luZm9bJiMzOTtwc3AtdmVyc2lvbnMtY2FwJiMzOTtdOgomIzQzOyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtQU1AgdmVyc2lvbiBub3Qgc3VwcG9ydGVkJiMzNDssIG5hbWUpCiYjNDM7CiYjNDM7ICAgIF9lbmFibGVfbG9jYWxfaHdfZ3JvKGNmZykKJiM0MzsKJiM0MzsgICAgcyA9IF9tYWtlX3BzcF9jb25uKGNmZywgdmVyc2lvbiwgaXB2ZXIpCiYjNDM7ICAgIHRyeToKJiM0MzsgICAgICAgIHJ4X2Fzc29jID0gY2ZnLnBzcG5sLnJ4X2Fzc29jKHsmIzM0O3ZlcnNpb24mIzM0OzogdmVyc2lvbiwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtkZXYtaWQmIzM0OzogY2ZnLnBzcF9kZXZfaWQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7c29jay1mZCYjMzQ7OiBzLmZpbGVubygpfSkKJiM0MzsgICAgICAgIHJ4ID0gcnhfYXNzb2NbJiMzOTtyeC1rZXkmIzM5O10KJiM0MzsgICAgICAgIHR4ID0gX3NwaV94Y2hnKHMsIHJ4KQomIzQzOyAgICAgICAgY2ZnLnBzcG5sLnR4X2Fzc29jKHsmIzM0O2Rldi1pZCYjMzQ7OiBjZmcucHNwX2Rldl9pZCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dmVyc2lvbiYjMzQ7OiB2ZXJzaW9uLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eC1rZXkmIzM0OzogdHgsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7CiYjNDM7ICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoeyYjMzQ7aWZpbmRleCYjMzQ7OiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlbMF0KJiM0MzsgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6CiYjNDM7ICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7cXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSYjMzQ7KSBmcm9tIGUKJiM0MzsgICAgICAgICAgICByYWlzZQomIzQzOyAgICAgICAgaWYgKCYjMzk7cngtaHctZ3JvLXBhY2tldHMmIzM5OyBub3QgaW4gYmVmb3JlIG9yCiYjNDM7ICAgICAgICAgICAgJiMzOTtyeC1ody1ncm8td2lyZS1wYWNrZXRzJiMzOTsgbm90IGluIGJlZm9yZSk6CiYjNDM7ICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM0O3J4LWh3LWdyby1wYWNrZXRzIGNvdW50ZXIgbm90IGF2YWlsYWJsZSYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgIyBSZW1vdGUgc2VuZHMgZGF0YSBpbiA4S0IgY2h1bmtzOyBHU08gb24gcmVtb3RlIFRYIHNlZ21lbnRzIHRoZW0sCiYjNDM7ICAgICAgICAjIEhXIEdSTyByZWFzc2VtYmxlcyBvbiBsb2NhbCBSWAomIzQzOyAgICAgICAgZGF0YV9sZW4gPSAxMCAqIDY1NTM2CiYjNDM7ICAgICAgICBfcmVtb3RlX3NlbmQoY2ZnLCBkYXRhX2xlbikKJiM0MzsgICAgICAgIHJlY3ZfbGVuID0gX3JlY3ZfYWxsKHMsIGRhdGFfbGVuKQomIzQzOyAgICAgICAga3NmdF9lcShyZWN2X2xlbiwgZGF0YV9sZW4pCiYjNDM7CiYjNDM7ICAgICAgICBjZmcud2FpdF9od19zdGF0c19zZXR0bGUoKQomIzQzOyAgICAgICAgYWZ0ZXIgPSBjZmcubmV0bmwucXN0YXRzX2dldCh7JiMzNDtpZmluZGV4JiMzNDs6IGNmZy5pZmluZGV4fSwgZHVtcD1UcnVlKVswXQomIzQzOyAgICAgICAga3NmdF9ndChhZnRlclsmIzM5O3J4LWh3LWdyby1wYWNrZXRzJiMzOTtdLAomIzQzOyAgICAgICAgICAgICAgICBiZWZvcmVbJiMzOTtyeC1ody1ncm8tcGFja2V0cyYjMzk7XSkKJiM0MzsgICAgICAgIGtzZnRfZ3QoYWZ0ZXJbJiMzOTtyeC1ody1ncm8td2lyZS1wYWNrZXRzJiMzOTtdLAomIzQzOyAgICAgICAgICAgICAgICBiZWZvcmVbJiMzOTtyeC1ody1ncm8td2lyZS1wYWNrZXRzJiMzOTtdKQomIzQzOyAgICBmaW5hbGx5OgomIzQzOyAgICAgICAgX2Nsb3NlX3BzcF9jb25uKGNmZywgcykKJiM0MzsKJiM0MztAa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKSkKJiM0MztkZWYgZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKQomIzQzOyAgICBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcikKJiM0MzsKIAogZGVmIF9nZXRfaXBfdmFyaWFudHMoKToKICAgICBmb3IgaXB2IGluICgmIzM0OzQmIzM0OywgJiMzNDs2JiMzNDspOgpAQCAtOTM3LDcgJiM0MzsxMDUwLDYgQEAgZGVmIF9zZXR1cF9wc3BfYXR0cmlidXRlcyhjZmcpOgogICAgIGNmZy5wc3BfZGV2X3BlZXJfbnNpZCA9IF9nZXRfbnNpZChjZmcubmV0bnMubmFtZSkKIAogCi0KIGRlZiBtYWluKCkgLSZndDsgTm9uZToKICAgICAmIzM0OyYjMzQ7JiMzNDsgS3NmdCBib2lsZXIgcGxhdGUgbWFpbiAmIzM0OyYjMzQ7JiMzNDsKIApAQCAtOTU0LDYgJiM0MzsxMDY2LDcgQEAgZGVmIG1haW4oKSAtJmd0OyBOb25lOgogCiAgICAgd2l0aCBlbnYgYXMgY2ZnOgogICAgICAgICBjZmcucHNwbmwgPSBQU1BGYW1pbHkoKQomIzQzOyAgICAgICAgY2ZnLm5ldG5sID0gTmV0ZGV2RmFtaWx5KCkKIAogICAgICAgICBpZiBoYXNfY29udDoKICAgICAgICAgICAgIF9zZXR1cF9wc3BfYXR0cmlidXRlcyhjZmcpCkBAIC05NzMsNyAmIzQzOzEwODYsNyBAQCBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fcG9ydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEpCiAKLSAgICAgICAgICAgICAgICBjYXNlcyA9IFtkYXRhX2Jhc2ljX3NlbmQsIGRhdGFfbXNzX2FkanVzdF0KJiM0MzsgICAgICAgICAgICAgICAgY2FzZXMgPSBbZGF0YV9iYXNpY19zZW5kLCBkYXRhX2h3X2dybywgZGF0YV9tc3NfYWRqdXN0XQogCiAgICAgICAgICAgICAgICAgaWYgaGFzX2NvbnQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2VzICYjNDM7PSBbCkBAIC05OTAsNyAmIzQzOzExMDMsNyBAQCBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZV9wZng9eyYjMzQ7ZGV2XyYjMzQ7LCAmIzM0O2RhdGFfJiMzNDssICYjMzQ7YXNzb2NfJiMzNDssICYjMzQ7cmVtb3ZhbF8mIzM0O30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oY2ZnLCApKQogCi0gICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kKGImIzM0O2V4aXRcMCYjMzQ7KQomIzQzOyAgICAgICAgICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYiYjMzQ7ZXhpdFwwJiMzNDspCiAgICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzcnYgYW5kIChzcnYuc3Rkb3V0IG9yIHNydi5zdGRlcnIpOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jCmluZGV4IGEyNmU3NjI4YmJiMTMuLjlhNjc1YmY0NDlmNWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmMKQEAgLTEsNSAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3BvbGwuaCZndDsKQEAgLTExOCw2ICYjNDM7MTE5LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfc3RyKGludCBzb2NrLCBpbnQgdmFsdWUpCiAJc2VuZChzb2NrLCBidWYsIHJldCAmIzQzOyAxLCBNU0dfV0FJVEFMTCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNlbmRfZGF0YShpbnQgc29jaywgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgc2J1Zls4MTkyXSA9IHswfTsKJiM0MzsJc3NpemVfdCBzZW50OwomIzQzOwomIzQzOwl3aGlsZSAobGVuICZndDsgMCkgewomIzQzOwkJc2l6ZV90IGNodW5rID0gbGVuOwomIzQzOwomIzQzOwkJaWYgKGNodW5rICZndDsgc2l6ZW9mKHNidWYpKQomIzQzOwkJCWNodW5rID0gc2l6ZW9mKHNidWYpOwomIzQzOwomIzQzOwkJc2VudCA9IHNlbmQoc29jaywgc2J1ZiwgY2h1bmssIE1TR19OT1NJR05BTCk7CiYjNDM7CQlpZiAoc2VudCAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0VSUjogJXM6ICVzXG4mIzM0OywgX19mdW5jX18sCiYjNDM7CQkJCXN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJaWYgKHNlbnQgPT0gMCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0VSUjogJXM6IHBlZXIgY2xvc2VkXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsJCWxlbiAtPSBzZW50OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cywKIAkgICAgaW50IHNlcnZlcl9zb2NrLCBpbnQgY29tbV9zb2NrKQpAQCAtMTg1LDIyICYjNDM7MjE0LDIyIEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLAogCQkJfQogCiAJCQlvZmYgJiM0Mzs9IG47Ci0JCQluID0gb2ZmOwogCiAjZGVmaW5lIF9fY29uc3VtZShzeikJCQkJCQlcCiAJCSh7CQkJCQkJXAotCQkJaWYgKG4gPT0gKHN6KSkgewkJCVwKLQkJCQlvZmYgPSAwOwkJCVwKLQkJCX0gZWxzZSB7CQkJCVwKLQkJCQlvZmYgLT0gKHN6KTsJCQlcCi0JCQkJbWVtbW92ZShidWYsICZhbXA7YnVmWyhzeildLCBvZmYpOwlcCi0JCQl9CQkJCQlcCiYjNDM7CQkJb2ZmIC09IChzeik7CQkJCVwKJiM0MzsJCQltZW1tb3ZlKGJ1ZiwgJmFtcDtidWZbKHN6KV0sIG9mZik7CQlcCiAJCX0pCiAKLSNkZWZpbmUgY21kKF9uYW1lKQkJCQkJCQlcCiYjNDM7LyogT25seSBtYXRjaCBvbmNlIHRoZSBjb21tYW5kIGFuZCBpdHMgX2V4dHJhX3N6IGJ5dGUgcGF5bG9hZCBhcmUgYm90aAomIzQzOyAqIGJ1ZmZlcmVkLCBvdGhlcndpc2UgYSBzcGxpdCByZWFkIHdvdWxkIGNvbnN1bWUgdGhlIG5hbWUgYW5kIHN0cmFuZAomIzQzOyAqIHRoZSBwYXlsb2FkLCBkZXN5bmNocm9uaXppbmcgdGhlIHBhcnNlciBmb3IgZ29vZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGNtZChfbmFtZSwgX2V4dHJhX3N6KQkJCQkJCVwKIAkJKHsJCQkJCQkJXAogCQkJc3NpemVfdCBzeiA9IHNpemVvZihfbmFtZSk7CQkJXAotCQkJYm9vbCBtYXRjaCA9IG4gJmd0Oz0gc3ogJmFtcDsmYW1wOwkhbWVtY21wKGJ1ZiwgX25hbWUsIHN6KTsgXAomIzQzOwkJCWJvb2wgbWF0Y2ggPSBvZmYgJmd0Oz0gc3ogJiM0MzsgKF9leHRyYV9zeikgJmFtcDsmYW1wOwkJXAomIzQzOwkJCQkhbWVtY21wKGJ1ZiwgX25hbWUsIHN6KTsJCVwKIAkJCQkJCQkJCVwKIAkJCWlmIChtYXRjaCkgewkJCQkJXAogCQkJCWRiZygmIzM0O2NvbW1hbmQ6ICYjMzQ7IF9uYW1lICYjMzQ7XG4mIzM0Oyk7CQlcCkBAIC0yMTMsMTAgJiM0MzsyNDIsMTAgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsCiAJCQlkbyB7CiAJCQkJY29uc3VtZWQgPSBmYWxzZTsKIAotCQkJCWlmIChjbWQoJiMzNDtyZWFkIGxlbiYjMzQ7KSkKJiM0MzsJCQkJaWYgKGNtZCgmIzM0O3JlYWQgbGVuJiMzNDssIDApKQogCQkJCQlzZW5kX3N0cihjb21tX3NvY2ssIGRhdGFfcmVhZCk7CiAKLQkJCQlpZiAoY21kKCYjMzQ7ZGF0YSBlY2hvJiMzNDspKSB7CiYjNDM7CQkJCWlmIChjbWQoJiMzNDtkYXRhIGVjaG8mIzM0OywgMCkpIHsKIAkJCQkJaWYgKGRhdGFfc29jayAmZ3Q7PSAwKQogCQkJCQkJc2VuZChkYXRhX3NvY2ssICYjMzQ7ZWNobyYjMzQ7LCA1LAogCQkJCQkJICAgICBNU0dfV0FJVEFMTCk7CkBAIC0yMjQsNyAmIzQzOzI1MywyNyBAQCBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cywKIAkJCQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dBUk46IGVjaG8gYnV0IG5vIGRhdGEgc29ja1xuJiMzNDspOwogCQkJCQlzZW5kX2Fjayhjb21tX3NvY2spOwogCQkJCX0KLQkJCQlpZiAoY21kKCYjMzQ7ZGF0YSBjbG9zZSYjMzQ7KSkgewomIzQzOwkJCQlpZiAoY21kKCYjMzQ7ZGF0YSBzZW5kJiMzNDssIDQpKSB7CiYjNDM7CQkJCQlfX3UzMiBsZW47CiYjNDM7CiYjNDM7CQkJCQltZW1jcHkoJmFtcDtsZW4sIGJ1Ziwgc2l6ZW9mKGxlbikpOwomIzQzOwkJCQkJX19jb25zdW1lKHNpemVvZihsZW4pKTsKJiM0MzsJCQkJCWxlbiA9IG50b2hsKGxlbik7CiYjNDM7CiYjNDM7CQkJCQlpZiAoZGF0YV9zb2NrICZsdDsgMCkgewomIzQzOwkJCQkJCWZwcmludGYoc3RkZXJyLAomIzQzOwkJCQkJCQkmIzM0O1dBUk46IHNlbmQgYnV0IG5vIGRhdGEgc29ja1xuJiMzNDspOwomIzQzOwkJCQkJCXNlbmRfZXJyKGNvbW1fc29jayk7CiYjNDM7CQkJCQkJY29udGludWU7CiYjNDM7CQkJCQl9CiYjNDM7CiYjNDM7CQkJCQlzZW5kX2Fjayhjb21tX3NvY2spOwomIzQzOwkJCQkJaWYgKHNlbmRfZGF0YShkYXRhX3NvY2ssIGxlbikpCiYjNDM7CQkJCQkJZnByaW50ZihzdGRlcnIsCiYjNDM7CQkJCQkJCSYjMzQ7V0FSTjogc2VuZCBpbmNvbXBsZXRlIGZvciAldSBieXRlc1xuJiMzNDssCiYjNDM7CQkJCQkJCWxlbik7CiYjNDM7CQkJCX0KJiM0MzsJCQkJaWYgKGNtZCgmIzM0O2RhdGEgY2xvc2UmIzM0OywgMCkpIHsKIAkJCQkJaWYgKGRhdGFfc29jayAmZ3Q7PSAwKSB7CiAJCQkJCQljbG9zZShkYXRhX3NvY2spOwogCQkJCQkJZGF0YV9zb2NrID0gLTE7CkBAIC0yMzMsMjYgJiM0MzsyODIsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsCiAJCQkJCQlyYWNlX2Nsb3NlID0gdHJ1ZTsKIAkJCQkJfQogCQkJCX0KLQkJCQlpZiAoY21kKCYjMzQ7Y29ubiBwc3AmIzM0OykpIHsKJiM0MzsJCQkJaWYgKGNtZCgmIzM0O2Nvbm4gcHNwJiMzNDssIDIpKSB7CiAJCQkJCWlmIChhY2NlcHRfY2ZnICE9IEFDQ0VQVF9DRkdfTk9ORSkKIAkJCQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dBUk46IG9sZCBjb25uIGNvbmZpZyBzdGlsbCBzZXQhXG4mIzM0Oyk7CiAJCQkJCWFjY2VwdF9jZmcgPSBBQ0NFUFRfQ0ZHX1BTUDsKIAkJCQkJc2VuZF9hY2soY29tbV9zb2NrKTsKIAkJCQkJLyogbmV4dCB0d28gYnl0ZXMgYXJlIHZlcnNpb25zICovCi0JCQkJCWlmIChvZmYgJmd0Oz0gMikgewotCQkJCQkJbWVtY3B5KCZhbXA7cHNwX3ZlcnMsIGJ1ZiwgMik7Ci0JCQkJCQlfX2NvbnN1bWUoMik7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXQVJOOiBzaG9ydCBjb25uIHBzcCBjb21tYW5kIVxuJiMzNDspOwotCQkJCQl9CiYjNDM7CQkJCQltZW1jcHkoJmFtcDtwc3BfdmVycywgYnVmLCAyKTsKJiM0MzsJCQkJCV9fY29uc3VtZSgyKTsKIAkJCQl9Ci0JCQkJaWYgKGNtZCgmIzM0O2Nvbm4gY2xyJiMzNDspKSB7CiYjNDM7CQkJCWlmIChjbWQoJiMzNDtjb25uIGNsciYjMzQ7LCAwKSkgewogCQkJCQlpZiAoYWNjZXB0X2NmZyAhPSBBQ0NFUFRfQ0ZHX05PTkUpCiAJCQkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXQVJOOiBvbGQgY29ubiBjb25maWcgc3RpbGwgc2V0IVxuJiMzNDspOwogCQkJCQlhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjsKIAkJCQkJc2VuZF9hY2soY29tbV9zb2NrKTsKIAkJCQl9Ci0JCQkJaWYgKGNtZCgmIzM0O2V4aXQmIzM0OykpCiYjNDM7CQkJCWlmIChjbWQoJiMzNDtleGl0JiMzNDssIDApKQogCQkJCQlzaG91bGRfcXVpdCA9IHRydWU7CiAjdW5kZWYgY21kCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MzUKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMTM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IE1lbGxhbm94IG1seDUgRHJpdmVyIC0gTm90IEZ1enphYmxlIGluIFN0YW5kYXJkIFFFTVUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmeWluZyB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIgdG8gc3VwcG9ydCBQU1AgaGFyZHdhcmUgR1JPL2RlY2Fwc3VsYXRpb24uIEl0JiMzOTtzIGFkZGluZyBuZXcgZmVhdHVyZXMsIG1vZGlmeWluZyBleGlzdGluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBUQyBvZmZsb2FkLCBpbnRyb2R1Y2luZyBhIHVuaWZpZWQgZmxvdyB0YWcsIGFuZCB1cGRhdGluZyBzZXZlcmFsIGZpbGVzIChgaXBzZWNfZnMuY2AsIGBtYWNzZWMuY2AsIGBwc3AuY2AsIGBlbl9yeC5jYCwgYGVuX3RjLmNgKSB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVyZSBhcmUgYWxzbyBhc3NvY2lhdGVkIHRlc3RzIGluIGBwc3AucHlgIGFuZCBgcHNwX3Jlc3BvbmRlci5jYC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBidW5jaCBvZiBjb3JlIE1lbGxhbm94IGZpbGVzLgoKVGhlIGNvZGUgaXMgZm9jdXNlZCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2AuIFRoaXMgaXMgYSBwcmV0dHkgY2xlYXIgaW5kaWNhdGlvbiBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBDb25uZWN0WC00LzUvNi83IG5ldHdvcmsgY2FyZHMsIGEgaGlnaC1lbmQgU21hcnROSUMuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQmIzM5O3MgdGhlIGtleS4KCkxldCBtZSB0aGlua+KApiBJcyBgbWx4NWAgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyPyBZZXMsIGFic29sdXRlbHkuIEl0JiMzOTtzICp0aGUqIE1lbGxhbm94IENvbm5lY3RYIGRyaXZlci4gQW5kIGRvZXMgUUVNVSBlbXVsYXRlIE1lbGxhbm94IENvbm5lY3RYLTQmIzQzOyBOSUNzPyBOb3BlLiBRRU1VIGhhcyBzb21lIGVtdWxhdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCByZWxldmFudCBoZXJlLiBTbywgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gZXhpc3RzIGZvciBgbWx4NWAsIHBlcmlvZC4KCkkgcmVjYWxsIHRoYXQgU3l6a2FsbGVyIHVzdWFsbHkgZG9lc24mIzM5O3QgZnV6eiBoYXJkd2FyZSBkcml2ZXJzIHVubGVzcyB0aGVyZSYjMzk7cyBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgdkRQQS4gVGhpcyBzZWVtcyB0byBiZSBldGhlcm5ldCBhY2NlbGVyYXRpb24gZm9yIElQc2VjL01BQ3NlYy9QU1AsIHdoaWNoLCBhcyBJIHNlZSBpdCwgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE5JQy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSwgb25jZSBhZ2Fpbi4gQ2hlY2tpbmcgY2FyZWZ1bGx5LCBJIGRvbiYjMzk7dCBzZWUgYW55IFFFTVUgZW11bGF0aW9uIGZvciBgbWx4NWAgaW4gdGhlIHN0YW5kYXJkIFFFTVUuCgpHaXZlbiBhbGwgb2YgdGhhdCwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGBtbHg1YCBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgKGEgU21hcnROSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkpIHRoYXQgcmVsaWVzIG9uIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBBbmQgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQsIHRoZSBjaGFuZ2VzIGFyZSBhbGwgaW4gYG1seDVgIGFuZCBzZWxmdGVzdHMgdGhhdCByZWx5IG9uIHRoYXQuIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoYXQuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDk6MzQ6MTMuODY5NjM1MTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzNzcxNDQxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDk6MzQ6MTMuODY5NjQwNDk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU5NzQ4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNDRkYTQxMTk4ODI3ODAzY2M2MGIzZDBkNmU1Y2ExYzgwY2E0ZTk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDk6MzQ6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbkBAIC05OCw2ICs5OCw3IEBAIGVudW0ge1xcbiAjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXFxuIFxcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXFxuIFxcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUwsXFxuK1xcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9ERUNBUF9GVF9MRVZFTCxcXG4gXFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxcbiAjZW5kaWZcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxcbmluZGV4IDNmMjEyZTQ2ZmMyZjkuLmEwYmIxOWNjOTU2ZGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxcbkBAIC0yMTgsNiArMjE4LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF90eF9maW5pc2goc3RydWN0IG1seDVlX3R4cXNxICpzcSxcXG4gI2VuZGlmXFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xcbitcXHRpZiAobWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fYWNjZWwpXFxuK1xcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YysrO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKCFtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YykpXFxuK1xcdFxcdG1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjLS07XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3J4KHByaXYpO1xcbkBAIC0yMjksNiArMjUxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiBcXHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTUxYNV9FTl9QU1BcXG4rXFx0cmV0dXJuIG1seDVlX3BzcF91cGRhdGVfcngocHJpdik7XFxuKyNlbHNlXFxuK1xcdHJldHVybiAwO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF90eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kNDIyZjk2ZmZjZWQwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oXFxuQEAgLTAsMCArMSw0NSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBMaW51eC1PcGVuSUIgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2LCBOVklESUEgQ09SUE9SQVRJT04gXFx1MDAyNiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xcbitcXG4rI2lmbmRlZiBfX01MWDVFX0ZMT1dfVEFHX0hfX1xcbisjZGVmaW5lIF9fTUxYNUVfRkxPV19UQUdfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWx4NS9kZXZpY2UuaFxcdTAwM2VcXG4rXFxuKy8qIFVuaWZpZWQgYWNjZWwgZmxvd190YWcgbGF5b3V0IGluIENRRSBzb3BfZHJvcF9xcG4gWzIzOjBdOlxcbisgKlxcbisgKiAgIFsyMzoyMV0gPSBwcm90b2NvbCBJRCAoMyBiaXRzKTpcXG4rICogICAgICAgICAgICAgIDAgPSBub25lIChkZWZhdWx0KVxcbisgKiAgICAgICAgICAgICAgMSA9IElQc2VjXFxuKyAqICAgICAgICAgICAgICAyID0gTUFDc2VjXFxuKyAqICAgICAgICAgICAgICAzID0gUFNQIChIVyBkZWNyeXB0ZWQsIFBTUCBoZWFkZXIgcHJlc2VudClcXG4rICogICAgICAgICAgICAgIDQgPSBQU1AgZGVjYXAgKEhXIGRlY3J5cHRlZCBcXHUwMDI2IGRlY2Fwc3VsYXRlZClcXG4rICogICAgICAgICAgICAgIDUtNyA9IHJlc2VydmVkXFxuKyAqICAgWzIwOjE3XSA9IFBTUCB2ZXJzaW9uICg0IGJpdHMsIHZhbGlkIHdoZW4gcHJvdG8gPT0gUFNQIGRlY2FwKVxcbisgKiAgIDE2ICAgICAgPSByZXNlcnZlZFxcbisgKiAgIFsxNTowXSAgPSB1c2VkIGJ5IG90aGVyIHN1YnN5c3RlbXMgKGUuZy4gVEMpLlxcbisgKi9cXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLXFx0XFx0R0VOTUFTSygyMywgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTk9ORVxcdFxcdCgwIFxcdTAwM2NcXHUwMDNjIDIxKVxcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDXFx0KDIgXFx1MDAzY1xcdTAwM2MgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQXFx0XFx0KDMgXFx1MDAzY1xcdTAwM2MgMjEpXFxuKyNkZWZpbmUgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQXFx0KDQgXFx1MDAzY1xcdTAwM2MgMjEpXFxuK1xcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlRcXHQxN1xcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTS1xcdCgweEYgXFx1MDAzY1xcdTAwM2MgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVClcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIG1seDVlX2FjY2VsX2Zsb3dfdGFnKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuK3tcXG4rXFx0cmV0dXJuIGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlc29wX2Ryb3BfcXBuKSBcXHUwMDI2IDB4RkZGRkZGO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHUzMiBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHJldHVybiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFxcdTAwMjYgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFTSztcXG4rfVxcbitcXG4rI2VuZGlmIC8qIF9fTUxYNUVfRkxPV19UQUdfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcXG5pbmRleCAzMjk2MDhjNTkzMTNiLi4wODFjYjJmMzFiZTAxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcXG5AQCAtNCw2ICs0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlbl9hY2NlbC9lbl9hY2NlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZW5fYWNjZWwvZmxvd190YWcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVzd2l0Y2guaFxcXCJcXG4gI2luY2x1ZGUgXFxcImlwc2VjLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJmc19jb3JlLmhcXFwiXFxuQEAgLTE4OSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBpcHNlY19yeF9ydWxlX2FkZF9tYXRjaF9vYmooc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSxcXG4gXFx0XFx0XFx0XFx0IG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzIpO1xcbiBcXHRcXHRNTFg1X1NFVChmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXFx1MDAzZW1hdGNoX3ZhbHVlLFxcbiBcXHRcXHRcXHQgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfMixcXG4tXFx0XFx0XFx0IHNhX2VudHJ5LVxcdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpKTtcXG4rXFx0XFx0XFx0IHNhX2VudHJ5LVxcdTAwM2VpcHNlY19vYmpfaWQpO1xcbiBcXG4gXFx0XFx0c3BlYy1cXHUwMDNlbWF0Y2hfY3JpdGVyaWFfZW5hYmxlIHw9IE1MWDVfTUFUQ0hfTUlTQ19QQVJBTUVURVJTXzI7XFxuIFxcdH1cXG5AQCAtMjA2NSw3ICsyMDY3LDcgQEAgc3RhdGljIGludCByeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxcbiBcXHRpZiAoIWF0dHJzLVxcdTAwM2Vkcm9wKSB7XFxuIFxcdFxcdGlmIChyeCAhPSBpcHNlYy1cXHUwMDNlcnhfZXN3KVxcbiBcXHRcXHRcXHRlcnIgPSBzZXR1cF9tb2RpZnlfaGVhZGVyKGlwc2VjLCBhdHRycy1cXHUwMDNldHlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBzYV9lbnRyeS1cXHUwMDNlaXBzZWNfb2JqX2lkIHwgQklUKDMxKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzYV9lbnRyeS1cXHUwMDNlaXBzZWNfb2JqX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIFhGUk1fREVWX09GRkxPQURfSU4sIFxcdTAwMjZmbG93X2FjdCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZXJyID0gbWx4NV9lc3dfaXBzZWNfcnhfc2V0dXBfbW9kaWZ5X2hlYWRlcihzYV9lbnRyeSwgXFx1MDAyNmZsb3dfYWN0KTtcXG5AQCAtMjA5OCw2ICsyMTAwLDEwIEBAIHN0YXRpYyBpbnQgcnhfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcXG4gXFx0XFx0Zmxvd19hY3QuYWN0aW9uIHw9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZsb3dfYWN0LmFjdGlvbiB8PSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XFxuK1xcdGlmICghYXR0cnMtXFx1MDAzZWRyb3AgXFx1MDAyNlxcdTAwMjYgcnggIT0gaXBzZWMtXFx1MDAzZXJ4X2Vzdykge1xcbitcXHRcXHRzcGVjLVxcdTAwM2VmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdFxcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDO1xcbitcXHR9XFxuIFxcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuIFxcdGRlc3RbMF0uZnQgPSByeC1cXHUwMDNlZnQuc3RhdHVzO1xcbiBcXHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xcbkBAIC0yNTc0LDUzICsyNTgwLDE5IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfcmVhZF9zdGF0cyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgdm9pZCAqaXBzZWNfc3RhdHMpXFxuIFxcdH1cXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NTFg1X0VTV0lUQ0hcXG4tc3RhdGljIGludCBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBtbHg1X2Vzd2l0Y2ggKmVzdyA9IG1kZXYtXFx1MDAzZXByaXYuZXN3aXRjaDtcXG4tXFx0aW50IGVyciA9IDA7XFxuLVxcbi1cXHRpZiAoZXN3KSB7XFxuLVxcdFxcdGVyciA9IG1seDVfZXN3X2xvY2soZXN3KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG1kZXYtXFx1MDAzZW51bV9ibG9ja19pcHNlYykge1xcbi1cXHRcXHRlcnIgPSAtRUJVU1k7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHR9XFxuLVxcbi1cXHRtZGV2LVxcdTAwM2VudW1fYmxvY2tfdGMrKztcXG4tXFxuLXVubG9jazpcXG4tXFx0aWYgKGVzdylcXG4tXFx0XFx0bWx4NV9lc3dfdW5sb2NrKGVzdyk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyBpbnQgbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcXG4te1xcbi1cXHRpZiAobWRldi1cXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKVxcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi1cXG4tXFx0bWRldi1cXHUwMDNlbnVtX2Jsb2NrX3RjKys7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tc3RhdGljIHZvaWQgbWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbitzdGF0aWMgYm9vbCBhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcXG4ge1xcbi1cXHRtZGV2LVxcdTAwM2VudW1fYmxvY2tfdGMtLTtcXG4rXFx0cmV0dXJuIHNhX2VudHJ5LVxcdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUIHx8XFxuK1xcdFxcdHNhX2VudHJ5LVxcdTAwM2VhdHRycy5kaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTjtcXG4gfVxcbiBcXG4gaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXFxuIHtcXG4rXFx0Ym9vbCBibG9ja190YyA9IGFjY2VsX2lwc2VjX3Nob3VsZF9ibG9ja190YyhzYV9lbnRyeSk7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoc2FfZW50cnktXFx1MDAzZWF0dHJzLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tXFx0XFx0ZXJyID0gbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChzYV9lbnRyeS1cXHUwMDNlaXBzZWMtXFx1MDAzZW1kZXYpO1xcbitcXHRpZiAoYmxvY2tfdGMpIHtcXG4rXFx0XFx0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChzYV9lbnRyeS1cXHUwMDNlaXBzZWMtXFx1MDAzZW1kZXYpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTI2MzYsOCArMjYwOCw4IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9vdXQ6XFxuLVxcdGlmIChzYV9lbnRyeS1cXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcXG4tXFx0XFx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuK1xcdGlmIChibG9ja190YylcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTI2NTEsOCArMjYyMyw4IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfZGVsX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcXG4gXFx0aWYgKGlwc2VjX3J1bGUtXFx1MDAzZXBrdF9yZWZvcm1hdClcXG4gXFx0XFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhtZGV2LCBpcHNlY19ydWxlLVxcdTAwM2Vwa3RfcmVmb3JtYXQpO1xcbiBcXG4tXFx0aWYgKHNhX2VudHJ5LVxcdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxcbi1cXHRcXHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQobWRldik7XFxuK1xcdGlmIChhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpKVxcbitcXHRcXHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWRldik7XFxuIFxcbiBcXHRpZiAoc2FfZW50cnktXFx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX09VVCkge1xcbiBcXHRcXHR0eF9mdF9wdXQoc2FfZW50cnktXFx1MDAzZWlwc2VjLCBzYV9lbnRyeS1cXHUwMDNlYXR0cnMudHlwZSk7XFxuQEAgLTI2ODYsNyArMjY1OCw3IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcG9sKHN0cnVjdCBtbHg1ZV9pcHNlY19wb2xfZW50cnkgKnBvbF9lbnRyeSlcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0ZXJyID0gbWx4NWVfaXBzZWNfYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4rXFx0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTI3MDEsNyArMjY3Myw3IEBAIGludCBtbHg1ZV9hY2NlbF9pcHNlY19mc19hZGRfcG9sKHN0cnVjdCBtbHg1ZV9pcHNlY19wb2xfZW50cnkgKnBvbF9lbnRyeSlcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfb3V0Olxcbi1cXHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuK1xcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMjcxMiw3ICsyNjg0LDcgQEAgdm9pZCBtbHg1ZV9hY2NlbF9pcHNlY19mc19kZWxfcG9sKHN0cnVjdCBtbHg1ZV9pcHNlY19wb2xfZW50cnkgKnBvbF9lbnRyeSlcXG4gXFxuIFxcdG1seDVfZGVsX2Zsb3dfcnVsZXMoaXBzZWNfcnVsZS1cXHUwMDNlcnVsZSk7XFxuIFxcbi1cXHRtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVxcdTAwM2VpcHNlYy1cXHUwMDNlbWRldik7XFxuK1xcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXFx1MDAzZWlwc2VjLVxcdTAwM2VtZGV2KTtcXG4gXFxuIFxcdGlmIChwb2xfZW50cnktXFx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKSB7XFxuIFxcdFxcdHJ4X2Z0X3B1dF9wb2xpY3kocG9sX2VudHJ5LVxcdTAwM2VpcHNlYyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcXG5pbmRleCA0NWIwZDE5ZTczNWNiLi42ZGVhNTk3OGE0MGU4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oXFxuQEAgLTM4LDEwICszOCw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3R4cnguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2Zsb3dfdGFnLmhcXFwiXFxuIFxcbi0vKiBCaXQzMTogSVBzZWMgbWFya2VyLCBCaXQzMDogcmVzZXJ2ZWQsIEJpdDI5LTI0OiBJUHNlYyBzeW5kcm9tZSwgQml0MjMtMDogSVBzZWMgb2JqIGlkICovXFxuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFxcdTAwM2VcXHUwMDNlIDMwKSBcXHUwMDI2IDB4MykgPT0gMHgyKVxcbi0jZGVmaW5lIE1MWDVfSVBTRUNfTUVUQURBVEFfU1lORFJPTShtZXRhZGF0YSkgKCgobWV0YWRhdGEpIFxcdTAwM2VcXHUwMDNlIDI0KSBcXHUwMDI2IEdFTk1BU0soNSwgMCkpXFxuKy8qIElQc2VjIG9iaiBpZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzIzOjBdICovXFxuICNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcXHUwMDI2IEdFTk1BU0soMjMsIDApKVxcbiBcXG4gc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0YXRlIHtcXG5AQCAtNzQsNyArNzMsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtbHg1ZV9pcHNlY190eF9pZHNfbGVuKHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9pcHNlY19zdFxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXBzZWNfaXNfcnhfZmxvdyhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbiB7XFxuLVxcdHJldHVybiBNTFg1X0lQU0VDX01FVEFEQVRBX01BUktFUihiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWZ0X21ldGFkYXRhKSk7XFxuK1xcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XFxuK1xcbitcXHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9pcHNlY19lc2VnX21ldGEoc3RydWN0IG1seDVfd3FlX2V0aF9zZWcgKmVzZWcpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuY1xcbmluZGV4IGRhZmY1M2JhN2QwOWYuLmFhN2EyODk1NDg2MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gI2luY2x1ZGUgXFxcImVuLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsaWIvYXNvLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsaWIvY3J5cHRvLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlbl9hY2NlbC9lbl9hY2NlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZW5fYWNjZWwvbWFjc2VjLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE1MWDVfTUFDU0VDX0VQTl9TQ09QRV9NSUQgMHg4MDAwMDAwMExcXG5AQCAtMzI0LDYgKzMyNSw4IEBAIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhX2ZzKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcXG4gXFx0bWx4NV9tYWNzZWNfZnNfZGVsX3J1bGUobWFjc2VjLVxcdTAwM2VtZGV2LVxcdTAwM2VtYWNzZWNfZnMsIHNhLVxcdTAwM2VtYWNzZWNfcnVsZSwgYWN0aW9uLCBuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdGZzX2lkKTtcXG4gXFx0c2EtXFx1MDAzZW1hY3NlY19ydWxlID0gTlVMTDtcXG4rXFx0aWYgKCFpc190eClcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1hY3NlYy1cXHUwMDNlbWRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcXG5AQCAtMzQzLDYgKzM0Niw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2luaXRfc2FfZnMoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsXFxuIFxcdGNvbnN0IHN0cnVjdCBtYWNzZWNfdHhfc2MgKnR4X3NjID0gXFx1MDAyNmN0eC1cXHUwMDNlc2VjeS1cXHUwMDNldHhfc2M7XFxuIFxcdHN0cnVjdCBtbHg1X21hY3NlY19ydWxlX2F0dHJzIHJ1bGVfYXR0cnM7XFxuIFxcdHVuaW9uIG1seDVfbWFjc2VjX3J1bGUgKm1hY3NlY19ydWxlO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGlmIChpc190eCBcXHUwMDI2XFx1MDAyNiB0eF9zYy1cXHUwMDNlZW5jb2Rpbmdfc2EgIT0gc2EtXFx1MDAzZWFzc29jX251bSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTM1MywxMyArMzU3LDI2IEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2luaXRfc2FfZnMoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsXFxuIFxcdHJ1bGVfYXR0cnMuYWN0aW9uID0gKGlzX3R4KSA/IE1MWDVfQUNDRUxfTUFDU0VDX0FDVElPTl9FTkNSWVBUIDpcXG4gXFx0XFx0XFx0XFx0ICAgICAgTUxYNV9BQ0NFTF9NQUNTRUNfQUNUSU9OX0RFQ1JZUFQ7XFxuIFxcbitcXHRpZiAoIWlzX3R4KSB7XFxuK1xcdFxcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocHJpdi1cXHUwMDNlbWRldik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuIFxcdG1hY3NlY19ydWxlID0gbWx4NV9tYWNzZWNfZnNfYWRkX3J1bGUobWFjc2VjX2ZzLCBjdHgsIFxcdTAwMjZydWxlX2F0dHJzLCBmc19pZCk7XFxuLVxcdGlmICghbWFjc2VjX3J1bGUpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoIW1hY3NlY19ydWxlKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0X3VuYmxvY2tfdGM7XFxuK1xcdH1cXG4gXFxuIFxcdHNhLVxcdTAwM2VtYWNzZWNfcnVsZSA9IG1hY3NlY19ydWxlO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfdW5ibG9ja190YzpcXG4rXFx0aWYgKCFpc190eClcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKHByaXYtXFx1MDAzZW1kZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxcbkBAIC03MzUsMTIgKzc1MiwxMiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19hZGRfcnhzYyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcXG4gXFx0ICogYSBub24tTlVMTCBtZF9kc3Qgd2l0aCB1bmluaXRpYWxpc2VkIGNvbnRlbnRzLlxcbiBcXHQgKi9cXG4gXFx0ZXJyID0geGFfYWxsb2MoXFx1MDAyNm1hY3NlYy1cXHUwMDNlc2NfeGFycmF5LCBcXHUwMDI2c2NfeGFycmF5X2VsZW1lbnQtXFx1MDAzZWZzX2lkLCBzY194YXJyYXlfZWxlbWVudCxcXG4tXFx0XFx0ICAgICAgIFhBX0xJTUlUKDEsIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdCAgICAgICBYQV9MSU1JVCgxLCBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRpZiAoZXJyID09IC1FQlVTWSlcXG4gXFx0XFx0XFx0bmV0ZGV2X2VycihjdHgtXFx1MDAzZW5ldGRldixcXG4gXFx0XFx0XFx0XFx0ICAgXFxcIk1BQ3NlYyBvZmZsb2FkOiB1bmFibGUgdG8gY3JlYXRlIGVudHJ5IGZvciBSWCBTQyAoJWQgUnggU0NzIGFscmVhZHkgYWxsb2NhdGVkKVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpO1xcbitcXHRcXHRcXHRcXHQgICBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVgpO1xcbiBcXHRcXHRnb3RvIGRlc3Ryb3lfbWRfZHN0O1xcbiBcXHR9XFxuIFxcbkBAIC0xMTM3LDcgKzExNTQsMTIgQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcXG4gXFx0c3RydWN0IG1seDVlX21hY3NlY19zYSAqcnhfc2E7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XFxuIFxcdGludCBpLCBlcnIgPSAwO1xcbitcXHRib29sIGJsb2NrX3RjO1xcbiBcXG4rXFx0LyogQmVzdC1lZmZvcnQgVEMgYmxvY2sgYWNyb3NzIHRoZSBvcGVyYXRpb24sIHRvIHByZXZlbnQgYSBtaXN0aW1lZCBUQ1xcbitcXHQgKiBmaWx0ZXIgYWRkIGZyb20gcHJldmVudGluZyB0aGUgMm5kIGxvb3AgZnJvbSBoYXBwZW5pbmcuXFxuK1xcdCAqL1xcbitcXHRibG9ja190YyA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocHJpdi1cXHUwMDNlbWRldikgPT0gMDtcXG4gXFxuIFxcdGxpc3QgPSBcXHUwMDI2bWFjc2VjX2RldmljZS1cXHUwMDNlbWFjc2VjX3J4X3NjX2xpc3RfaGVhZDtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X3NjLCB0bXAsIGxpc3QsIHJ4X3NjX2xpc3RfZWxlbWVudCkge1xcbkBAIC0xMTY4LDYgKzExOTAsOCBAQCBzdGF0aWMgaW50IG1hY3NlY191cGRfc2VjeV9od19hZGRyZXNzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxcbiBcXG4gXFx0bWVtY3B5KG1hY3NlY19kZXZpY2UtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4gb3V0OlxcbitcXHRpZiAoYmxvY2tfdGMpXFxuK1xcdFxcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwcml2LVxcdTAwM2VtZGV2KTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTcwMCw3ICsxNzI0LDcgQEAgdm9pZCBtbHg1ZV9tYWNzZWNfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGlmICghbWFjc2VjKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRfSEFORExFKG1hY3NlY19tZXRhX2RhdGEpO1xcbitcXHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRBX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2NfeGFycmF5X2VsZW1lbnQgPSB4YV9sb2FkKFxcdTAwMjZtYWNzZWMtXFx1MDAzZXNjX3hhcnJheSwgZnNfaWQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmhcXG5pbmRleCAyN2RmNzJlMjMxMDZkLi41NzE2MjRmMmRiMTUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9tYWNzZWMuaFxcbkBAIC05LDYgKzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWx4NS9kcml2ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2Zsb3dfdGFnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJsaWIvbWFjc2VjX2ZzLmhcXFwiXFxuIFxcbiBzdHJ1Y3QgbWx4NWVfcHJpdjtcXG5AQCAtMzEsNyArMzIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX3NrYl9pc19vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4ge1xcbi1cXHRyZXR1cm4gTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlZnRfbWV0YWRhdGEpKTtcXG4rXFx0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcXG4rXFxuK1xcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XFxuIH1cXG4gXFxuIHZvaWQgbWx4NWVfbWFjc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcXG5pbmRleCA3M2IyMzIzNzkyNjNhLi5hZDhkYmQ4YzJmMjc5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbkBAIC02LDcgKzYsOSBAQFxcbiAjaW5jbHVkZSBcXFwibWx4NV9jb3JlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJwc3AuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImxpYi9jcnlwdG8uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2VuX2FjY2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJlbl9hY2NlbC9wc3AuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL3BzcF9yeHR4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJmc19jb3JlLmhcXFwiXFxuIFxcbiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHtcXG5AQCAtMjEsNiArMjMsMTMgQEAgZW51bSBhY2NlbF9wc3Bfc3luZHJvbWUge1xcbiBcXHRQU1BfQkFEX1RSQUlMRVIsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3QgdTggcHNwX3N1cHBvcnRlZF92ZXJzaW9uc1tdID0ge1xcbitcXHRQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMTI4LFxcbitcXHRQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMjU2LFxcbit9O1xcbitcXG4rI2RlZmluZSBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUyBBUlJBWV9TSVpFKHBzcF9zdXBwb3J0ZWRfdmVyc2lvbnMpXFxuK1xcbiBzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG5AQCAtNDEsNyArNTAsNyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUge1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKm1pc3NfcnVsZTtcXG4tXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqcnhfbW9kaWZ5X2hkcjtcXG4rXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XFxuIH07XFxuIFxcbkBAIC01Miw2ICs2MSwxNSBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVkcF9ydWxlc1tBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUge1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZHJvcF9ncm91cDtcXG4rXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcXG4rXFx0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGVbTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlNdO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqdW5zdXBwb3J0ZWRfcnVsZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBtbHg1ZV9wc3BfZnMge1xcbiBcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldjtcXG4gXFx0c3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7XFxuQEAgLTYzLDEyICs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcXG4gXFx0c3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XFxuIFxcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcXG4rXFx0LyogV2hlbiBzZXQsIHN0ZWVyaW5nIGlzIGNvbmZpZ3VyZWQgdG8gZGVjYXBzdWxhdGUgUFNQIChyZW1vdmUgVURQK1BTUFxcbitcXHQgKiBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlcikgYW5kIGhhbmQgb2ZmIHRoZSBTUEkgaW4gY3FlLmZ0X21ldGFkYXRhLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBkZWNhcF9lbmFibGVkO1xcbiBcXG4gXFx0c3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIGRlY3J5cHRbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XFxuIFxcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7XFxuK1xcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfdGFibGUgcng7XFxuIH07XFxuIFxcbitzdGF0aWMgYm9vbCBzaGFtcG9fZW5hYmxlZChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY2hhbm5lbHMucGFyYW1zLnBhY2tldF9tZXJnZS50eXBlID09XFxuK1xcdFxcdE1MWDVFX1BBQ0tFVF9NRVJHRV9TSEFNUE87XFxuK31cXG4rXFxuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXFxuIHN0YXRpYyBlbnVtIG1seDVfdHJhZmZpY190eXBlcyBmc19wc3AydHQoZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpKVxcbiB7XFxuQEAgLTExMCw2ICsxMzksMTUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKiptb2RoZHIpXFxuK3tcXG4rXFx0aWYgKCptb2RoZHIpIHtcXG4rXFx0XFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZGV2LCAqbW9kaGRyKTtcXG4rXFx0XFx0Km1vZGhkciA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxcbiB7XFxuQEAgLTQwMiwxNSArNDQwLDE2MSBAQCBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljXFxuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgKmRlY2FwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmRlY2FwLVxcdTAwM2V1bnN1cHBvcnRlZF9ydWxlKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TOyBpKyspXFxuK1xcdFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZkZWNhcC1cXHUwMDNlcnVsZVtpXSk7XFxuK1xcdGlmIChkZWNhcC1cXHUwMDNlcmVmb3JtYXQpIHtcXG4rXFx0XFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhmcy1cXHUwMDNlbWRldiwgZGVjYXAtXFx1MDAzZXJlZm9ybWF0KTtcXG4rXFx0XFx0ZGVjYXAtXFx1MDAzZXJlZm9ybWF0ID0gTlVMTDtcXG4rXFx0fVxcbitcXHRhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZGVjYXAtXFx1MDAzZW1vZGlmeV9oZHIpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZkZWNhcC1cXHUwMDNlZHJvcF9ncm91cCk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFxcdTAwMjZkZWNhcC1cXHUwMDNlZnQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLCB1OCB2ZXJzaW9uKVxcbit7XFxuK1xcdHZvaWQgKm1pc2NfcGFyYW1zXzY7XFxuK1xcbitcXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XFxuK1xcdHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU182O1xcbitcXHRtaXNjX3BhcmFtc182ID0gTUxYNV9BRERSX09GKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfY3JpdGVyaWEsXFxuK1xcdFxcdFxcdFxcdCAgICAgbWlzY19wYXJhbWV0ZXJzXzYpO1xcbitcXHRNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uKTtcXG4rXFx0bWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXFx1MDAzZW1hdGNoX3ZhbHVlLFxcbitcXHRcXHRcXHRcXHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcXG4rXFx0TUxYNV9TRVQoZnRlX21hdGNoX3NldF9taXNjNiwgbWlzY19wYXJhbXNfNiwgcHNwX3ZlcnNpb24sIHZlcnNpb24pO1xcbit9XFxuK1xcbitzdGF0aWNcXG4raW50IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY2FwX3RhYmxlICpkZWNhcClcXG4re1xcbitcXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9wa3RfcmVmb3JtYXRfcGFyYW1zIHJlZm9ybWF0X3BhcmFtcyA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcXG4rXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cXHUwMDNlbWRldjtcXG4rXFx0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcXG4rXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcXG4rXFx0aW50IGksIGVyciA9IDA7XFxuK1xcbitcXHRzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTtcXG4rXFx0aWYgKCFzcGVjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdC8qIENyZWF0ZSBGVCAqL1xcbitcXHRmdF9hdHRyLm1heF9mdGUgPSAxICsgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7XFxuK1xcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfREVDQVBfRlRfTEVWRUw7XFxuK1xcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbitcXHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFxcdTAwMjZmdF9hdHRyLCBcXHUwMDI2ZGVjYXAtXFx1MDAzZWZ0KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgZGVjYXAgcnggZnQgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9zcGVjO1xcbitcXHR9XFxuK1xcbitcXHQvKiBDcmVhdGUgZHJvcCBncm91cCAqL1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoZGVjYXAtXFx1MDAzZWZ0LCBcXHUwMDI2ZGVjYXAtXFx1MDAzZWRyb3BfZ3JvdXApO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG1seDVfY29yZV9lcnIobWRldixcXG4rXFx0XFx0XFx0ICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBkcm9wX2dyb3VwIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBZGQgZGVmYXVsdCBkcm9wIHJ1bGUgKi9cXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoZGVjYXAtXFx1MDAzZWZ0LCBOVUxMLCBmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZkZWNhcC1cXHUwMDNldW5zdXBwb3J0ZWRfcnVsZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIGRlY2FwIHVuc3VwcG9ydGVkIHZlcnNpb25zIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbW9kaWZ5X2hkcjogY29weSBTUEkgZnJvbSBSRUdfQ18wIHRvIFJFR19CICovXFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXFxuK1xcdFxcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQ18wKTtcXG4rXFx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMCk7ICAvKiAwID0gMzIgYml0cyAqL1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsXFxuK1xcdFxcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApO1xcbitcXG4rXFx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgMSwgYWN0aW9uKTtcXG4rXFx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcdH1cXG4rXFx0ZGVjYXAtXFx1MDAzZW1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbitcXG4rXFx0LyogcGt0X3JlZm9ybWF0OiBkZWNhcCBQU1AgdHJhbnNwb3J0ICovXFxuK1xcdHJlZm9ybWF0X3BhcmFtcy50eXBlID0gTUxYNV9SRUZPUk1BVF9UWVBFX1JFTU9WRV9QU1BfVFJBTlNQT1JUO1xcbitcXHRyZWZvcm1hdCA9IG1seDVfcGFja2V0X3JlZm9ybWF0X2FsbG9jKG1kZXYsIFxcdTAwMjZyZWZvcm1hdF9wYXJhbXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMKTtcXG4rXFx0aWYgKElTX0VSUihyZWZvcm1hdCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihyZWZvcm1hdCk7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0fVxcbitcXHRkZWNhcC1cXHUwMDNlcmVmb3JtYXQgPSByZWZvcm1hdDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUzsgaSsrKSB7XFxuK1xcdFxcdHU4IHZlcnNpb24gPSBwc3Bfc3VwcG9ydGVkX3ZlcnNpb25zW2ldO1xcbitcXHRcXHRzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9O1xcbitcXG4rXFx0XFx0LyogbWF0Y2godmVyc2lvbikgPVxcdTAwM2UgZGVjYXAsIGNvcHkgU1BJLCBmd2QgdG8gcnggRlQgKi9cXG4rXFx0XFx0c2V0dXBfZnRlX3BzcF92ZXJzaW9uKHNwZWMsIHZlcnNpb24pO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT3ZlcnJpZGUgdGhlIGZsb3cgdGFnIHNldCBpbiB0aGUgZGVjcnlwdCB0YWJsZSB3aXRoXFxuK1xcdFxcdCAqIHRoZSBkZWNhcCBQU1AgbWFya2VyIGFuZCB2ZXJzaW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3BlYy1cXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdFxcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUF9ERUNBUCB8XFxuK1xcdFxcdFxcdCgodTMyKXZlcnNpb24gXFx1MDAzY1xcdTAwM2MgTUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVCk7XFxuK1xcbitcXHRcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fUEFDS0VUX1JFRk9STUFUIHxcXG4rXFx0XFx0XFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxcbitcXHRcXHRcXHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XFxuK1xcdFxcdGZsb3dfYWN0LnBrdF9yZWZvcm1hdCA9IHJlZm9ybWF0O1xcbitcXHRcXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4rXFx0XFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4rXFx0XFx0ZGVzdC5mdCA9IGZzLVxcdTAwM2VyeC5mdDtcXG4rXFxuK1xcdFxcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY2FwLVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBcXHUwMDI2ZGVzdCwgMSk7XFxuK1xcdFxcdGlmIChJU19FUlIocnVsZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihydWxlKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHR9XFxuK1xcdFxcdGRlY2FwLVxcdTAwM2VydWxlW2ldID0gcnVsZTtcXG4rXFx0fVxcbitcXHRnb3RvIG91dF9zcGVjO1xcbitcXG4rb3V0X2VycjpcXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIGRlY2FwKTtcXG4rb3V0X3NwZWM6XFxuK1xcdGt2ZnJlZShzcGVjKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlICpkZWNyeXB0KVxcbiB7XFxuIFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZkZWNyeXB0LVxcdTAwM2VydWxlKTtcXG4tXFx0aWYgKGRlY3J5cHQtXFx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcXG4tXFx0XFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXFx1MDAzZW1kZXYsIGRlY3J5cHQtXFx1MDAzZXJ4X21vZGlmeV9oZHIpO1xcbi1cXHRcXHRkZWNyeXB0LVxcdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcXG4tXFx0fVxcbitcXHRhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlbW9kaWZ5X2hkcik7XFxuIFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZkZWNyeXB0LVxcdTAwM2VtaXNzX3J1bGUpO1xcbiBcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZkZWNyeXB0LVxcdTAwM2VtaXNzX2dyb3VwKTtcXG4gXFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXFx1MDAyNmRlY3J5cHQtXFx1MDAzZWZ0KTtcXG5AQCAtNDMxLDExICs2MTUsMTEgQEAgYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gKmRlZmF1bHRfZGVzdClcXG4ge1xcbiBcXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xcbi1cXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyID0gTlVMTDtcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XFxuIFxcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXFx1MDAzZW1kZXY7XFxuIFxcdE1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7XFxuK1xcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGhkcjtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcXG4gXFx0aW50IGVyciA9IDA7XFxuQEAgLTQ3OSwzMCArNjYzLDM2IEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0fVxcbiBcXHRkZWNyeXB0LVxcdTAwM2VtaXNzX3J1bGUgPSBydWxlO1xcbiBcXG4tXFx0LyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi9cXG4tXFx0c2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpO1xcbi1cXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcXG4tXFx0LyogU2V0IGJpdFszMSwgMzBdIFBTUCBtYXJrZXIgKi9cXG4tI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpXFxuLVxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTtcXG4tXFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBmaWVsZCwgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xcbi1cXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIE1MWDVFX1BTUF9NQVJLRVJfQklUKTtcXG4tXFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBvZmZzZXQsIDApO1xcbi1cXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgMzIpO1xcbi1cXG4tXFx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSwgYWN0aW9uKTtcXG4tXFx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGFsbG9jIHBzcCBzZXQgbW9kaWZ5X2hlYWRlcl9pZCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuLVxcdFxcdG1vZGlmeV9oZHIgPSBOVUxMO1xcbitcXHQvKiBDcmVhdGUgbW9kaWZ5X2hkciB0byBjb3B5IFNQSSB0byBSRUdfQ18wICovXFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXFxuK1xcdFxcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfSEVBREVSXzEpO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfb2Zmc2V0LCAwKTtcXG4rXFx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAwKTsgIC8qIDAgPSAzMiBiaXRzICovXFxuK1xcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9maWVsZCxcXG4rXFx0XFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19DXzApO1xcbitcXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3Rfb2Zmc2V0LCAwKTtcXG4rXFxuK1xcdG1vZGhkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCwgMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBhY3Rpb24pO1xcbitcXHRpZiAoSVNfRVJSKG1vZGhkcikpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihtb2RoZHIpO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0ZGVjcnlwdC1cXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XFxuK1xcdGRlY3J5cHQtXFx1MDAzZW1vZGlmeV9oZHIgPSBtb2RoZHI7XFxuIFxcbi1cXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxcbi1cXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XFxuLVxcdFxcdFxcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFI7XFxuLVxcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbitcXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xcbitcXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XFxuK1xcbitcXHQvKiBTZXQgUFNQIG1hcmtlciB2aWEgZmxvd190YWcgKi9cXG4rXFx0c3BlYy1cXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUDtcXG4rXFxuK1xcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xcbitcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxcbitcXHRcXHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUiB8XFxuK1xcdFxcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcXG4rXFx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGhkcjtcXG4gXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4gXFx0ZGVzdC5mdCA9IGZzLVxcdTAwM2VjaGVjay5mdDtcXG4gXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjcnlwdC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmRlc3QsIDEpO1xcbkBAIC01MjMsOSArNzEzLDUwIEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfcmVjb25maWd1cmUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIGRlY2FwX3dhbnRlZClcXG4re1xcbitcXHRib29sIGRlY2FwX3N1cHBvcnRlZCA9XFxuK1xcdFxcdE1MWDVfQ0FQX0ZMT1dUQUJMRShmcy1cXHUwMDNlbWRldixcXG4rXFx0XFx0XFx0XFx0ICAgZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlZm9ybWF0X2RlbF9wc3BfdHJhbnNwb3J0KTtcXG4rXFx0Ym9vbCBkZWNhcF9lbmFibGUgPSBkZWNhcF93YW50ZWQgXFx1MDAyNlxcdTAwMjYgZGVjYXBfc3VwcG9ydGVkO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIENyZWF0ZSB0aGUgZGVjYXAgdGFibGUgaWYgbmVlZGVkLiAqL1xcbitcXHRpZiAoZGVjYXBfZW5hYmxlIFxcdTAwMjZcXHUwMDI2ICFmcy1cXHUwMDNlZGVjYXAuZnQpIHtcXG4rXFx0XFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2NyZWF0ZShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNhcCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0bWx4NV9jb3JlX3dhcm4oZnMtXFx1MDAzZW1kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0XFx0ZGVjYXBfZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZGVjYXBfZW5hYmxlID09IGZzLVxcdTAwM2VkZWNhcF9lbmFibGVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJlZGlyZWN0IHRyYWZmaWMgdG8gdGhlIGNvcnJlY3QgdGFibGUuICovXFxuK1xcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuK1xcdGRlc3QuZnQgPSBkZWNhcF9lbmFibGUgPyBmcy1cXHUwMDNlZGVjYXAuZnQgOiBmcy1cXHUwMDNlcnguZnQ7XFxuK1xcdGVyciA9IG1seDVfbW9kaWZ5X3J1bGVfZGVzdGluYXRpb24oZnMtXFx1MDAzZWNoZWNrLnJ1bGUsIFxcdTAwMjZkZXN0LCBOVUxMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveV9mdDtcXG4rXFxuK1xcdGZzLVxcdTAwM2VkZWNhcF9lbmFibGVkID0gZGVjYXBfZW5hYmxlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZGVzdHJveV9mdDpcXG4rXFx0aWYgKGRlY2FwX2VuYWJsZSlcXG4rXFx0XFx0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIFxcdTAwMjZmcy1cXHUwMDNlZGVjYXApO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuK1xcdGJvb2wgdGNfYmxvY2tlZCA9IGZzLVxcdTAwM2VyeC5mdDtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHQvKiBkaXNjb25uZWN0ICovXFxuQEAgLTUzNCwxOSArNzY1LDI5IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbiBcXHRcXHRhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KGZzLCBcXHUwMDI2ZnMtXFx1MDAzZWRlY3J5cHRbaV0pO1xcbiBcXHR9XFxuIFxcdGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KFxcdTAwMjZmcy1cXHUwMDNlY2hlY2spO1xcbitcXHRhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfZGVzdHJveShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNhcCk7XFxuIFxcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFxcdTAwMjZmcy1cXHUwMDNlcngpO1xcbitcXHRpZiAodGNfYmxvY2tlZClcXG4rXFx0XFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLVxcdTAwM2VtZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbitcXHRcXHRcXHRcXHQgIGJvb2wgZGVjYXBfZW5hYmxlLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbitcXHRlcnIgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKGZzLVxcdTAwM2VtZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJUQyBvZmZsb2FkIGFjdGl2ZSwgY2Fubm90IGVuYWJsZSBQU1BcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Z0X2NyZWF0ZShmcywgXFx1MDAyNmZzLVxcdTAwM2VyeCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlXFxcIik7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX3VuYmxvY2tfdGM7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoZnMsIFxcdTAwMjZmcy1cXHUwMDNlY2hlY2spO1xcbkBAIC01NzMsNiArODE0LDEyIEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4gXFx0XFx0bWx4NV90dGNfZndkX2Rlc3QodHRjLCBmc19wc3AydHQoaSksIFxcdTAwMjZkZXN0KTtcXG4gXFx0fVxcbiBcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X3JlY29uZmlndXJlKGZzLCBkZWNhcF9lbmFibGUpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCBSWCBzdGVlcmluZyBjb25maWcgZm9yIEhXIEdST1xcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9kZWNyeXB0X2Z0O1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9kZWNyeXB0X2Z0OlxcbkBAIC01ODMsNiArODMwLDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbiBcXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcXHUwMDI2ZnMtXFx1MDAzZWNoZWNrKTtcXG4gZXJyX2Z0OlxcbiBcXHRhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveShcXHUwMDI2ZnMtXFx1MDAzZXJ4KTtcXG4rZXJyX3VuYmxvY2tfdGM6XFxuK1xcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChmcy1cXHUwMDNlbWRldik7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTgzOSw3ICsxMDg4LDggQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMsIGV4dGFjayk7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cXHUwMDNlcHNwLVxcdTAwM2Vmcywgc2hhbXBvX2VuYWJsZWQocHJpdiksXFxuK1xcdFxcdFxcdFxcdCAgICAgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTExMTYsMyArMTM2NiwxNCBAQCB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiBcXHRwcml2LVxcdTAwM2Vwc3AgPSBOVUxMO1xcbiBcXHRrZnJlZShwc3ApO1xcbiB9XFxuK1xcbitpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVxcdTAwM2Vwc3A7XFxuK1xcbitcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChwcml2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRpZiAoIXBzcCB8fCAhcHNwLVxcdTAwM2Vmcy1cXHUwMDNlY2hlY2suZnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShwc3AtXFx1MDAzZWZzLCBzaGFtcG9fZW5hYmxlZChwcml2KSk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXFxuaW5kZXggM2Y0NDFlN2RkNTVhYy4uNzZmNmM2OWRlMGU5MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcXG5AQCAtNDksNiArNDksNyBAQCBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gdm9pZCBtbHg1ZV9wc3BfdW5yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbitpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuQEAgLTYxLDUgKzYyLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfdW5yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NTFg1X0VOX1BTUCAqL1xcbiAjZW5kaWYgLyogX19NTFg1RV9BQ0NFTF9QU1BfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcXG5pbmRleCAzNDhmZDdhOTYyNjE1Li4yYmVmZmVlMTQyNzhkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcXG5AQCAtMTE4LDEwICsxMTgsMjUgQEAgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHUxNiBkZXZfaWQgPSBwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZXBzZC1cXHUwMDNlaWQ7XFxuLVxcdGJvb2wgc3RyaXBfaWN2ID0gdHJ1ZTtcXG4tXFx0dTggZ2VuZXJhdGlvbiA9IDA7XFxuK1xcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xcbitcXG4rXFx0aWYgKG1seDVlX3BzcF9pc19kZWNhcChjcWUpKSB7XFxuK1xcdFxcdC8qIFVEUCArIFBTUCBoZWFkZXJzIGFuZCBQU1AgdHJhaWxlciByZW1vdmVkIGJ5IEhXLlxcbitcXHRcXHQgKiBDb25zdHJ1Y3QgdGhlIFBTUCBleHRlbnNpb24gZnJvbSBDUUUgbWV0YWRhdGEuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFwc2UpKVxcbitcXHRcXHRcXHRnb3RvIGRyb3A7XFxuK1xcbitcXHRcXHRwc2UtXFx1MDAzZXNwaSA9IG1seDVlX3BzcF9nZXRfc3BpKGNxZSk7XFxuK1xcdFxcdHBzZS1cXHUwMDNldmVyc2lvbiA9IG1seDVlX3BzcF9nZXRfdmVyc2lvbihjcWUpO1xcbitcXHRcXHRwc2UtXFx1MDAzZWRldl9pZCA9IGRldl9pZDtcXG4rXFx0XFx0cHNlLVxcdTAwM2VnZW5lcmF0aW9uID0gMDtcXG4rXFx0XFx0c2tiLVxcdTAwM2VkZWNyeXB0ZWQgPSAxO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChwc3BfZGV2X3Jjdihza2IsIGRldl9pZCwgZ2VuZXJhdGlvbiwgc3RyaXBfaWN2KSlcXG4rXFx0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCAwLCB0cnVlKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4gXFx0c2tiLVxcdTAwM2VkZWNyeXB0ZWQgPSAxO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXFxuaW5kZXggMmIwODBjMzljYzM3ZS4uNDFiNjAyNTliM2JjNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXFxuQEAgLTksMTAgKzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BzcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiZW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3R4cnguaFxcXCJcXG4tXFxuLS8qIEJpdDMwOiBQU1AgbWFya2VyLCBCaXQyMi0wOiBQU1Agb2JqIGlkICovXFxuLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcXHUwMDNlXFx1MDAzZSAzMCkgXFx1MDAyNiAweDMpID09IDB4MylcXG4tI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcXHUwMDI2IEdFTk1BU0soMjIsIDApKVxcbisjaW5jbHVkZSBcXFwiZW5fYWNjZWwvZmxvd190YWcuaFxcXCJcXG4gXFxuIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUge1xcbiBcXHR1MzIgdGFpbGVuO1xcbkBAIC04Miw3ICs3OSwyOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtbHg1ZV9wc3BfdHhfaWRzX2xlbihzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4ge1xcbi1cXHRyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlZnRfbWV0YWRhdGEpKTtcXG4rXFx0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcXG4rXFxuK1xcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1AgfHxcXG4rXFx0XFx0cHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQO1xcbitcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19kZWNhcChzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XFxuK1xcbitcXHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHU4IG1seDVlX3BzcF9nZXRfdmVyc2lvbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHJldHVybiAobWx4NWVfYWNjZWxfZmxvd190YWcoY3FlKSBcXHUwMDI2IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfTUFTSykgXFx1MDAzZVxcdTAwM2VcXG4rXFx0XFx0TUxYNUVfQUNDRUxfRkxPV19UQUdfUFNQX1ZFUl9TSElGVDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4re1xcbitcXHRyZXR1cm4gY3FlLVxcdTAwM2VmdF9tZXRhZGF0YTtcXG4gfVxcbiBcXG4gYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuQEAgLTExMCw2ICsxMjksMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19kZWNhcChzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1OCBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBfX2JlMzIgbWx4NWVfcHNwX2dldF9zcGkoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5pbmRleCAzYjlkNDJjN2U5YzI4Li4zYzZlZjUwMGQwZmIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXFxuQEAgLTYyODYsNyArNjI4NiwxMyBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFxuIHN0YXRpYyBpbnQgbWx4NWVfdXBkYXRlX25pY19yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRyZXR1cm4gbWx4NWVfcmVmcmVzaF90aXJzKHByaXYtXFx1MDAzZW1kZXYsIGZhbHNlLCBmYWxzZSk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtbHg1ZV9yZWZyZXNoX3RpcnMocHJpdi1cXHUwMDNlbWRldiwgZmFsc2UsIGZhbHNlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHJldHVybiBtbHg1ZV9hY2NlbF91cGRhdGVfcngocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWx4NWVfcHJvZmlsZSBtbHg1ZV9uaWNfcHJvZmlsZSA9IHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xcbmluZGV4IGZiNzExMGIxYjY4MzQuLmM3ZWFhYjNmNzk2N2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xcbkBAIC0yMjIxLDYgKzIyMjEsMzMgQEAgc3RhdGljIGJvb2wgbWx4NWVfaHdfZ3JvX3NrYl9oYXNfZW5vdWdoX3NwYWNlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBwYWdlX3NpemUgKiBucl9mcmFncyArIGRhdGFfYmNudCBcXHUwMDNjPSBHUk9fTEVHQUNZX01BWF9TSVpFO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fcHNwX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19NTFg1X0VOX1BTUFxcbitcXHRzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZSA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfUFNQKTtcXG4rXFx0Ym9vbCBpc19wc3AgPSBtbHg1ZV9wc3BfaXNfcnhfZmxvdyhjcWUpO1xcbitcXG4rXFx0aWYgKGxpa2VseSghaXNfcHNwIFxcdTAwMjZcXHUwMDI2ICFwc2UpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIE5vIG1hdGNoIG9uIFBTUCBzdGF0dXMgY2hhbmdlIChubyBjcnlwdG8gLVxcdTAwM2UgY3J5cHRvIG9yIHZpY2UtdmVyc2EpLiAqL1xcbitcXHRpZiAodW5saWtlbHkoaXNfcHNwICE9ICEhcHNlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogU1BJIGFuZCB2ZXJzaW9uIGFyZSBvbmx5IGF2YWlsYWJsZSBpbiBDUUUgbWV0YWRhdGEgZm9yIGRlY2FwIGZsb3dzLlxcbitcXHQgKiBOb24tZGVjYXAgUFNQIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUsIGZvcmNlIGEgZmx1c2guXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoIW1seDVlX3BzcF9pc19kZWNhcChjcWUpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogTm8gbWF0Y2ggb24gc2VjdXJpdHkgcGFyYW1ldGVycyBjaGFuZ2UuICovXFxuK1xcdHJldHVybiBwc2UtXFx1MDAzZXNwaSA9PSBtbHg1ZV9wc3BfZ2V0X3NwaShjcWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdHBzZS1cXHUwMDNldmVyc2lvbiA9PSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIHRydWU7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbiB7XFxuIFxcdHUxNiBkYXRhX2JjbnRcXHRcXHQ9IG1wd3JxX2dldF9jcWVfYnl0ZV9jbnQoY3FlKSAtIGNxZS1cXHUwMDNlc2hhbXBvLmhlYWRlcl9zaXplO1xcbkBAIC0yMjU4LDggKzIyODUsOSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcVxcbiBcXHRkYXRhX29mZnNldCA9IHdxZV9vZmZzZXQgXFx1MDAyNiAocGFnZV9zaXplIC0gMSk7XFxuIFxcdHBhZ2VfaWR4ID0gd3FlX29mZnNldCBcXHUwMDNlXFx1MDAzZSBycS1cXHUwMDNlbXB3cWUucGFnZV9zaGlmdDtcXG4gXFx0aWYgKCpza2IgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICEobWF0Y2ggXFx1MDAyNlxcdTAwMjYgbWx4NWVfaHdfZ3JvX3NrYl9oYXNfZW5vdWdoX3NwYWNlKCpza2IsIGRhdGFfYmNudCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHBhZ2Vfc2l6ZSkpKSB7XFxuK1xcdCAgICAhKG1hdGNoIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsIHBhZ2Vfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgbWx4NWVfaHdfZ3JvX3BzcF9tYXRjaCgqc2tiLCBjcWUpKSkge1xcbiBcXHRcXHRtYXRjaCA9IGZhbHNlO1xcbiBcXHRcXHRtbHg1ZV9zaGFtcG9fZmx1c2hfc2tiKHJxLCBjcWUsIG1hdGNoKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jXFxuaW5kZXggMWJjN2I5MDE5MTI0YS4uNzAxOTVmY2RkZmM4MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jXFxuQEAgLTQ4MTEsMTQgKzQ4MTEsMTQgQEAgc3RhdGljIGJvb2wgaXNfZmxvd19ydWxlX2R1cGxpY2F0ZV9hbGxvd2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiBuZXRpZl9pc19sYWdfcG9ydChkZXYpIFxcdTAwMjZcXHUwMDI2IHJwcml2IFxcdTAwMjZcXHUwMDI2IHJwcml2LVxcdTAwM2VyZXAtXFx1MDAzZXZwb3J0ICE9IE1MWDVfVlBPUlRfVVBMSU5LO1xcbiB9XFxuIFxcbi0vKiBBcyBJUHNlYyBhbmQgVEMgb3JkZXIgaXMgbm90IGFsaWduZWQgYmV0d2VlbiBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUtb2ZmbG9hZCxcXG4tICogZWl0aGVyIElQc2VjIG9mZmxvYWQgb3IgVEMgb2ZmbG9hZCwgbm90IGJvdGgsIGlzIGFsbG93ZWQgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxcbisvKiBUQyBvZmZsb2FkIGFuZCBhY2NlbCBwcm90b2NvbHMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgZmxvd190YWcgd2l0aFxcbisgKiBzdGVlcmluZyBydWxlcyBhbmQgdGhleSBjYW5ub3Qgc2ltdWx0YW5lb3VzbHkgb3BlcmF0ZSBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuXFxuKyAqIEFkZGl0aW9uYWxseSwgYXMgSVBzZWMgYW5kIFRDIG9yZGVyIGlzIG5vdCBhbGlnbmVkIGJldHdlZW4gc29mdHdhcmUgYW5kXFxuKyAqIGhhcmR3YXJlLW9mZmxvYWQsIG9ubHkgb25lIGlzIGFsbG93ZWQgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitzdGF0aWMgYm9vbCBpc190Y19hY2NlbF9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01MWDVfRU5fSVBTRUMpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbiBcXHRpZiAoZmlsdGVyICE9IHByaXYtXFx1MDAzZW5ldGRldilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG5AQCAtNDgyOCwyNyArNDgyOCwzNSBAQCBzdGF0aWMgYm9vbCBpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtbHg1ZV90Y19ibG9ja19pcHNlY19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitzdGF0aWMgaW50IG1seDVlX3RjX2Jsb2NrX2FjY2VsX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuLVxcdGlmICghaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXFxuK1xcdGlmICghaXNfdGNfYWNjZWxfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKG1kZXYtXFx1MDAzZW51bV9ibG9ja190YylcXG4tXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFxuLVxcdG1kZXYtXFx1MDAzZW51bV9ibG9ja19pcHNlYysrO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xcbitcXHRpZiAobWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5udW1fdGMpXFxuK1xcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCsrO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitzdGF0aWMgdm9pZCBtbHg1ZV90Y191bmJsb2NrX2FjY2VsX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4tXFx0aWYgKCFpc190Y19pcHNlY19vcmRlcl9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcXG4rXFx0aWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNlbWRldi1cXHUwMDNlbnVtX2Jsb2NrX2lwc2VjLS07XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuK1xcdGlmICghV0FSTl9PTl9PTkNFKCFwcml2LVxcdTAwM2VtZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCkpXFxuK1xcdFxcdHByaXYtXFx1MDAzZW1kZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subnVtX2FjY2VsLS07XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbWRldi1cXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcXG4gfVxcbiBcXG4gaW50IG1seDVlX2NvbmZpZ3VyZV9mbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXFxuQEAgLTQ4NjMsNyArNDg3MSw3IEBAIGludCBtbHg1ZV9jb25maWd1cmVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBcXHRpZiAoIW1seDVfZXN3X2hvbGQocHJpdi1cXHUwMDNlbWRldikpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcbi1cXHRlcnIgPSBtbHg1ZV90Y19ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7XFxuK1xcdGVyciA9IG1seDVlX3RjX2Jsb2NrX2FjY2VsX29mZmxvYWQoZGV2LCBwcml2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlc3dfcmVsZWFzZTtcXG4gXFxuQEAgLTQ5MTIsNyArNDkyMCw3IEBAIGludCBtbHg1ZV9jb25maWd1cmVfZmxvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBlcnJfZnJlZTpcXG4gXFx0bWx4NWVfZmxvd19wdXQocHJpdiwgZmxvdyk7XFxuIG91dDpcXG4tXFx0bWx4NWVfdGNfdW5ibG9ja19pcHNlY19vZmZsb2FkKGRldiwgcHJpdik7XFxuK1xcdG1seDVlX3RjX3VuYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpO1xcbiBcXHRtbHg1X2Vzd19wdXQocHJpdi1cXHUwMDNlbWRldik7XFxuIGVzd19yZWxlYXNlOlxcbiBcXHRtbHg1X2Vzd19yZWxlYXNlKHByaXYtXFx1MDAzZW1kZXYpO1xcbkBAIC00OTU1LDcgKzQ5NjMsNyBAQCBpbnQgbWx4NWVfZGVsZXRlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG4gXFx0dHJhY2VfbWx4NWVfZGVsZXRlX2Zsb3dlcihmKTtcXG4gXFx0bWx4NWVfZmxvd19wdXQocHJpdiwgZmxvdyk7XFxuIFxcbi1cXHRtbHg1ZV90Y191bmJsb2NrX2lwc2VjX29mZmxvYWQoZGV2LCBwcml2KTtcXG4rXFx0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XFxuIFxcdG1seDVfZXN3X3B1dChwcml2LVxcdTAwM2VtZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oXFxuaW5kZXggZTFiOGNiNzgzNjlmMS4uNTNiNjA0M2UzM2QyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oXFxuQEAgLTM2LDYgKzM2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJlbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZXN3aXRjaC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZW5fYWNjZWwvZmxvd190YWcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3RjX2N0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJlbi90Y190dW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuL3RjL2ludF9wb3J0LmhcXFwiXFxuQEAgLTM3MCwxMSArMzcxLDEzIEBAIHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqbWx4NWVfdGNfdGFibGVfYWxsb2Modm9pZCk7XFxuIHZvaWQgbWx4NWVfdGNfdGFibGVfZnJlZShzdHJ1Y3QgbWx4NWVfdGNfdGFibGUgKnRjKTtcXG4gc3RhdGljIGlubGluZSBib29sIG1seDVlX2NxZV9yZWdiX2NoYWluKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuIHtcXG4tXFx0dTMyIGNoYWluLCByZWdfYjtcXG4rXFx0dTMyIGZsb3dfdGFnLCByZWdfYiwgY2hhaW47XFxuIFxcbitcXHRmbG93X3RhZyA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XFxuIFxcdHJlZ19iID0gYmUzMl90b19jcHUoY3FlLVxcdTAwM2VmdF9tZXRhZGF0YSk7XFxuIFxcbi1cXHRpZiAocmVnX2IgXFx1MDAzZVxcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpXFxuK1xcdGlmIChmbG93X3RhZyAhPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19OT05FIHx8XFxuK1xcdCAgICAocmVnX2IgXFx1MDAzZVxcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRjaGFpbiA9IHJlZ19iIFxcdTAwMjYgTUxYNUVfVENfVEFCTEVfQ0hBSU5fVEFHX01BU0s7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jXFxuaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuY1xcbkBAIC04LDYgKzgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWx4NS9tYWNzZWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImZzX2NvcmUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImxpYi9tYWNzZWNfZnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuX2FjY2VsL2Zsb3dfdGFnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtbHg1X2NvcmUuaFxcXCJcXG4gXFxuIC8qIE1BQ3NlYyBUWCBmbG93IHN0ZWVyaW5nICovXFxuQEAgLTQ1LDkgKzQ2LDYgQEBcXG4gI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIT1VUX1NDSSAweDhcXG4gI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIX1NDSSAoTUxYNV9TRUNUQUdfSEVBREVSX1NJWkVfV0lUSE9VVF9TQ0kgKyBNQUNTRUNfU0NJX0xFTilcXG4gXFxuLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi9cXG4tI2RlZmluZSBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSAoKGZzX2lkKSB8IEJJVCgzMCkpXFxuLVxcbiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHtcXG4gXFx0X19iZTE2IGV0aGVydHlwZTtcXG4gXFx0dTggdGNpX2FuO1xcbkBAIC0xNzU3LDExICsxNzU1LDEwIEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcyxcXG4gXFx0cnhfdGFibGVzID0gXFx1MDAyNnJ4X2ZzLVxcdTAwM2V0YWJsZXM7XFxuIFxcdGZ0X2NyeXB0byA9IFxcdTAwMjZyeF90YWJsZXMtXFx1MDAzZWZ0X2NyeXB0bztcXG4gXFxuLVxcdC8qIFNldCBiaXRbMzEgLSAzMF0gbWFjc2VjIG1hcmtlciAtIDB4MDEgKi9cXG4gXFx0LyogU2V0IGJpdFsxNS0wXSBmcyBpZCAqL1xcbiBcXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XFxuIFxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcXG4tXFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7XFxuK1xcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZGF0YSwgZnNfaWQpO1xcbiBcXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIG9mZnNldCwgMCk7XFxuIFxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7XFxuIFxcbkBAIC0xNzc4LDYgKzE3NzUsOSBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsXFxuIFxcdC8qIFJ4IGNyeXB0byB0YWJsZSB3aXRoIFNDSSBydWxlICovXFxuIFxcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBhdHRycywgdHJ1ZSk7XFxuIFxcbitcXHRzcGVjLVxcdTAwM2VmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7XFxuK1xcdHNwZWMtXFx1MDAzZWZsb3dfY29udGV4dC5mbG93X3RhZyA9IE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BQ1NFQztcXG4rXFxuIFxcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbiBcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxcbiBcXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XFxuQEAgLTE4MDMsNiArMTgwMyw5IEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcyxcXG4gXFxuIFxcdFxcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBhdHRycywgZmFsc2UpO1xcbiBcXG4rXFx0XFx0c3BlYy1cXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzIHw9IEZMT1dfQ09OVEVYVF9IQVNfVEFHO1xcbitcXHRcXHRzcGVjLVxcdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XFxuK1xcbiBcXHRcXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4gXFx0XFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4gXFx0XFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxcbkBAIC0yMTYwLDggKzIxNjMsOCBAQCBzdGF0aWMgaW50IG1seDVfbWFjc2VjX2ZzX2FkZF9yb2NlX3J1bGVfcngoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsIHUzMlxcbiBcXG4gXFx0c3BlYy1cXHUwMDNlbWF0Y2hfY3JpdGVyaWFfZW5hYmxlIHw9IE1MWDVfTUFUQ0hfTUlTQ19QQVJBTUVURVJTXzI7XFxuIFxcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVxcdTAwM2VtYXRjaF9jcml0ZXJpYSwgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfNSk7XFxuLVxcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsIG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUsXFxuLVxcdFxcdCBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7XFxuK1xcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsXFxuK1xcdFxcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181LCBmc19pZCk7XFxuIFxcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9BTExPVztcXG4gXFx0bmV3X3J1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2ZzLVxcdTAwM2Vyb2NlLmZ0X21hY3NlY19vcF9jaGVjaywgc3BlYywgXFx1MDAyNmZsb3dfYWN0LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgTlVMTCwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXFxuaW5kZXggMTVhY2FmZjQzNjQxNy4uYjhiOGI0MTJkNWMzZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaFxcbkBAIC02LDExICs2LDEwIEBAXFxuIFxcbiAjaWZkZWYgQ09ORklHX01MWDVfTUFDU0VDXFxuIFxcbi0vKiBCaXQzMSAtIDMwOiBNQUNzZWMgbWFya2VyLCBCaXQxNS0wOiBNQUNzZWMgaWQgKi9cXG4tI2RlZmluZSBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWCBVU0hSVF9NQVggLyogTXVzdCBiZSBwb3dlciBvZiB0d28gKi9cXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYXFxuLSNkZWZpbmUgTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcXHUwMDNlXFx1MDAzZSAzMCkgXFx1MDAyNiAweDMpICA9PSAweDEpXFxuLSNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVF9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXFxuKy8qIE1BQ3NlYyBmc19pZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzE1OjBdICovXFxuKyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYIFVTSFJUX01BWCAvKiBNdXN0IGJlIHBvd2VyIG9mIHR3byAqL1xcbisjZGVmaW5lIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0sgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYXFxuKyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXFx1MDAyNiBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLKVxcbiBcXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cXG4gI2RlZmluZSBNTFg1X0VUSF9XUUVfRlRfTUVUQV9NQUNTRUNfTUFTSyBcXFxcXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuaW5kZXggNjQzYjRhYWMyMDMzNi4uNDA2YzBmN2U2M2Q4MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uY1xcbkBAIC0xODEwLDYgKzE4MTAsNyBAQCBpbnQgbWx4NV9tZGV2X2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHByb2ZpbGVfaWR4KVxcbiBcXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrX2tleSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XFxuIFxcdGxvY2tkZXBfc2V0X2NsYXNzKFxcdTAwMjZkZXYtXFx1MDAzZWludGZfc3RhdGVfbXV0ZXgsIFxcdTAwMjZkZXYtXFx1MDAzZWxvY2tfa2V5KTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdjX3N0YXRlX2xvY2spO1xcbiBcXG5AQCAtMTg5OCw2ICsxODk5LDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlYWxsb2NfbXV0ZXgpO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2ViZnJlZ3Mud2NfaGVhZC5sb2NrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRldi1cXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XFxuIFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXFx1MDAyNmRldi1cXHUwMDNlbG9ja19rZXkpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xOTI1LDYgKzE5MjcsNyBAQCB2b2lkIG1seDVfbWRldl91bmluaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZXdjX3N0YXRlX2xvY2spO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXYtXFx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmRldi1cXHUwMDNlaW50Zl9zdGF0ZV9tdXRleCk7XFxuIFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXFx1MDAyNmRldi1cXHUwMDNlbG9ja19rZXkpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxcbmluZGV4IGIxODcxYzA4MjFkMGIuLjJkOWJjNzUyZTQzMWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXFxuQEAgLTc4OCw4ICs3ODgsMTEgQEAgc3RydWN0IG1seDVfY29yZV9kZXYge1xcbiBcXHR1MzIgICAgICAgICAgICAgICAgICAgICAgdnNjX2FkZHI7XFxuIFxcdHN0cnVjdCBtbHg1X2h2X3ZoY2FcXHQqaHZfdmhjYTtcXG4gXFx0c3RydWN0IG1seDVfaHdtb25cXHQqaHdtb247XFxuLVxcdHU2NFxcdFxcdFxcdG51bV9ibG9ja190YztcXG4tXFx0dTY0XFx0XFx0XFx0bnVtX2Jsb2NrX2lwc2VjO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4rXFx0XFx0dTY0IG51bV90YztcXG4rXFx0XFx0dTY0IG51bV9hY2NlbDtcXG4rXFx0fSBvZmZsb2FkX2Jsb2NrO1xcbiAjaWZkZWYgQ09ORklHX01MWDVfTUFDU0VDXFxuIFxcdHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzO1xcbiBcXHQvKiBNQUNzZWMgbm90aWZpZXIgY2hhaW4gdG8gc3luYyBNQUNzZWMgY29yZSBhbmQgSUIgZGF0YWJhc2UgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XFxuaW5kZXggMzE1NjQ4YTc3MGQwMC4uOWI4OTk3MjNhNjM1YSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcXG5AQCAtMTYsMTEgKzE2LDEyIEBAIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3RydWUsIGtzZnRfZXEsIGtzZnRfbmUsIGtzZnRfZ3QsIGtzZnRfcmFpc2VzXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9ub25lXFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50XFxuLWZyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4XFxuK2Zyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4LCBLc2Z0WGZhaWxFeFxcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIE5ldERydkNvbnRFbnZcXG4tZnJvbSBsaWIucHkgaW1wb3J0IE5ldGxpbmssIE5sRXJyb3IsIFBTUEZhbWlseSwgUnRubEZhbWlseVxcbitmcm9tIGxpYi5weSBpbXBvcnQgTmV0bGluaywgTmxFcnJvciwgTmV0ZGV2RmFtaWx5LCBQU1BGYW1pbHksIFJ0bmxGYW1pbHlcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldE5TRW50ZXJcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXFxuK2Zyb20gbGliLnB5IGltcG9ydCBia2csIGV0aHRvb2wsIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlbiwgQ21kRXhpdEZhaWx1cmVcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGlwXFxuIFxcbiBcXG5AQCAtMzAsMTUgKzMxLDI1IEBAIGRlZiBfZ2V0X291dHEocyk6XFxuICAgICByZXR1cm4gc3RydWN0LnVucGFjayhcXFwiSVxcXCIsIG91dHEpWzBdXFxuIFxcbiBcXG4rZGVmIF9yZWN2X2V4YWN0KHNvY2ssIG4pOlxcbisgICAgYnVmID0gYicnXFxuKyAgICB3aGlsZSBsZW4oYnVmKSBcXHUwMDNjIG46XFxuKyAgICAgICAgY2h1bmsgPSBzb2NrLnJlY3YobiAtIGxlbihidWYpKVxcbisgICAgICAgIGlmIG5vdCBjaHVuazpcXG4rICAgICAgICAgICAgYnJlYWtcXG4rICAgICAgICBidWYgKz0gY2h1bmtcXG4rICAgIHJldHVybiBidWZcXG4rXFxuK1xcbiBkZWYgX3NlbmRfd2l0aF9hY2soY2ZnLCBtc2cpOlxcbi0gICAgY2ZnLmNvbW1fc29jay5zZW5kKG1zZylcXG4tICAgIHJlc3BvbnNlID0gY2ZnLmNvbW1fc29jay5yZWN2KDQpXFxuKyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKVxcbisgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KVxcbiAgICAgaWYgcmVzcG9uc2UgIT0gYidhY2tcXFxcMCc6XFxuICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxcXCJVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZVxcXCIsIHJlc3BvbnNlKVxcbiBcXG4gXFxuIGRlZiBfcmVtb3RlX3JlYWRfbGVuKGNmZyk6XFxuLSAgICBjZmcuY29tbV9zb2NrLnNlbmQoYidyZWFkIGxlblxcXFwwJylcXG4rICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiJ3JlYWQgbGVuXFxcXDAnKVxcbiAgICAgcmV0dXJuIGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJ3V0Zi04JykpXFxuIFxcbiBcXG5AQCAtOTcsNyArMTA4LDcgQEAgZGVmIF9zZW5kX2NhcmVmdWwoY2ZnLCBzLCByb3VuZHMpOlxcbiBkZWYgX2NoZWNrX2RhdGFfcngoY2ZnLCBleHBfbGVuKTpcXG4gICAgIHJlYWRfbGVuID0gLTFcXG4gICAgIGZvciBfIGluIHJhbmdlKDMwKTpcXG4tICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmQoYidyZWFkIGxlblxcXFwwJylcXG4rICAgICAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwoYidyZWFkIGxlblxcXFwwJylcXG4gICAgICAgICByZWFkX2xlbiA9IGludChjZmcuY29tbV9zb2NrLnJlY3YoMTAyNClbOi0xXS5kZWNvZGUoJ3V0Zi04JykpXFxuICAgICAgICAgaWYgcmVhZF9sZW4gPT0gZXhwX2xlbjpcXG4gICAgICAgICAgICAgYnJlYWtcXG5AQCAtNTgzLDYgKzU5NCwxMDggQEAgZGVmIF9nZXRfcHNwX3Zlcl9pcF92YXJpYW50cygpOlxcbiAgICAgICAgIGZvciBpcHYgaW4gKFxcXCI0XFxcIiwgXFxcIjZcXFwiKTpcXG4gICAgICAgICAgICAgeWllbGQgS3NmdE5hbWVkVmFyaWFudChmXFxcInZ7dmVyfV9pcHtpcHZ9XFxcIiwgdmVyLCBpcHYpXFxuIFxcbitkZWYgX2VuYWJsZV9sb2NhbF9od19ncm8oY2ZnKTpcXG4rICAgIGNmZy5yZXF1aXJlX2NtZChcXFwiZXRodG9vbFxcXCIpXFxuKyAgICBmZWF0ID0gZXRodG9vbChmXFxcIi1rIHtjZmcuaWZuYW1lfVxcXCIsIGpzb249VHJ1ZSlbMF1cXG4rICAgIGdybyA9IGZlYXQuZ2V0KFxcXCJyeC1ncm8taHdcXFwiKVxcbisgICAgaWYgbm90IGdybyBvciBcXFwiYWN0aXZlXFxcIiBub3QgaW4gZ3JvIG9yIFxcXCJmaXhlZFxcXCIgbm90IGluIGdybzpcXG4rICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJIVyBHUk8gZmVhdHVyZSBub3QgcmVwb3J0ZWQgYnkgZXRodG9vbFxcXCIpXFxuKyAgICBpZiBncm9bXFxcImZpeGVkXFxcIl0gYW5kIG5vdCBncm9bXFxcImFjdGl2ZVxcXCJdOlxcbisgICAgICAgIHJhaXNlIEtzZnRYZmFpbEV4KFxcXCJIVyBHUk8gbm90IHN1cHBvcnRlZCBieSBkZXZpY2VcXFwiKVxcbisgICAgaWYgbm90IGdyb1tcXFwiYWN0aXZlXFxcIl06XFxuKyAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICBldGh0b29sKGZcXFwiLUsge2NmZy5pZm5hbWV9IHJ4LWdyby1odyBvblxcXCIpXFxuKyAgICAgICAgZXhjZXB0IENtZEV4aXRGYWlsdXJlIGFzIGU6XFxuKyAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIkNhbm5vdCBlbmFibGUgSFcgR1JPIHZpYSBldGh0b29sXFxcIikgZnJvbSBlXFxuKyAgICAgICAgZGVmZXIoZXRodG9vbCwgZlxcXCItSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9mZlxcXCIpXFxuKyAgICAgICAgZmVhdCA9IGV0aHRvb2woZlxcXCItayB7Y2ZnLmlmbmFtZX1cXFwiLCBqc29uPVRydWUpWzBdXFxuKyAgICAgICAgZ3JvID0gZmVhdC5nZXQoXFxcInJ4LWdyby1od1xcXCIsIHt9KVxcbisgICAgICAgIGlmIG5vdCBncm8uZ2V0KFxcXCJhY3RpdmVcXFwiKTpcXG4rICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwiSFcgR1JPIGZhaWxlZCB0byBhY3RpdmF0ZVxcXCIpXFxuK1xcbitcXG4rZGVmIF9yZW1vdGVfc2VuZChjZmcsIHNpemUpOlxcbisgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGInZGF0YSBzZW5kXFxcXDAnICsgc3RydWN0LnBhY2soJyFJJywgc2l6ZSkpXFxuKyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpXFxuKyAgICBpZiByZXNwb25zZSAhPSBiJ2Fja1xcXFwwJzpcXG4rICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXFxcIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlIHRvIGRhdGEgc2VuZFxcXCIsIHJlc3BvbnNlKVxcbitcXG4rXFxuK2RlZiBfcmVjdl9hbGwocywgZXhwZWN0ZWQsIHRpbWVvdXQ9MjApOlxcbisgICAgcy5zZXR0aW1lb3V0KHRpbWVvdXQpXFxuKyAgICB0b3RhbCA9IDBcXG4rICAgIHRyeTpcXG4rICAgICAgICB3aGlsZSB0b3RhbCBcXHUwMDNjIGV4cGVjdGVkOlxcbisgICAgICAgICAgICBkYXRhID0gcy5yZWN2KG1pbig2NTUzNiwgZXhwZWN0ZWQgLSB0b3RhbCkpXFxuKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOlxcbisgICAgICAgICAgICAgICAgYnJlYWtcXG4rICAgICAgICAgICAgdG90YWwgKz0gbGVuKGRhdGEpXFxuKyAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6XFxuKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxcbisgICAgICAgICAgICBmXFxcIlRpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcXFwiXFxuKyAgICAgICAgICAgIGZcXFwiKHJlc3BvbmRlciBtYXkgaGF2ZSBmYWlsZWQgdG8gc2VuZClcXFwiKVxcbisgICAgaWYgdG90YWwgXFx1MDAzYyBleHBlY3RlZDpcXG4rICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXFxuKyAgICAgICAgICAgIGZcXFwiU2hvcnQgcmVhZDogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcXFwiXFxuKyAgICAgICAgICAgIGZcXFwiKHJlc3BvbmRlciBjb25uZWN0aW9uIGNsb3NlZCBlYXJseSlcXFwiKVxcbisgICAgcmV0dXJuIHRvdGFsXFxuK1xcbitcXG4rZGVmIF9kYXRhX2h3X2dybyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcXG4rICAgIFxcXCJcXFwiXFxcIiBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgXFxcIlxcXCJcXFwiXFxuKyAgICBfaW5pdF9wc3BfZGV2KGNmZylcXG4rICAgICMgVmVyc2lvbiAwIGlzIHJlcXVpcmVkIGJ5IHNwZWMsIGRvbid0IGxldCBpdCBza2lwXFxuKyAgICBpZiB2ZXJzaW9uOlxcbisgICAgICAgIG5hbWUgPSBjZmcucHNwbmwuY29uc3RzW1xcXCJ2ZXJzaW9uXFxcIl0uZW50cmllc19ieV92YWxbdmVyc2lvbl0ubmFtZVxcbisgICAgICAgIGlmIG5hbWUgbm90IGluIGNmZy5wc3BfaW5mb1sncHNwLXZlcnNpb25zLWNhcCddOlxcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJQU1AgdmVyc2lvbiBub3Qgc3VwcG9ydGVkXFxcIiwgbmFtZSlcXG4rXFxuKyAgICBfZW5hYmxlX2xvY2FsX2h3X2dybyhjZmcpXFxuK1xcbisgICAgcyA9IF9tYWtlX3BzcF9jb25uKGNmZywgdmVyc2lvbiwgaXB2ZXIpXFxuKyAgICB0cnk6XFxuKyAgICAgICAgcnhfYXNzb2MgPSBjZmcucHNwbmwucnhfYXNzb2Moe1xcXCJ2ZXJzaW9uXFxcIjogdmVyc2lvbixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJkZXYtaWRcXFwiOiBjZmcucHNwX2Rldl9pZCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzb2NrLWZkXFxcIjogcy5maWxlbm8oKX0pXFxuKyAgICAgICAgcnggPSByeF9hc3NvY1sncngta2V5J11cXG4rICAgICAgICB0eCA9IF9zcGlfeGNoZyhzLCByeClcXG4rICAgICAgICBjZmcucHNwbmwudHhfYXNzb2Moe1xcXCJkZXYtaWRcXFwiOiBjZmcucHNwX2Rldl9pZCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwidmVyc2lvblxcXCI6IHZlcnNpb24sXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInR4LWtleVxcXCI6IHR4LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzb2NrLWZkXFxcIjogcy5maWxlbm8oKX0pXFxuK1xcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1xcXCJpZmluZGV4XFxcIjogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpWzBdXFxuKyAgICAgICAgZXhjZXB0IE5sRXJyb3IgYXMgZTpcXG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwicXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVxcXCIpIGZyb20gZVxcbisgICAgICAgICAgICByYWlzZVxcbisgICAgICAgIGlmICgncngtaHctZ3JvLXBhY2tldHMnIG5vdCBpbiBiZWZvcmUgb3JcXG4rICAgICAgICAgICAgJ3J4LWh3LWdyby13aXJlLXBhY2tldHMnIG5vdCBpbiBiZWZvcmUpOlxcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJyeC1ody1ncm8tcGFja2V0cyBjb3VudGVyIG5vdCBhdmFpbGFibGVcXFwiKVxcbitcXG4rICAgICAgICAjIFJlbW90ZSBzZW5kcyBkYXRhIGluIDhLQiBjaHVua3M7IEdTTyBvbiByZW1vdGUgVFggc2VnbWVudHMgdGhlbSxcXG4rICAgICAgICAjIEhXIEdSTyByZWFzc2VtYmxlcyBvbiBsb2NhbCBSWFxcbisgICAgICAgIGRhdGFfbGVuID0gMTAgKiA2NTUzNlxcbisgICAgICAgIF9yZW1vdGVfc2VuZChjZmcsIGRhdGFfbGVuKVxcbisgICAgICAgIHJlY3ZfbGVuID0gX3JlY3ZfYWxsKHMsIGRhdGFfbGVuKVxcbisgICAgICAgIGtzZnRfZXEocmVjdl9sZW4sIGRhdGFfbGVuKVxcbitcXG4rICAgICAgICBjZmcud2FpdF9od19zdGF0c19zZXR0bGUoKVxcbisgICAgICAgIGFmdGVyID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1xcXCJpZmluZGV4XFxcIjogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpWzBdXFxuKyAgICAgICAga3NmdF9ndChhZnRlclsncngtaHctZ3JvLXBhY2tldHMnXSxcXG4rICAgICAgICAgICAgICAgIGJlZm9yZVsncngtaHctZ3JvLXBhY2tldHMnXSlcXG4rICAgICAgICBrc2Z0X2d0KGFmdGVyWydyeC1ody1ncm8td2lyZS1wYWNrZXRzJ10sXFxuKyAgICAgICAgICAgICAgICBiZWZvcmVbJ3J4LWh3LWdyby13aXJlLXBhY2tldHMnXSlcXG4rICAgIGZpbmFsbHk6XFxuKyAgICAgICAgX2Nsb3NlX3BzcF9jb25uKGNmZywgcylcXG4rXFxuK0Brc2Z0X3ZhcmlhbnRzKF9nZXRfcHNwX3Zlcl9pcF92YXJpYW50cygpKVxcbitkZWYgZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XFxuKyAgICBcXFwiXFxcIlxcXCIgVGVzdCBQU1AgZGF0YSB0cmFuc2ZlciB3aXRoIEhXIEdSTyBlbmFibGVkIFxcXCJcXFwiXFxcIlxcbisgICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxuKyAgICBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcilcXG4rXFxuIFxcbiBkZWYgX2dldF9pcF92YXJpYW50cygpOlxcbiAgICAgZm9yIGlwdiBpbiAoXFxcIjRcXFwiLCBcXFwiNlxcXCIpOlxcbkBAIC05MzcsNyArMTA1MCw2IEBAIGRlZiBfc2V0dXBfcHNwX2F0dHJpYnV0ZXMoY2ZnKTpcXG4gICAgIGNmZy5wc3BfZGV2X3BlZXJfbnNpZCA9IF9nZXRfbnNpZChjZmcubmV0bnMubmFtZSlcXG4gXFxuIFxcbi1cXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiIEtzZnQgYm9pbGVyIHBsYXRlIG1haW4gXFxcIlxcXCJcXFwiXFxuIFxcbkBAIC05NTQsNiArMTA2Niw3IEBAIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gXFxuICAgICB3aXRoIGVudiBhcyBjZmc6XFxuICAgICAgICAgY2ZnLnBzcG5sID0gUFNQRmFtaWx5KClcXG4rICAgICAgICBjZmcubmV0bmwgPSBOZXRkZXZGYW1pbHkoKVxcbiBcXG4gICAgICAgICBpZiBoYXNfY29udDpcXG4gICAgICAgICAgICAgX3NldHVwX3BzcF9hdHRyaWJ1dGVzKGNmZylcXG5AQCAtOTczLDcgKzEwODYsNyBAQCBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcuY29tbV9wb3J0KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xKVxcbiBcXG4tICAgICAgICAgICAgICAgIGNhc2VzID0gW2RhdGFfYmFzaWNfc2VuZCwgZGF0YV9tc3NfYWRqdXN0XVxcbisgICAgICAgICAgICAgICAgY2FzZXMgPSBbZGF0YV9iYXNpY19zZW5kLCBkYXRhX2h3X2dybywgZGF0YV9tc3NfYWRqdXN0XVxcbiBcXG4gICAgICAgICAgICAgICAgIGlmIGhhc19jb250OlxcbiAgICAgICAgICAgICAgICAgICAgIGNhc2VzICs9IFtcXG5AQCAtOTkwLDcgKzExMDMsNyBAQCBkZWYgbWFpbigpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlX3BmeD17XFxcImRldl9cXFwiLCBcXFwiZGF0YV9cXFwiLCBcXFwiYXNzb2NfXFxcIiwgXFxcInJlbW92YWxfXFxcIn0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXFxuIFxcbi0gICAgICAgICAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kKGJcXFwiZXhpdFxcXFwwXFxcIilcXG4rICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiXFxcImV4aXRcXFxcMFxcXCIpXFxuICAgICAgICAgICAgICAgICBjZmcuY29tbV9zb2NrLmNsb3NlKClcXG4gICAgICAgICBmaW5hbGx5OlxcbiAgICAgICAgICAgICBpZiBzcnYgYW5kIChzcnYuc3Rkb3V0IG9yIHNydi5zdGRlcnIpOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3BfcmVzcG9uZGVyLmNcXG5pbmRleCBhMjZlNzYyOGJiYjEzLi45YTY3NWJmNDQ5ZjVmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvcG9sbC5oXFx1MDAzZVxcbkBAIC0xMTgsNiArMTE5LDM0IEBAIHN0YXRpYyB2b2lkIHNlbmRfc3RyKGludCBzb2NrLCBpbnQgdmFsdWUpXFxuIFxcdHNlbmQoc29jaywgYnVmLCByZXQgKyAxLCBNU0dfV0FJVEFMTCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgc2VuZF9kYXRhKGludCBzb2NrLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNoYXIgc2J1Zls4MTkyXSA9IHswfTtcXG4rXFx0c3NpemVfdCBzZW50O1xcbitcXG4rXFx0d2hpbGUgKGxlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0c2l6ZV90IGNodW5rID0gbGVuO1xcbitcXG4rXFx0XFx0aWYgKGNodW5rIFxcdTAwM2Ugc2l6ZW9mKHNidWYpKVxcbitcXHRcXHRcXHRjaHVuayA9IHNpemVvZihzYnVmKTtcXG4rXFxuK1xcdFxcdHNlbnQgPSBzZW5kKHNvY2ssIHNidWYsIGNodW5rLCBNU0dfTk9TSUdOQUwpO1xcbitcXHRcXHRpZiAoc2VudCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0aWYgKGVycm5vID09IEVJTlRSKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJFUlI6ICVzOiAlc1xcXFxuXFxcIiwgX19mdW5jX18sXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoc2VudCA9PSAwKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRVJSOiAlczogcGVlciBjbG9zZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHR9XFxuK1xcdFxcdGxlbiAtPSBzZW50O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcXG4gXFx0ICAgIGludCBzZXJ2ZXJfc29jaywgaW50IGNvbW1fc29jaylcXG5AQCAtMTg1LDIyICsyMTQsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdG9mZiArPSBuO1xcbi1cXHRcXHRcXHRuID0gb2ZmO1xcbiBcXG4gI2RlZmluZSBfX2NvbnN1bWUoc3opXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0aWYgKG4gPT0gKHN6KSkge1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0XFx0XFx0b2ZmID0gMDtcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdH0gZWxzZSB7XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRcXHRvZmYgLT0gKHN6KTtcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdFxcdG1lbW1vdmUoYnVmLCBcXHUwMDI2YnVmWyhzeildLCBvZmYpO1xcdFxcXFxcXG4tXFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0b2ZmIC09IChzeik7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRtZW1tb3ZlKGJ1ZiwgXFx1MDAyNmJ1Zlsoc3opXSwgb2ZmKTtcXHRcXHRcXFxcXFxuIFxcdFxcdH0pXFxuIFxcbi0jZGVmaW5lIGNtZChfbmFtZSlcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKy8qIE9ubHkgbWF0Y2ggb25jZSB0aGUgY29tbWFuZCBhbmQgaXRzIF9leHRyYV9zeiBieXRlIHBheWxvYWQgYXJlIGJvdGhcXG4rICogYnVmZmVyZWQsIG90aGVyd2lzZSBhIHNwbGl0IHJlYWQgd291bGQgY29uc3VtZSB0aGUgbmFtZSBhbmQgc3RyYW5kXFxuKyAqIHRoZSBwYXlsb2FkLCBkZXN5bmNocm9uaXppbmcgdGhlIHBhcnNlciBmb3IgZ29vZC5cXG4rICovXFxuKyNkZWZpbmUgY21kKF9uYW1lLCBfZXh0cmFfc3opXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0c3NpemVfdCBzeiA9IHNpemVvZihfbmFtZSk7XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHRcXHRib29sIG1hdGNoID0gbiBcXHUwMDNlPSBzeiBcXHUwMDI2XFx1MDAyNlxcdCFtZW1jbXAoYnVmLCBfbmFtZSwgc3opOyBcXFxcXFxuK1xcdFxcdFxcdGJvb2wgbWF0Y2ggPSBvZmYgXFx1MDAzZT0gc3ogKyAoX2V4dHJhX3N6KSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0IW1lbWNtcChidWYsIF9uYW1lLCBzeik7XFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdFxcdFxcdGlmIChtYXRjaCkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0ZGJnKFxcXCJjb21tYW5kOiBcXFwiIF9uYW1lIFxcXCJcXFxcblxcXCIpO1xcdFxcdFxcXFxcXG5AQCAtMjEzLDEwICsyNDIsMTAgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXFxuIFxcdFxcdFxcdGRvIHtcXG4gXFx0XFx0XFx0XFx0Y29uc3VtZWQgPSBmYWxzZTtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChjbWQoXFxcInJlYWQgbGVuXFxcIikpXFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcInJlYWQgbGVuXFxcIiwgMCkpXFxuIFxcdFxcdFxcdFxcdFxcdHNlbmRfc3RyKGNvbW1fc29jaywgZGF0YV9yZWFkKTtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChjbWQoXFxcImRhdGEgZWNob1xcXCIpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcImRhdGEgZWNob1xcXCIsIDApKSB7XFxuIFxcdFxcdFxcdFxcdFxcdGlmIChkYXRhX3NvY2sgXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c2VuZChkYXRhX3NvY2ssIFxcXCJlY2hvXFxcIiwgNSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBNU0dfV0FJVEFMTCk7XFxuQEAgLTIyNCw3ICsyNTMsMjcgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTjogZWNobyBidXQgbm8gZGF0YSBzb2NrXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0XFx0c2VuZF9hY2soY29tbV9zb2NrKTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJkYXRhIGNsb3NlXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGNtZChcXFwiZGF0YSBzZW5kXFxcIiwgNCkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0X191MzIgbGVuO1xcbitcXG4rXFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZsZW4sIGJ1Ziwgc2l6ZW9mKGxlbikpO1xcbitcXHRcXHRcXHRcXHRcXHRfX2NvbnN1bWUoc2l6ZW9mKGxlbikpO1xcbitcXHRcXHRcXHRcXHRcXHRsZW4gPSBudG9obChsZW4pO1xcbitcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKGRhdGFfc29jayBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJXQVJOOiBzZW5kIGJ1dCBubyBkYXRhIHNvY2tcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRzZW5kX2Vycihjb21tX3NvY2spO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0XFx0XFx0c2VuZF9hY2soY29tbV9zb2NrKTtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHNlbmRfZGF0YShkYXRhX3NvY2ssIGxlbikpXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwiV0FSTjogc2VuZCBpbmNvbXBsZXRlIGZvciAldSBieXRlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bGVuKTtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJkYXRhIGNsb3NlXFxcIiwgMCkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGRhdGFfc29jayBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNsb3NlKGRhdGFfc29jayk7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdGRhdGFfc29jayA9IC0xO1xcbkBAIC0yMzMsMjYgKzI4MiwyMiBAQCBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0cmFjZV9jbG9zZSA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJjb25uIHBzcFxcXCIpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcImNvbm4gcHNwXFxcIiwgMikpIHtcXG4gXFx0XFx0XFx0XFx0XFx0aWYgKGFjY2VwdF9jZmcgIT0gQUNDRVBUX0NGR19OT05FKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldBUk46IG9sZCBjb25uIGNvbmZpZyBzdGlsbCBzZXQhXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0XFx0YWNjZXB0X2NmZyA9IEFDQ0VQVF9DRkdfUFNQO1xcbiBcXHRcXHRcXHRcXHRcXHRzZW5kX2Fjayhjb21tX3NvY2spO1xcbiBcXHRcXHRcXHRcXHRcXHQvKiBuZXh0IHR3byBieXRlcyBhcmUgdmVyc2lvbnMgKi9cXG4tXFx0XFx0XFx0XFx0XFx0aWYgKG9mZiBcXHUwMDNlPSAyKSB7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2cHNwX3ZlcnMsIGJ1ZiwgMik7XFxuLVxcdFxcdFxcdFxcdFxcdFxcdF9fY29uc3VtZSgyKTtcXG4tXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXQVJOOiBzaG9ydCBjb25uIHBzcCBjb21tYW5kIVxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwc3BfdmVycywgYnVmLCAyKTtcXG4rXFx0XFx0XFx0XFx0XFx0X19jb25zdW1lKDIpO1xcbiBcXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdGlmIChjbWQoXFxcImNvbm4gY2xyXFxcIikpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGNtZChcXFwiY29ubiBjbHJcXFwiLCAwKSkge1xcbiBcXHRcXHRcXHRcXHRcXHRpZiAoYWNjZXB0X2NmZyAhPSBBQ0NFUFRfQ0ZHX05PTkUpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTjogb2xkIGNvbm4gY29uZmlnIHN0aWxsIHNldCFcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRcXHRhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjtcXG4gXFx0XFx0XFx0XFx0XFx0c2VuZF9hY2soY29tbV9zb2NrKTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRpZiAoY21kKFxcXCJleGl0XFxcIikpXFxuK1xcdFxcdFxcdFxcdGlmIChjbWQoXFxcImV4aXRcXFwiLCAwKSlcXG4gXFx0XFx0XFx0XFx0XFx0c2hvdWxkX3F1aXQgPSB0cnVlO1xcbiAjdW5kZWYgY21kXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwOTozNDoxNC40MDYyOTE0OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTg0MDQ3OTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNDRkYTQxMTk4ODI3ODAzY2M2MGIzZDBkNmU1Y2ExYzgwY2E0ZTk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwOTozNDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbmluZGV4IDQ5NzNmYjQ3M2ZmMDIuLmE4MDJmODBkOTBiZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbkBAIC05OCw2ICs5OCw3IEBAIGVudW0ge1xuICNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcbiBcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXG4gXHRNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMLFxuK1x0TUxYNUVfQUNDRUxfRlNfUFNQX0RFQ0FQX0ZUX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxuICNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuaW5kZXggM2YyMTJlNDZmYzJmOS4uYTBiYjE5Y2M5NTZkZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuQEAgLTIxOCw2ICsyMTgsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLFxuICNlbmRpZlxuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4rXHRpZiAobWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbClcbitcdFx0cmV0ID0gLUVCVVNZO1xuK1x0ZWxzZVxuK1x0XHRtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjKys7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbitcdGlmICghV0FSTl9PTl9PTkNFKCFtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX3RjKSlcbitcdFx0bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90Yy0tO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfaW5pdF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3J4KHByaXYpO1xuQEAgLTIyOSw2ICsyNTEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuK3tcbisjaWZkZWYgQ09ORklHX01MWDVfRU5fUFNQXG4rXHRyZXR1cm4gbWx4NWVfcHNwX3VwZGF0ZV9yeChwcml2KTtcbisjZWxzZVxuK1x0cmV0dXJuIDA7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF90eChwcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZmxvd190YWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9mbG93X3RhZy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDQyMmY5NmZmY2VkMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2Zsb3dfdGFnLmhcbkBAIC0wLDAgKzEsNDUgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBMaW51eC1PcGVuSUIgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYsIE5WSURJQSBDT1JQT1JBVElPTiBcdTAwMjYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbitcbisjaWZuZGVmIF9fTUxYNUVfRkxPV19UQUdfSF9fXG4rI2RlZmluZSBfX01MWDVFX0ZMT1dfVEFHX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21seDUvZGV2aWNlLmhcdTAwM2VcbitcbisvKiBVbmlmaWVkIGFjY2VsIGZsb3dfdGFnIGxheW91dCBpbiBDUUUgc29wX2Ryb3BfcXBuIFsyMzowXTpcbisgKlxuKyAqICAgWzIzOjIxXSA9IHByb3RvY29sIElEICgzIGJpdHMpOlxuKyAqICAgICAgICAgICAgICAwID0gbm9uZSAoZGVmYXVsdClcbisgKiAgICAgICAgICAgICAgMSA9IElQc2VjXG4rICogICAgICAgICAgICAgIDIgPSBNQUNzZWNcbisgKiAgICAgICAgICAgICAgMyA9IFBTUCAoSFcgZGVjcnlwdGVkLCBQU1AgaGVhZGVyIHByZXNlbnQpXG4rICogICAgICAgICAgICAgIDQgPSBQU1AgZGVjYXAgKEhXIGRlY3J5cHRlZCBcdTAwMjYgZGVjYXBzdWxhdGVkKVxuKyAqICAgICAgICAgICAgICA1LTcgPSByZXNlcnZlZFxuKyAqICAgWzIwOjE3XSA9IFBTUCB2ZXJzaW9uICg0IGJpdHMsIHZhbGlkIHdoZW4gcHJvdG8gPT0gUFNQIGRlY2FwKVxuKyAqICAgMTYgICAgICA9IHJlc2VydmVkXG4rICogICBbMTU6MF0gID0gdXNlZCBieSBvdGhlciBzdWJzeXN0ZW1zIChlLmcuIFRDKS5cbisgKi9cbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX01BU0tcdFx0R0VOTUFTSygyMywgMjEpXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19OT05FXHRcdCgwIFx1MDAzY1x1MDAzYyAyMSlcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX0lQU0VDXHQoMSBcdTAwM2NcdTAwM2MgMjEpXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUNcdCgyIFx1MDAzY1x1MDAzYyAyMSlcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BST1RPX1BTUFx0XHQoMyBcdTAwM2NcdTAwM2MgMjEpXG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVBcdCg0IFx1MDAzY1x1MDAzYyAyMSlcbitcbisjZGVmaW5lIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlRcdDE3XG4rI2RlZmluZSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX01BU0tcdCgweEYgXHUwMDNjXHUwMDNjIE1MWDVFX0FDQ0VMX0ZMT1dfVEFHX1BTUF9WRVJfU0hJRlQpXG4rXG4rc3RhdGljIGlubGluZSB1MzIgbWx4NWVfYWNjZWxfZmxvd190YWcoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbit7XG4rXHRyZXR1cm4gYmUzMl90b19jcHUoY3FlLVx1MDAzZXNvcF9kcm9wX3FwbikgXHUwMDI2IDB4RkZGRkZGO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiBtbHg1ZV9hY2NlbF9mbG93X3RhZ19wcm90byhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuK3tcbitcdHJldHVybiBtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFx1MDAyNiBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQVNLO1xuK31cbitcbisjZW5kaWYgLyogX19NTFg1RV9GTE9XX1RBR19IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5pbmRleCAzMjk2MDhjNTkzMTNiLi4wODFjYjJmMzFiZTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19mcy5jXG5AQCAtNCw2ICs0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlbi9mcy5oXCJcbisjaW5jbHVkZSBcImVuX2FjY2VsL2VuX2FjY2VsLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gI2luY2x1ZGUgXCJlc3dpdGNoLmhcIlxuICNpbmNsdWRlIFwiaXBzZWMuaFwiXG4gI2luY2x1ZGUgXCJmc19jb3JlLmhcIlxuQEAgLTE4OSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBpcHNlY19yeF9ydWxlX2FkZF9tYXRjaF9vYmooc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSxcbiBcdFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yKTtcbiBcdFx0TUxYNV9TRVQoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX3ZhbHVlLFxuIFx0XHRcdCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY18yLFxuLVx0XHRcdCBzYV9lbnRyeS1cdTAwM2VpcHNlY19vYmpfaWQgfCBCSVQoMzEpKTtcbitcdFx0XHQgc2FfZW50cnktXHUwMDNlaXBzZWNfb2JqX2lkKTtcbiBcbiBcdFx0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjtcbiBcdH1cbkBAIC0yMDY1LDcgKzIwNjcsNyBAQCBzdGF0aWMgaW50IHJ4X2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4gXHRpZiAoIWF0dHJzLVx1MDAzZWRyb3ApIHtcbiBcdFx0aWYgKHJ4ICE9IGlwc2VjLVx1MDAzZXJ4X2VzdylcbiBcdFx0XHRlcnIgPSBzZXR1cF9tb2RpZnlfaGVhZGVyKGlwc2VjLCBhdHRycy1cdTAwM2V0eXBlLFxuLVx0XHRcdFx0XHRcdCAgc2FfZW50cnktXHUwMDNlaXBzZWNfb2JqX2lkIHwgQklUKDMxKSxcbitcdFx0XHRcdFx0XHQgIHNhX2VudHJ5LVx1MDAzZWlwc2VjX29ial9pZCxcbiBcdFx0XHRcdFx0XHQgIFhGUk1fREVWX09GRkxPQURfSU4sIFx1MDAyNmZsb3dfYWN0KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVyciA9IG1seDVfZXN3X2lwc2VjX3J4X3NldHVwX21vZGlmeV9oZWFkZXIoc2FfZW50cnksIFx1MDAyNmZsb3dfYWN0KTtcbkBAIC0yMDk4LDYgKzIxMDAsMTAgQEAgc3RhdGljIGludCByeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfaXBzZWNfc2FfZW50cnkgKnNhX2VudHJ5KVxuIFx0XHRmbG93X2FjdC5hY3Rpb24gfD0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1A7XG4gXHRlbHNlXG4gXHRcdGZsb3dfYWN0LmFjdGlvbiB8PSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4rXHRpZiAoIWF0dHJzLVx1MDAzZWRyb3AgXHUwMDI2XHUwMDI2IHJ4ICE9IGlwc2VjLVx1MDAzZXJ4X2Vzdykge1xuK1x0XHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyB8PSBGTE9XX0NPTlRFWFRfSEFTX1RBRztcbitcdFx0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19JUFNFQztcbitcdH1cbiBcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4gXHRkZXN0WzBdLmZ0ID0gcngtXHUwMDNlZnQuc3RhdHVzO1xuIFx0ZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbkBAIC0yNTc0LDUzICsyNTgwLDE5IEBAIHZvaWQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfcmVhZF9zdGF0cyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwgdm9pZCAqaXBzZWNfc3RhdHMpXG4gXHR9XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTUxYNV9FU1dJVENIXG4tc3RhdGljIGludCBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLXtcbi1cdHN0cnVjdCBtbHg1X2Vzd2l0Y2ggKmVzdyA9IG1kZXYtXHUwMDNlcHJpdi5lc3dpdGNoO1xuLVx0aW50IGVyciA9IDA7XG4tXG4tXHRpZiAoZXN3KSB7XG4tXHRcdGVyciA9IG1seDVfZXN3X2xvY2soZXN3KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuLVx0aWYgKG1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKSB7XG4tXHRcdGVyciA9IC1FQlVTWTtcbi1cdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja190YysrO1xuLVxuLXVubG9jazpcbi1cdGlmIChlc3cpXG4tXHRcdG1seDVfZXN3X3VubG9jayhlc3cpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tI2Vsc2Vcbi1zdGF0aWMgaW50IG1seDVlX2lwc2VjX2Jsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXG4te1xuLVx0aWYgKG1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuLVx0bWRldi1cdTAwM2VudW1fYmxvY2tfdGMrKztcbi1cdHJldHVybiAwO1xuLX1cbi0jZW5kaWZcbi1cbi1zdGF0aWMgdm9pZCBtbHg1ZV9pcHNlY191bmJsb2NrX3RjX29mZmxvYWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXG4rc3RhdGljIGJvb2wgYWNjZWxfaXBzZWNfc2hvdWxkX2Jsb2NrX3RjKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4ge1xuLVx0bWRldi1cdTAwM2VudW1fYmxvY2tfdGMtLTtcbitcdHJldHVybiBzYV9lbnRyeS1cdTAwM2VhdHRycy50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUIHx8XG4rXHRcdHNhX2VudHJ5LVx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOO1xuIH1cbiBcbiBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiB7XG4rXHRib29sIGJsb2NrX3RjID0gYWNjZWxfaXBzZWNfc2hvdWxkX2Jsb2NrX3RjKHNhX2VudHJ5KTtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xuLVx0XHRlcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuK1x0aWYgKGJsb2NrX3RjKSB7XG4rXHRcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0yNjM2LDggKzI2MDgsOCBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3J1bGUoc3RydWN0IG1seDVlX2lwc2VjX3NhX2VudHJ5ICpzYV9lbnRyeSlcbiBcdHJldHVybiAwO1xuIFxuIGVycl9vdXQ6XG4tXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVClcbi1cdFx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHNhX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuK1x0aWYgKGJsb2NrX3RjKVxuK1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQoc2FfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0yNjUxLDggKzI2MjMsOCBAQCB2b2lkIG1seDVlX2FjY2VsX2lwc2VjX2ZzX2RlbF9ydWxlKHN0cnVjdCBtbHg1ZV9pcHNlY19zYV9lbnRyeSAqc2FfZW50cnkpXG4gXHRpZiAoaXBzZWNfcnVsZS1cdTAwM2Vwa3RfcmVmb3JtYXQpXG4gXHRcdG1seDVfcGFja2V0X3JlZm9ybWF0X2RlYWxsb2MobWRldiwgaXBzZWNfcnVsZS1cdTAwM2Vwa3RfcmVmb3JtYXQpO1xuIFxuLVx0aWYgKHNhX2VudHJ5LVx1MDAzZWF0dHJzLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpXG4tXHRcdG1seDVlX2lwc2VjX3VuYmxvY2tfdGNfb2ZmbG9hZChtZGV2KTtcbitcdGlmIChhY2NlbF9pcHNlY19zaG91bGRfYmxvY2tfdGMoc2FfZW50cnkpKVxuK1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQobWRldik7XG4gXG4gXHRpZiAoc2FfZW50cnktXHUwMDNlYXR0cnMuZGlyID09IFhGUk1fREVWX09GRkxPQURfT1VUKSB7XG4gXHRcdHR4X2Z0X3B1dChzYV9lbnRyeS1cdTAwM2VpcHNlYywgc2FfZW50cnktXHUwMDNlYXR0cnMudHlwZSk7XG5AQCAtMjY4Niw3ICsyNjU4LDcgQEAgaW50IG1seDVlX2FjY2VsX2lwc2VjX2ZzX2FkZF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBtbHg1ZV9pcHNlY19ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbitcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQocG9sX2VudHJ5LVx1MDAzZWlwc2VjLVx1MDAzZW1kZXYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC0yNzAxLDcgKzI2NzMsNyBAQCBpbnQgbWx4NWVfYWNjZWxfaXBzZWNfZnNfYWRkX3BvbChzdHJ1Y3QgbWx4NWVfaXBzZWNfcG9sX2VudHJ5ICpwb2xfZW50cnkpXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfb3V0OlxuLVx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbitcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0yNzEyLDcgKzI2ODQsNyBAQCB2b2lkIG1seDVlX2FjY2VsX2lwc2VjX2ZzX2RlbF9wb2woc3RydWN0IG1seDVlX2lwc2VjX3BvbF9lbnRyeSAqcG9sX2VudHJ5KVxuIFxuIFx0bWx4NV9kZWxfZmxvd19ydWxlcyhpcHNlY19ydWxlLVx1MDAzZXJ1bGUpO1xuIFxuLVx0bWx4NWVfaXBzZWNfdW5ibG9ja190Y19vZmZsb2FkKHBvbF9lbnRyeS1cdTAwM2VpcHNlYy1cdTAwM2VtZGV2KTtcbitcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwb2xfZW50cnktXHUwMDNlaXBzZWMtXHUwMDNlbWRldik7XG4gXG4gXHRpZiAocG9sX2VudHJ5LVx1MDAzZWF0dHJzLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKSB7XG4gXHRcdHJ4X2Z0X3B1dF9wb2xpY3kocG9sX2VudHJ5LVx1MDAzZWlwc2VjLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9pcHNlY19yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvaXBzZWNfcnh0eC5oXG5pbmRleCA0NWIwZDE5ZTczNWNiLi42ZGVhNTk3OGE0MGU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2lwc2VjX3J4dHguaFxuQEAgLTM4LDEwICszOCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlbi90eHJ4LmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gXG4tLyogQml0MzE6IElQc2VjIG1hcmtlciwgQml0MzA6IHJlc2VydmVkLCBCaXQyOS0yNDogSVBzZWMgc3luZHJvbWUsIEJpdDIzLTA6IElQc2VjIG9iaiBpZCAqL1xuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgPT0gMHgyKVxuLSNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9TWU5EUk9NKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDI0KSBcdTAwMjYgR0VOTUFTSyg1LCAwKSlcbisvKiBJUHNlYyBvYmogaWQgaW4gZnRfbWV0YWRhdGEgYml0c1syMzowXSAqL1xuICNkZWZpbmUgTUxYNV9JUFNFQ19NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSBcdTAwMjYgR0VOTUFTSygyMywgMCkpXG4gXG4gc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0YXRlIHtcbkBAIC03NCw3ICs3Myw5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX2lwc2VjX3R4X2lkc19sZW4oc3RydWN0IG1seDVlX2FjY2VsX3R4X2lwc2VjX3N0XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXBzZWNfaXNfcnhfZmxvdyhzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuIHtcbi1cdHJldHVybiBNTFg1X0lQU0VDX01FVEFEQVRBX01BUktFUihiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpKTtcbitcdHUzMiBwcm90byA9IG1seDVlX2FjY2VsX2Zsb3dfdGFnX3Byb3RvKGNxZSk7XG4rXG4rXHRyZXR1cm4gcHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fSVBTRUM7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9pcHNlY19lc2VnX21ldGEoc3RydWN0IG1seDVfd3FlX2V0aF9zZWcgKmVzZWcpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXG5pbmRleCBkYWZmNTNiYTdkMDlmLi5hYTdhMjg5NTQ4NjFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXCJlbi5oXCJcbiAjaW5jbHVkZSBcImxpYi9hc28uaFwiXG4gI2luY2x1ZGUgXCJsaWIvY3J5cHRvLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZW5fYWNjZWwuaFwiXG4gI2luY2x1ZGUgXCJlbl9hY2NlbC9tYWNzZWMuaFwiXG4gXG4gI2RlZmluZSBNTFg1X01BQ1NFQ19FUE5fU0NPUEVfTUlEIDB4ODAwMDAwMDBMXG5AQCAtMzI0LDYgKzMyNSw4IEBAIHN0YXRpYyB2b2lkIG1seDVlX21hY3NlY19jbGVhbnVwX3NhX2ZzKHN0cnVjdCBtbHg1ZV9tYWNzZWMgKm1hY3NlYyxcbiBcdG1seDVfbWFjc2VjX2ZzX2RlbF9ydWxlKG1hY3NlYy1cdTAwM2VtZGV2LVx1MDAzZW1hY3NlY19mcywgc2EtXHUwMDNlbWFjc2VjX3J1bGUsIGFjdGlvbiwgbmV0ZGV2LFxuIFx0XHRcdFx0ZnNfaWQpO1xuIFx0c2EtXHUwMDNlbWFjc2VjX3J1bGUgPSBOVUxMO1xuK1x0aWYgKCFpc190eClcbitcdFx0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKG1hY3NlYy1cdTAwM2VtZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfbWFjc2VjX2NsZWFudXBfc2Eoc3RydWN0IG1seDVlX21hY3NlYyAqbWFjc2VjLFxuQEAgLTM0Myw2ICszNDYsNyBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19pbml0X3NhX2ZzKHN0cnVjdCBtYWNzZWNfY29udGV4dCAqY3R4LFxuIFx0Y29uc3Qgc3RydWN0IG1hY3NlY190eF9zYyAqdHhfc2MgPSBcdTAwMjZjdHgtXHUwMDNlc2VjeS1cdTAwM2V0eF9zYztcbiBcdHN0cnVjdCBtbHg1X21hY3NlY19ydWxlX2F0dHJzIHJ1bGVfYXR0cnM7XG4gXHR1bmlvbiBtbHg1X21hY3NlY19ydWxlICptYWNzZWNfcnVsZTtcbitcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKGlzX3R4IFx1MDAyNlx1MDAyNiB0eF9zYy1cdTAwM2VlbmNvZGluZ19zYSAhPSBzYS1cdTAwM2Vhc3NvY19udW0pXG4gXHRcdHJldHVybiAwO1xuQEAgLTM1MywxMyArMzU3LDI2IEBAIHN0YXRpYyBpbnQgbWx4NWVfbWFjc2VjX2luaXRfc2FfZnMoc3RydWN0IG1hY3NlY19jb250ZXh0ICpjdHgsXG4gXHRydWxlX2F0dHJzLmFjdGlvbiA9IChpc190eCkgPyBNTFg1X0FDQ0VMX01BQ1NFQ19BQ1RJT05fRU5DUllQVCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0FDQ0VMX01BQ1NFQ19BQ1RJT05fREVDUllQVDtcbiBcbitcdGlmICghaXNfdHgpIHtcbitcdFx0ZXJyID0gbWx4NWVfYWNjZWxfYmxvY2tfdGNfb2ZmbG9hZChwcml2LVx1MDAzZW1kZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRtYWNzZWNfcnVsZSA9IG1seDVfbWFjc2VjX2ZzX2FkZF9ydWxlKG1hY3NlY19mcywgY3R4LCBcdTAwMjZydWxlX2F0dHJzLCBmc19pZCk7XG4tXHRpZiAoIW1hY3NlY19ydWxlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmICghbWFjc2VjX3J1bGUpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBvdXRfdW5ibG9ja190YztcbitcdH1cbiBcbiBcdHNhLVx1MDAzZW1hY3NlY19ydWxlID0gbWFjc2VjX3J1bGU7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXRfdW5ibG9ja190YzpcbitcdGlmICghaXNfdHgpXG4rXHRcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChwcml2LVx1MDAzZW1kZXYpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBtbHg1ZV9tYWNzZWNfaW5pdF9zYShzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbkBAIC03MzUsMTIgKzc1MiwxMiBAQCBzdGF0aWMgaW50IG1seDVlX21hY3NlY19hZGRfcnhzYyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eClcbiBcdCAqIGEgbm9uLU5VTEwgbWRfZHN0IHdpdGggdW5pbml0aWFsaXNlZCBjb250ZW50cy5cbiBcdCAqL1xuIFx0ZXJyID0geGFfYWxsb2MoXHUwMDI2bWFjc2VjLVx1MDAzZXNjX3hhcnJheSwgXHUwMDI2c2NfeGFycmF5X2VsZW1lbnQtXHUwMDNlZnNfaWQsIHNjX3hhcnJheV9lbGVtZW50LFxuLVx0XHQgICAgICAgWEFfTElNSVQoMSwgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbitcdFx0ICAgICAgIFhBX0xJTUlUKDEsIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpZiAoZXJyID09IC1FQlVTWSlcbiBcdFx0XHRuZXRkZXZfZXJyKGN0eC1cdTAwM2VuZXRkZXYsXG4gXHRcdFx0XHQgICBcIk1BQ3NlYyBvZmZsb2FkOiB1bmFibGUgdG8gY3JlYXRlIGVudHJ5IGZvciBSWCBTQyAoJWQgUnggU0NzIGFscmVhZHkgYWxsb2NhdGVkKVxcblwiLFxuLVx0XHRcdFx0ICAgTUxYNV9NQUNFQ19SWF9GU19JRF9NQVgpO1xuK1x0XHRcdFx0ICAgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFYKTtcbiBcdFx0Z290byBkZXN0cm95X21kX2RzdDtcbiBcdH1cbiBcbkBAIC0xMTM3LDcgKzExNTQsMTIgQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbiBcdHN0cnVjdCBtbHg1ZV9tYWNzZWNfc2EgKnJ4X3NhO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqbGlzdDtcbiBcdGludCBpLCBlcnIgPSAwO1xuK1x0Ym9vbCBibG9ja190YztcbiBcbitcdC8qIEJlc3QtZWZmb3J0IFRDIGJsb2NrIGFjcm9zcyB0aGUgb3BlcmF0aW9uLCB0byBwcmV2ZW50IGEgbWlzdGltZWQgVENcbitcdCAqIGZpbHRlciBhZGQgZnJvbSBwcmV2ZW50aW5nIHRoZSAybmQgbG9vcCBmcm9tIGhhcHBlbmluZy5cbitcdCAqL1xuK1x0YmxvY2tfdGMgPSBtbHg1ZV9hY2NlbF9ibG9ja190Y19vZmZsb2FkKHByaXYtXHUwMDNlbWRldikgPT0gMDtcbiBcbiBcdGxpc3QgPSBcdTAwMjZtYWNzZWNfZGV2aWNlLVx1MDAzZW1hY3NlY19yeF9zY19saXN0X2hlYWQ7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfc2MsIHRtcCwgbGlzdCwgcnhfc2NfbGlzdF9lbGVtZW50KSB7XG5AQCAtMTE2OCw2ICsxMTkwLDggQEAgc3RhdGljIGludCBtYWNzZWNfdXBkX3NlY3lfaHdfYWRkcmVzcyhzdHJ1Y3QgbWFjc2VjX2NvbnRleHQgKmN0eCxcbiBcbiBcdG1lbWNweShtYWNzZWNfZGV2aWNlLVx1MDAzZWRldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VhZGRyX2xlbik7XG4gb3V0OlxuK1x0aWYgKGJsb2NrX3RjKVxuK1x0XHRtbHg1ZV9hY2NlbF91bmJsb2NrX3RjX29mZmxvYWQocHJpdi1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTE3MDAsNyArMTcyNCw3IEBAIHZvaWQgbWx4NWVfbWFjc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0aWYgKCFtYWNzZWMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZzX2lkID0gTUxYNV9NQUNTRUNfUlhfTUVUQURBVF9IQU5ETEUobWFjc2VjX21ldGFfZGF0YSk7XG4rXHRmc19pZCA9IE1MWDVfTUFDU0VDX1JYX01FVEFEQVRBX0hBTkRMRShtYWNzZWNfbWV0YV9kYXRhKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNjX3hhcnJheV9lbGVtZW50ID0geGFfbG9hZChcdTAwMjZtYWNzZWMtXHUwMDNlc2NfeGFycmF5LCBmc19pZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG5pbmRleCAyN2RmNzJlMjMxMDZkLi41NzE2MjRmMmRiMTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL21hY3NlYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvbWFjc2VjLmhcbkBAIC05LDYgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21seDUvZHJpdmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbisjaW5jbHVkZSBcImVuX2FjY2VsL2Zsb3dfdGFnLmhcIlxuICNpbmNsdWRlIFwibGliL21hY3NlY19mcy5oXCJcbiBcbiBzdHJ1Y3QgbWx4NWVfcHJpdjtcbkBAIC0zMSw3ICszMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9tYWNzZWNfc2tiX2lzX29mZmxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfbWFjc2VjX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHRyZXR1cm4gTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuK1x0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbitcbitcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XG4gfVxuIFxuIHZvaWQgbWx4NWVfbWFjc2VjX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuaW5kZXggNzNiMjMyMzc5MjYzYS4uYWQ4ZGJkOGMyZjI3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXG5AQCAtNiw3ICs2LDkgQEBcbiAjaW5jbHVkZSBcIm1seDVfY29yZS5oXCJcbiAjaW5jbHVkZSBcInBzcC5oXCJcbiAjaW5jbHVkZSBcImxpYi9jcnlwdG8uaFwiXG4rI2luY2x1ZGUgXCJlbl9hY2NlbC9lbl9hY2NlbC5oXCJcbiAjaW5jbHVkZSBcImVuX2FjY2VsL3BzcC5oXCJcbisjaW5jbHVkZSBcImVuX2FjY2VsL3BzcF9yeHR4LmhcIlxuICNpbmNsdWRlIFwiZnNfY29yZS5oXCJcbiBcbiBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHtcbkBAIC0yMSw2ICsyMywxMyBAQCBlbnVtIGFjY2VsX3BzcF9zeW5kcm9tZSB7XG4gXHRQU1BfQkFEX1RSQUlMRVIsXG4gfTtcbiBcbitzdGF0aWMgY29uc3QgdTggcHNwX3N1cHBvcnRlZF92ZXJzaW9uc1tdID0ge1xuK1x0UFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyOCxcbitcdFBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8yNTYsXG4rfTtcbitcbisjZGVmaW5lIE1MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TIEFSUkFZX1NJWkUocHNwX3N1cHBvcnRlZF92ZXJzaW9ucylcbitcbiBzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuQEAgLTQxLDcgKzUwLDcgQEAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpyeF9tb2RpZnlfaGRyO1xuK1x0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuIH07XG4gXG5AQCAtNTIsNiArNjEsMTUgQEAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqdWRwX3J1bGVzW0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuIH07XG4gXG4rc3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSB7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmRyb3BfZ3JvdXA7XG4rXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xuK1x0c3RydWN0IG1seDVfcGt0X3JlZm9ybWF0ICpyZWZvcm1hdDtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlW01MWDVFX1BTUF9OVU1fU1VQUE9SVEVEX1ZFUlNJT05TXTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1bnN1cHBvcnRlZF9ydWxlO1xuK307XG4rXG4gc3RydWN0IG1seDVlX3BzcF9mcyB7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldjtcbiBcdHN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyO1xuQEAgLTYzLDEyICs4MSwyMyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbiBcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcbitcdC8qIFdoZW4gc2V0LCBzdGVlcmluZyBpcyBjb25maWd1cmVkIHRvIGRlY2Fwc3VsYXRlIFBTUCAocmVtb3ZlIFVEUCtQU1BcbitcdCAqIGhlYWRlcnMgYW5kIFBTUCB0cmFpbGVyKSBhbmQgaGFuZCBvZmYgdGhlIFNQSSBpbiBjcWUuZnRfbWV0YWRhdGEuXG4rXHQgKi9cbitcdGJvb2wgZGVjYXBfZW5hYmxlZDtcbiBcbiBcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSBkZWNyeXB0W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuIFx0c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSBjaGVjaztcbitcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjYXBfdGFibGUgZGVjYXA7XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHJ4O1xuIH07XG4gXG4rc3RhdGljIGJvb2wgc2hhbXBvX2VuYWJsZWQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY2hhbm5lbHMucGFyYW1zLnBhY2tldF9tZXJnZS50eXBlID09XG4rXHRcdE1MWDVFX1BBQ0tFVF9NRVJHRV9TSEFNUE87XG4rfVxuK1xuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXG4gc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXG4ge1xuQEAgLTExMCw2ICsxMzksMTUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVhbGxvY19tb2RpZnlfaGRyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICoqbW9kaGRyKVxuK3tcbitcdGlmICgqbW9kaGRyKSB7XG4rXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGRldiwgKm1vZGhkcik7XG4rXHRcdCptb2RoZHIgPSBOVUxMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICoqZ3JvdXApXG4ge1xuQEAgLTQwMiwxNSArNDQwLDE2MSBAQCBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpY1xuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY2FwX3RhYmxlICpkZWNhcClcbit7XG4rXHRpbnQgaTtcbitcbitcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY2FwLVx1MDAzZXVuc3VwcG9ydGVkX3J1bGUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7IGkrKylcbitcdFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjYXAtXHUwMDNlcnVsZVtpXSk7XG4rXHRpZiAoZGVjYXAtXHUwMDNlcmVmb3JtYXQpIHtcbitcdFx0bWx4NV9wYWNrZXRfcmVmb3JtYXRfZGVhbGxvYyhmcy1cdTAwM2VtZGV2LCBkZWNhcC1cdTAwM2VyZWZvcm1hdCk7XG4rXHRcdGRlY2FwLVx1MDAzZXJlZm9ybWF0ID0gTlVMTDtcbitcdH1cbitcdGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZGVjYXAtXHUwMDNlbW9kaWZ5X2hkcik7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmRlY2FwLVx1MDAzZWRyb3BfZ3JvdXApO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2ZGVjYXAtXHUwMDNlZnQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLCB1OCB2ZXJzaW9uKVxuK3tcbitcdHZvaWQgKm1pc2NfcGFyYW1zXzY7XG4rXG4rXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4rXHRzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSB8PSBNTFg1X01BVENIX01JU0NfUEFSQU1FVEVSU182O1xuK1x0bWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWEsXG4rXHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbitcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3NldF9taXNjNiwgbWlzY19wYXJhbXNfNiwgcHNwX3ZlcnNpb24pO1xuK1x0bWlzY19wYXJhbXNfNiA9IE1MWDVfQUREUl9PRihmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfdmFsdWUsXG4rXHRcdFx0XHQgICAgIG1pc2NfcGFyYW1ldGVyc182KTtcbitcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbWlzYzYsIG1pc2NfcGFyYW1zXzYsIHBzcF92ZXJzaW9uLCB2ZXJzaW9uKTtcbit9XG4rXG4rc3RhdGljXG4raW50IGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNhcF90YWJsZSAqZGVjYXApXG4re1xuK1x0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcbitcdHN0cnVjdCBtbHg1X3BrdF9yZWZvcm1hdF9wYXJhbXMgcmVmb3JtYXRfcGFyYW1zID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuK1x0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4rXHRzdHJ1Y3QgbWx4NV9wa3RfcmVmb3JtYXQgKnJlZm9ybWF0O1xuK1x0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuK1x0aW50IGksIGVyciA9IDA7XG4rXG4rXHRzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTtcbitcdGlmICghc3BlYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHQvKiBDcmVhdGUgRlQgKi9cbitcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgKyBNTFg1RV9QU1BfTlVNX1NVUFBPUlRFRF9WRVJTSU9OUztcbitcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfREVDQVBfRlRfTEVWRUw7XG4rXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbitcdGZ0X2F0dHIuYXV0b2dyb3VwLm51bV9yZXNlcnZlZF9lbnRyaWVzID0gMTtcbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmRlY2FwLVx1MDAzZWZ0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBmdCBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuK1x0XHRnb3RvIG91dF9zcGVjO1xuK1x0fVxuK1xuK1x0LyogQ3JlYXRlIGRyb3AgZ3JvdXAgKi9cbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNhcC1cdTAwM2VmdCwgXHUwMDI2ZGVjYXAtXHUwMDNlZHJvcF9ncm91cCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG1seDVfY29yZV9lcnIobWRldixcbitcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCByeCBkcm9wX2dyb3VwIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbitcdH1cbitcbitcdC8qIEFkZCBkZWZhdWx0IGRyb3AgcnVsZSAqL1xuK1x0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoZGVjYXAtXHUwMDNlZnQsIE5VTEwsIGZzLVx1MDAzZXJ4X2JhZF9jb3VudGVyLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2ZGVjYXAtXHUwMDNldW5zdXBwb3J0ZWRfcnVsZSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG1seDVfY29yZV9lcnIobWRldixcbitcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCBkZWNhcCB1bnN1cHBvcnRlZCB2ZXJzaW9ucyBkcm9wIHJ1bGUgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgZXJyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuK1x0fVxuK1xuK1x0LyogbW9kaWZ5X2hkcjogY29weSBTUEkgZnJvbSBSRUdfQ18wIHRvIFJFR19CICovXG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9DT1BZKTtcbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19maWVsZCxcbitcdFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19DXzApO1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9maWVsZCxcbitcdFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9vZmZzZXQsIDApO1xuK1xuK1x0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcbitcdFx0XHRcdFx0ICAgICAgMSwgYWN0aW9uKTtcbitcdGlmIChJU19FUlIobW9kaWZ5X2hkcikpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuK1x0fVxuK1x0ZGVjYXAtXHUwMDNlbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXG4rXHQvKiBwa3RfcmVmb3JtYXQ6IGRlY2FwIFBTUCB0cmFuc3BvcnQgKi9cbitcdHJlZm9ybWF0X3BhcmFtcy50eXBlID0gTUxYNV9SRUZPUk1BVF9UWVBFX1JFTU9WRV9QU1BfVFJBTlNQT1JUO1xuK1x0cmVmb3JtYXQgPSBtbHg1X3BhY2tldF9yZWZvcm1hdF9hbGxvYyhtZGV2LCBcdTAwMjZyZWZvcm1hdF9wYXJhbXMsXG4rXHRcdFx0XHRcdCAgICAgIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMKTtcbitcdGlmIChJU19FUlIocmVmb3JtYXQpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIocmVmb3JtYXQpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4rXHRkZWNhcC1cdTAwM2VyZWZvcm1hdCA9IHJlZm9ybWF0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUxYNUVfUFNQX05VTV9TVVBQT1JURURfVkVSU0lPTlM7IGkrKykge1xuK1x0XHR1OCB2ZXJzaW9uID0gcHNwX3N1cHBvcnRlZF92ZXJzaW9uc1tpXTtcbitcdFx0c3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTtcbitcbitcdFx0LyogbWF0Y2godmVyc2lvbikgPVx1MDAzZSBkZWNhcCwgY29weSBTUEksIGZ3ZCB0byByeCBGVCAqL1xuK1x0XHRzZXR1cF9mdGVfcHNwX3ZlcnNpb24oc3BlYywgdmVyc2lvbik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE92ZXJyaWRlIHRoZSBmbG93IHRhZyBzZXQgaW4gdGhlIGRlY3J5cHQgdGFibGUgd2l0aFxuK1x0XHQgKiB0aGUgZGVjYXAgUFNQIG1hcmtlciBhbmQgdmVyc2lvbi5cbitcdFx0ICovXG4rXHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzID0gRkxPV19DT05URVhUX0hBU19UQUc7XG4rXHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQIHxcbitcdFx0XHQoKHUzMil2ZXJzaW9uIFx1MDAzY1x1MDAzYyBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX1NISUZUKTtcbitcbitcdFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX1BBQ0tFVF9SRUZPUk1BVCB8XG4rXHRcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxuK1x0XHRcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcbitcdFx0Zmxvd19hY3QucGt0X3JlZm9ybWF0ID0gcmVmb3JtYXQ7XG4rXHRcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuK1x0XHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuK1x0XHRkZXN0LmZ0ID0gZnMtXHUwMDNlcnguZnQ7XG4rXG4rXHRcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY2FwLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4rXHRcdGlmIChJU19FUlIocnVsZSkpIHtcbitcdFx0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuK1x0XHRcdGdvdG8gb3V0X2VycjtcbitcdFx0fVxuK1x0XHRkZWNhcC1cdTAwM2VydWxlW2ldID0gcnVsZTtcbitcdH1cbitcdGdvdG8gb3V0X3NwZWM7XG4rXG4rb3V0X2VycjpcbitcdGFjY2VsX3BzcF9mc19yeF9kZWNhcF9mdF9kZXN0cm95KGZzLCBkZWNhcCk7XG4rb3V0X3NwZWM6XG4rXHRrdmZyZWUoc3BlYyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQpXG4ge1xuIFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjcnlwdC1cdTAwM2VydWxlKTtcbi1cdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbi1cdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbi1cdFx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbi1cdH1cbitcdGFjY2VsX3BzcF9mc19kZWFsbG9jX21vZGlmeV9oZHIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZGVjcnlwdC1cdTAwM2Vtb2RpZnlfaGRyKTtcbiBcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ydWxlKTtcbiBcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXHUwMDI2ZGVjcnlwdC1cdTAwM2VtaXNzX2dyb3VwKTtcbiBcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFx1MDAyNmRlY3J5cHQtXHUwMDNlZnQpO1xuQEAgLTQzMSwxMSArNjE1LDExIEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KVxuIHtcbiBcdHU4IGFjdGlvbltNTFg1X1VOX1NaX0JZVEVTKHNldF9hZGRfY29weV9hY3Rpb25faW5fYXV0byldID0ge307XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyID0gTlVMTDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbiBcdE1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7XG4rXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RoZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiBcdGludCBlcnIgPSAwO1xuQEAgLTQ3OSwzMCArNjYzLDM2IEBAIGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdH1cbiBcdGRlY3J5cHQtXHUwMDNlbWlzc19ydWxlID0gcnVsZTtcbiBcbi1cdC8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovXG4tXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XG4tXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcbi1cdC8qIFNldCBiaXRbMzEsIDMwXSBQU1AgbWFya2VyICovXG4tI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpXG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG4tXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIE1MWDVFX1BTUF9NQVJLRVJfQklUKTtcbi1cdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgb2Zmc2V0LCAwKTtcbi1cdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7XG4tXG4tXHRtb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLCAxLCBhY3Rpb24pO1xuLVx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBhbGxvYyBwc3Agc2V0IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXFxuXCIsIGVycik7XG4tXHRcdG1vZGlmeV9oZHIgPSBOVUxMO1xuK1x0LyogQ3JlYXRlIG1vZGlmeV9oZHIgdG8gY29weSBTUEkgdG8gUkVHX0NfMCAqL1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfQ09QWSk7XG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsXG4rXHRcdCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfSEVBREVSXzEpO1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4rXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDApOyAgLyogMCA9IDMyIGJpdHMgKi9cbitcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGRzdF9maWVsZCxcbitcdFx0IE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19DXzApO1xuK1x0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMCk7XG4rXG4rXHRtb2RoZHIgPSBtbHg1X21vZGlmeV9oZWFkZXJfYWxsb2MobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwsIDEsXG4rXHRcdFx0XHRcdCAgYWN0aW9uKTtcbitcdGlmIChJU19FUlIobW9kaGRyKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKG1vZGhkcik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGRlY3J5cHQtXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXHRkZWNyeXB0LVx1MDAzZW1vZGlmeV9oZHIgPSBtb2RoZHI7XG4gXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSO1xuLVx0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xuK1x0c2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpO1xuK1xuK1x0LyogU2V0IFBTUCBtYXJrZXIgdmlhIGZsb3dfdGFnICovXG4rXHRzcGVjLVx1MDAzZWZsb3dfY29udGV4dC5mbGFncyA9IEZMT1dfQ09OVEVYVF9IQVNfVEFHO1xuK1x0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1A7XG4rXG4rXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcbitcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4rXHRcdE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSIHxcbitcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUO1xuK1x0Zmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGhkcjtcbiBcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4gXHRkZXN0LmZ0ID0gZnMtXHUwMDNlY2hlY2suZnQ7XG4gXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG5AQCAtNTIzLDkgKzcxMyw1MCBAQCBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbitcdFx0XHRcdCAgICAgICBib29sIGRlY2FwX3dhbnRlZClcbit7XG4rXHRib29sIGRlY2FwX3N1cHBvcnRlZCA9XG4rXHRcdE1MWDVfQ0FQX0ZMT1dUQUJMRShmcy1cdTAwM2VtZGV2LFxuK1x0XHRcdFx0ICAgZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlZm9ybWF0X2RlbF9wc3BfdHJhbnNwb3J0KTtcbitcdGJvb2wgZGVjYXBfZW5hYmxlID0gZGVjYXBfd2FudGVkIFx1MDAyNlx1MDAyNiBkZWNhcF9zdXBwb3J0ZWQ7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBDcmVhdGUgdGhlIGRlY2FwIHRhYmxlIGlmIG5lZWRlZC4gKi9cbitcdGlmIChkZWNhcF9lbmFibGUgXHUwMDI2XHUwMDI2ICFmcy1cdTAwM2VkZWNhcC5mdCkge1xuK1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VkZWNhcCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRtbHg1X2NvcmVfd2Fybihmcy1cdTAwM2VtZGV2LFxuK1x0XHRcdFx0ICAgICAgIFwiRmFpbGVkIHRvIGNyZWF0ZSBQU1AgZGVjYXBzdWxhdGlvbiBydWxlcyAoZXJyICVkKSwgSFcgR1JPIGZvciBQU1AgdW5hdmFpbGFibGVcIixcbitcdFx0XHRcdCAgICAgICBlcnIpO1xuK1x0XHRcdGRlY2FwX2VuYWJsZSA9IGZhbHNlO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZGVjYXBfZW5hYmxlID09IGZzLVx1MDAzZWRlY2FwX2VuYWJsZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogUmVkaXJlY3QgdHJhZmZpYyB0byB0aGUgY29ycmVjdCB0YWJsZS4gKi9cbitcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4rXHRkZXN0LmZ0ID0gZGVjYXBfZW5hYmxlID8gZnMtXHUwMDNlZGVjYXAuZnQgOiBmcy1cdTAwM2VyeC5mdDtcbitcdGVyciA9IG1seDVfbW9kaWZ5X3J1bGVfZGVzdGluYXRpb24oZnMtXHUwMDNlY2hlY2sucnVsZSwgXHUwMDI2ZGVzdCwgTlVMTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95X2Z0O1xuK1xuK1x0ZnMtXHUwMDNlZGVjYXBfZW5hYmxlZCA9IGRlY2FwX2VuYWJsZTtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9kZXN0cm95X2Z0OlxuK1x0aWYgKGRlY2FwX2VuYWJsZSlcbitcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY2FwX2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY2FwKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbiBcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuK1x0Ym9vbCB0Y19ibG9ja2VkID0gZnMtXHUwMDNlcnguZnQ7XG4gXHRpbnQgaTtcbiBcbiBcdC8qIGRpc2Nvbm5lY3QgKi9cbkBAIC01MzQsMTkgKzc2NSwyOSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4gXHR9XG4gXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4rXHRhY2NlbF9wc3BfZnNfcnhfZGVjYXBfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjYXApO1xuIFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuK1x0aWYgKHRjX2Jsb2NrZWQpXG4rXHRcdG1seDVlX2FjY2VsX3VuYmxvY2tfdGNfb2ZmbG9hZChmcy1cdTAwM2VtZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuK1x0XHRcdFx0ICBib29sIGRlY2FwX2VuYWJsZSxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuIFx0aW50IGksIGVycjtcbiBcbitcdGVyciA9IG1seDVlX2FjY2VsX2Jsb2NrX3RjX29mZmxvYWQoZnMtXHUwMDNlbWRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJUQyBvZmZsb2FkIGFjdGl2ZSwgY2Fubm90IGVuYWJsZSBQU1BcIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VyeCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJGYWlsZWQgY3JlYXRpbmcgUlggc3RlZXJpbmcgdGFibGVcIik7XG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX3VuYmxvY2tfdGM7XG4gXHR9XG4gXG4gXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG5AQCAtNTczLDYgKzgxNCwxMiBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRcdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpLCBcdTAwMjZkZXN0KTtcbiBcdH1cbiBcbitcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShmcywgZGVjYXBfZW5hYmxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkZhaWxlZCBSWCBzdGVlcmluZyBjb25maWcgZm9yIEhXIEdST1wiKTtcbitcdFx0Z290byBlcnJfZGVjcnlwdF9mdDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIFxuIGVycl9kZWNyeXB0X2Z0OlxuQEAgLTU4Myw2ICs4MzAsOCBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4gXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4gZXJyX2Z0OlxuIFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuK2Vycl91bmJsb2NrX3RjOlxuK1x0bWx4NWVfYWNjZWxfdW5ibG9ja190Y19vZmZsb2FkKGZzLVx1MDAzZW1kZXYpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtODM5LDcgKzEwODgsOCBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIGV4dGFjayk7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBzaGFtcG9fZW5hYmxlZChwcml2KSxcbitcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5AQCAtMTExNiwzICsxMzY2LDE0IEBAIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRwcml2LVx1MDAzZXBzcCA9IE5VTEw7XG4gXHRrZnJlZShwc3ApO1xuIH1cbitcbitpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVx1MDAzZXBzcDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKHByaXYtXHUwMDNlbmV0ZGV2KTtcbitcdGlmICghcHNwIHx8ICFwc3AtXHUwMDNlZnMtXHUwMDNlY2hlY2suZnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGFjY2VsX3BzcF9mc19yeF9yZWNvbmZpZ3VyZShwc3AtXHUwMDNlZnMsIHNoYW1wb19lbmFibGVkKHByaXYpKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG5pbmRleCAzZjQ0MWU3ZGQ1NWFjLi43NmY2YzY5ZGUwZTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC00OSw2ICs0OSw3IEBAIGludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4raW50IG1seDVlX3BzcF91cGRhdGVfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuQEAgLTYxLDUgKzYyLDYgQEAgc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3VwZGF0ZV9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuICNlbmRpZiAvKiBDT05GSUdfTUxYNV9FTl9QU1AgKi9cbiAjZW5kaWYgLyogX19NTFg1RV9BQ0NFTF9QU1BfSF9fICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuaW5kZXggMzQ4ZmQ3YTk2MjYxNS4uMmJlZmZlZTE0Mjc4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuQEAgLTExOCwxMCArMTE4LDI1IEBAIGJvb2wgbWx4NWVfcHNwX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqXG4ge1xuIFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0dTE2IGRldl9pZCA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZXBzZC1cdTAwM2VpZDtcbi1cdGJvb2wgc3RyaXBfaWN2ID0gdHJ1ZTtcbi1cdHU4IGdlbmVyYXRpb24gPSAwO1xuK1x0c3RydWN0IHBzcF9za2JfZXh0ICpwc2U7XG4rXG4rXHRpZiAobWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpIHtcbitcdFx0LyogVURQICsgUFNQIGhlYWRlcnMgYW5kIFBTUCB0cmFpbGVyIHJlbW92ZWQgYnkgSFcuXG4rXHRcdCAqIENvbnN0cnVjdCB0aGUgUFNQIGV4dGVuc2lvbiBmcm9tIENRRSBtZXRhZGF0YS5cbitcdFx0ICovXG4rXHRcdHBzZSA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9QU1ApO1xuK1x0XHRpZiAodW5saWtlbHkoIXBzZSkpXG4rXHRcdFx0Z290byBkcm9wO1xuK1xuK1x0XHRwc2UtXHUwMDNlc3BpID0gbWx4NWVfcHNwX2dldF9zcGkoY3FlKTtcbitcdFx0cHNlLVx1MDAzZXZlcnNpb24gPSBtbHg1ZV9wc3BfZ2V0X3ZlcnNpb24oY3FlKTtcbitcdFx0cHNlLVx1MDAzZWRldl9pZCA9IGRldl9pZDtcbitcdFx0cHNlLVx1MDAzZWdlbmVyYXRpb24gPSAwO1xuK1x0XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gMTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuLVx0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCBnZW5lcmF0aW9uLCBzdHJpcF9pY3YpKVxuK1x0aWYgKHBzcF9kZXZfcmN2KHNrYiwgZGV2X2lkLCAwLCB0cnVlKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuIFx0c2tiLVx1MDAzZWRlY3J5cHRlZCA9IDE7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuaW5kZXggMmIwODBjMzljYzM3ZS4uNDFiNjAyNTliM2JjNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuQEAgLTksMTAgKzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9wc3AuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlbi90eHJ4LmhcIlxuLVxuLS8qIEJpdDMwOiBQU1AgbWFya2VyLCBCaXQyMi0wOiBQU1Agb2JqIGlkICovXG4tI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9NQVJLRVIobWV0YWRhdGEpICAoKCgobWV0YWRhdGEpIFx1MDAzZVx1MDAzZSAzMCkgXHUwMDI2IDB4MykgPT0gMHgzKVxuLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IEdFTk1BU0soMjIsIDApKVxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gXG4gc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZSB7XG4gXHR1MzIgdGFpbGVuO1xuQEAgLTgyLDcgKzc5LDI5IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1seDVlX3BzcF90eF9pZHNfbGVuKHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGVcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX3J4X2Zsb3coc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHRyZXR1cm4gTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSkpO1xuK1x0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbitcbitcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1AgfHxcbitcdFx0cHJvdG8gPT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fUFNQX0RFQ0FQO1xuK1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcHNwX2lzX2RlY2FwKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0dTMyIHByb3RvID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbitcbitcdHJldHVybiBwcm90byA9PSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19QU1BfREVDQVA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0cmV0dXJuIChtbHg1ZV9hY2NlbF9mbG93X3RhZyhjcWUpIFx1MDAyNiBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX01BU0spIFx1MDAzZVx1MDAzZVxuK1x0XHRNTFg1RV9BQ0NFTF9GTE9XX1RBR19QU1BfVkVSX1NISUZUO1xuK31cbitcbitzdGF0aWMgaW5saW5lIF9fYmUzMiBtbHg1ZV9wc3BfZ2V0X3NwaShzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuK3tcbitcdHJldHVybiBjcWUtXHUwMDNlZnRfbWV0YWRhdGE7XG4gfVxuIFxuIGJvb2wgbWx4NWVfcHNwX29mZmxvYWRfaGFuZGxlX3J4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTExMCw2ICsxMjksMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVlX3BzcF9pc19yeF9mbG93KHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3BfaXNfZGVjYXAoc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTggbWx4NWVfcHNwX2dldF92ZXJzaW9uKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgX19iZTMyIG1seDVlX3BzcF9nZXRfc3BpKHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jXG5pbmRleCAzYjlkNDJjN2U5YzI4Li4zYzZlZjUwMGQwZmIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYyODYsNyArNjI4NiwxMyBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBzdGF0aWMgaW50IG1seDVlX3VwZGF0ZV9uaWNfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0cmV0dXJuIG1seDVlX3JlZnJlc2hfdGlycyhwcml2LVx1MDAzZW1kZXYsIGZhbHNlLCBmYWxzZSk7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gbWx4NWVfcmVmcmVzaF90aXJzKHByaXYtXHUwMDNlbWRldiwgZmFsc2UsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gbWx4NWVfYWNjZWxfdXBkYXRlX3J4KHByaXYpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1seDVlX3Byb2ZpbGUgbWx4NWVfbmljX3Byb2ZpbGUgPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xuaW5kZXggZmI3MTEwYjFiNjgzNC4uYzdlYWFiM2Y3OTY3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguY1xuQEAgLTIyMjEsNiArMjIyMSwzMyBAQCBzdGF0aWMgYm9vbCBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIHBhZ2Vfc2l6ZSAqIG5yX2ZyYWdzICsgZGF0YV9iY250IFx1MDAzYz0gR1JPX0xFR0FDWV9NQVhfU0laRTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbWx4NWVfaHdfZ3JvX3BzcF9tYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuK3tcbisjaWZkZWYgQ09ORklHX01MWDVfRU5fUFNQXG4rXHRzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZSA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfUFNQKTtcbitcdGJvb2wgaXNfcHNwID0gbWx4NWVfcHNwX2lzX3J4X2Zsb3coY3FlKTtcbitcbitcdGlmIChsaWtlbHkoIWlzX3BzcCBcdTAwMjZcdTAwMjYgIXBzZSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LyogTm8gbWF0Y2ggb24gUFNQIHN0YXR1cyBjaGFuZ2UgKG5vIGNyeXB0byAtXHUwMDNlIGNyeXB0byBvciB2aWNlLXZlcnNhKS4gKi9cbitcdGlmICh1bmxpa2VseShpc19wc3AgIT0gISFwc2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBTUEkgYW5kIHZlcnNpb24gYXJlIG9ubHkgYXZhaWxhYmxlIGluIENRRSBtZXRhZGF0YSBmb3IgZGVjYXAgZmxvd3MuXG4rXHQgKiBOb24tZGVjYXAgUFNQIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUsIGZvcmNlIGEgZmx1c2guXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSghbWx4NWVfcHNwX2lzX2RlY2FwKGNxZSkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBObyBtYXRjaCBvbiBzZWN1cml0eSBwYXJhbWV0ZXJzIGNoYW5nZS4gKi9cbitcdHJldHVybiBwc2UtXHUwMDNlc3BpID09IG1seDVlX3BzcF9nZXRfc3BpKGNxZSkgXHUwMDI2XHUwMDI2XG4rXHRcdHBzZS1cdTAwM2V2ZXJzaW9uID09IG1seDVlX3BzcF9nZXRfdmVyc2lvbihjcWUpO1xuKyNlbHNlXG4rXHRyZXR1cm4gdHJ1ZTtcbisjZW5kaWZcbit9XG4rXG4gc3RhdGljIHZvaWQgbWx4NWVfaGFuZGxlX3J4X2NxZV9tcHdycV9zaGFtcG8oc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4gXHR1MTYgZGF0YV9iY250XHRcdD0gbXB3cnFfZ2V0X2NxZV9ieXRlX2NudChjcWUpIC0gY3FlLVx1MDAzZXNoYW1wby5oZWFkZXJfc2l6ZTtcbkBAIC0yMjU4LDggKzIyODUsOSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbyhzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NV9jcVxuIFx0ZGF0YV9vZmZzZXQgPSB3cWVfb2Zmc2V0IFx1MDAyNiAocGFnZV9zaXplIC0gMSk7XG4gXHRwYWdlX2lkeCA9IHdxZV9vZmZzZXQgXHUwMDNlXHUwMDNlIHJxLVx1MDAzZW1wd3FlLnBhZ2Vfc2hpZnQ7XG4gXHRpZiAoKnNrYiBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKG1hdGNoIFx1MDAyNlx1MDAyNiBtbHg1ZV9od19ncm9fc2tiX2hhc19lbm91Z2hfc3BhY2UoKnNrYiwgZGF0YV9iY250LFxuLVx0XHRcdFx0XHRcdFx0IHBhZ2Vfc2l6ZSkpKSB7XG4rXHQgICAgIShtYXRjaCBcdTAwMjZcdTAwMjZcbitcdCAgICAgIG1seDVlX2h3X2dyb19za2JfaGFzX2Vub3VnaF9zcGFjZSgqc2tiLCBkYXRhX2JjbnQsIHBhZ2Vfc2l6ZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICBtbHg1ZV9od19ncm9fcHNwX21hdGNoKCpza2IsIGNxZSkpKSB7XG4gXHRcdG1hdGNoID0gZmFsc2U7XG4gXHRcdG1seDVlX3NoYW1wb19mbHVzaF9za2IocnEsIGNxZSwgbWF0Y2gpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmNcbmluZGV4IDFiYzdiOTAxOTEyNGEuLjcwMTk1ZmNkZGZjODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmNcbkBAIC00ODExLDE0ICs0ODExLDE0IEBAIHN0YXRpYyBib29sIGlzX2Zsb3dfcnVsZV9kdXBsaWNhdGVfYWxsb3dlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIG5ldGlmX2lzX2xhZ19wb3J0KGRldikgXHUwMDI2XHUwMDI2IHJwcml2IFx1MDAyNlx1MDAyNiBycHJpdi1cdTAwM2VyZXAtXHUwMDNldnBvcnQgIT0gTUxYNV9WUE9SVF9VUExJTks7XG4gfVxuIFxuLS8qIEFzIElQc2VjIGFuZCBUQyBvcmRlciBpcyBub3QgYWxpZ25lZCBiZXR3ZWVuIHNvZnR3YXJlIGFuZCBoYXJkd2FyZS1vZmZsb2FkLFxuLSAqIGVpdGhlciBJUHNlYyBvZmZsb2FkIG9yIFRDIG9mZmxvYWQsIG5vdCBib3RoLCBpcyBhbGxvd2VkIGZvciBhIHNwZWNpZmljIGludGVyZmFjZS5cbisvKiBUQyBvZmZsb2FkIGFuZCBhY2NlbCBwcm90b2NvbHMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgZmxvd190YWcgd2l0aFxuKyAqIHN0ZWVyaW5nIHJ1bGVzIGFuZCB0aGV5IGNhbm5vdCBzaW11bHRhbmVvdXNseSBvcGVyYXRlIG9uIHRoZSBzYW1lIGludGVyZmFjZS5cbisgKiBBZGRpdGlvbmFsbHksIGFzIElQc2VjIGFuZCBUQyBvcmRlciBpcyBub3QgYWxpZ25lZCBiZXR3ZWVuIHNvZnR3YXJlIGFuZFxuKyAqIGhhcmR3YXJlLW9mZmxvYWQsIG9ubHkgb25lIGlzIGFsbG93ZWQgZm9yIGEgc3BlY2lmaWMgaW50ZXJmYWNlLlxuICAqL1xuLXN0YXRpYyBib29sIGlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyLCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbitzdGF0aWMgYm9vbCBpc190Y19hY2NlbF9jaGVja19uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlcixcbitcdFx0XHRcdCAgICAgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NTFg1X0VOX0lQU0VDKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuIFx0aWYgKGZpbHRlciAhPSBwcml2LVx1MDAzZW5ldGRldilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTQ4MjgsMjcgKzQ4MjgsMzUgQEAgc3RhdGljIGJvb2wgaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsIHN0cnVjdCBtbHhcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG1seDVlX3RjX2Jsb2NrX2lwc2VjX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBtbHg1ZV90Y19ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4rXHRcdFx0XHRcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuK1x0aW50IHJldCA9IDA7XG4gXG4tXHRpZiAoIWlzX3RjX2lwc2VjX29yZGVyX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKVxuK1x0aWYgKCFpc190Y19hY2NlbF9jaGVja19uZWVkZWQoZmlsdGVyLCBwcml2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAobWRldi1cdTAwM2VudW1fYmxvY2tfdGMpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4tXHRtZGV2LVx1MDAzZW51bV9ibG9ja19pcHNlYysrO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subG9jayk7XG4rXHRpZiAobWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV90YylcbitcdFx0cmV0ID0gLUVCVVNZO1xuK1x0ZWxzZVxuK1x0XHRtZGV2LVx1MDAzZW9mZmxvYWRfYmxvY2subnVtX2FjY2VsKys7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtbHg1ZV90Y191bmJsb2NrX2lwc2VjX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmZpbHRlciwgc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIHZvaWQgbWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpmaWx0ZXIsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGlmICghaXNfdGNfaXBzZWNfb3JkZXJfY2hlY2tfbmVlZGVkKGZpbHRlciwgcHJpdikpXG4rXHRpZiAoIWlzX3RjX2FjY2VsX2NoZWNrX25lZWRlZChmaWx0ZXIsIHByaXYpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwcml2LVx1MDAzZW1kZXYtXHUwMDNlbnVtX2Jsb2NrX2lwc2VjLS07XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuK1x0aWYgKCFXQVJOX09OX09OQ0UoIXByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbCkpXG4rXHRcdHByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLm51bV9hY2NlbC0tO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRldi1cdTAwM2VvZmZsb2FkX2Jsb2NrLmxvY2spO1xuIH1cbiBcbiBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbkBAIC00ODYzLDcgKzQ4NzEsNyBAQCBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdGlmICghbWx4NV9lc3dfaG9sZChwcml2LVx1MDAzZW1kZXYpKVxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuLVx0ZXJyID0gbWx4NWVfdGNfYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuK1x0ZXJyID0gbWx4NWVfdGNfYmxvY2tfYWNjZWxfb2ZmbG9hZChkZXYsIHByaXYpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlc3dfcmVsZWFzZTtcbiBcbkBAIC00OTEyLDcgKzQ5MjAsNyBAQCBpbnQgbWx4NWVfY29uZmlndXJlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBlcnJfZnJlZTpcbiBcdG1seDVlX2Zsb3dfcHV0KHByaXYsIGZsb3cpO1xuIG91dDpcbi1cdG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuK1x0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRtbHg1X2Vzd19wdXQocHJpdi1cdTAwM2VtZGV2KTtcbiBlc3dfcmVsZWFzZTpcbiBcdG1seDVfZXN3X3JlbGVhc2UocHJpdi1cdTAwM2VtZGV2KTtcbkBAIC00OTU1LDcgKzQ5NjMsNyBAQCBpbnQgbWx4NWVfZGVsZXRlX2Zsb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdHRyYWNlX21seDVlX2RlbGV0ZV9mbG93ZXIoZik7XG4gXHRtbHg1ZV9mbG93X3B1dChwcml2LCBmbG93KTtcbiBcbi1cdG1seDVlX3RjX3VuYmxvY2tfaXBzZWNfb2ZmbG9hZChkZXYsIHByaXYpO1xuK1x0bWx4NWVfdGNfdW5ibG9ja19hY2NlbF9vZmZsb2FkKGRldiwgcHJpdik7XG4gXHRtbHg1X2Vzd19wdXQocHJpdi1cdTAwM2VtZGV2KTtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbmluZGV4IGUxYjhjYjc4MzY5ZjEuLjUzYjYwNDNlMzNkMjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmhcbkBAIC0zNiw2ICszNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuICNpbmNsdWRlIFwiZW4uaFwiXG4gI2luY2x1ZGUgXCJlc3dpdGNoLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gI2luY2x1ZGUgXCJlbi90Y19jdC5oXCJcbiAjaW5jbHVkZSBcImVuL3RjX3R1bi5oXCJcbiAjaW5jbHVkZSBcImVuL3RjL2ludF9wb3J0LmhcIlxuQEAgLTM3MCwxMSArMzcxLDEzIEBAIHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqbWx4NWVfdGNfdGFibGVfYWxsb2Modm9pZCk7XG4gdm9pZCBtbHg1ZV90Y190YWJsZV9mcmVlKHN0cnVjdCBtbHg1ZV90Y190YWJsZSAqdGMpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9jcWVfcmVnYl9jaGFpbihzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuIHtcbi1cdHUzMiBjaGFpbiwgcmVnX2I7XG4rXHR1MzIgZmxvd190YWcsIHJlZ19iLCBjaGFpbjtcbiBcbitcdGZsb3dfdGFnID0gbWx4NWVfYWNjZWxfZmxvd190YWdfcHJvdG8oY3FlKTtcbiBcdHJlZ19iID0gYmUzMl90b19jcHUoY3FlLVx1MDAzZWZ0X21ldGFkYXRhKTtcbiBcbi1cdGlmIChyZWdfYiBcdTAwM2VcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpXG4rXHRpZiAoZmxvd190YWcgIT0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTk9ORSB8fFxuK1x0ICAgIChyZWdfYiBcdTAwM2VcdTAwM2UgKE1MWDVFX1RDX1RBQkxFX0NIQUlOX1RBR19CSVRTICsgRVNXX1pPTkVfSURfQklUUykpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjaGFpbiA9IHJlZ19iIFx1MDAyNiBNTFg1RV9UQ19UQUJMRV9DSEFJTl9UQUdfTUFTSztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuY1xuaW5kZXggZWZjNTE2NzQ5M2MxMi4uYjhlOTAyMTAyN2U5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21seDUvbWFjc2VjLmhcdTAwM2VcbiAjaW5jbHVkZSBcImZzX2NvcmUuaFwiXG4gI2luY2x1ZGUgXCJsaWIvbWFjc2VjX2ZzLmhcIlxuKyNpbmNsdWRlIFwiZW5fYWNjZWwvZmxvd190YWcuaFwiXG4gI2luY2x1ZGUgXCJtbHg1X2NvcmUuaFwiXG4gXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cbkBAIC00NSw5ICs0Niw2IEBAXG4gI2RlZmluZSBNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIT1VUX1NDSSAweDhcbiAjZGVmaW5lIE1MWDVfU0VDVEFHX0hFQURFUl9TSVpFX1dJVEhfU0NJIChNTFg1X1NFQ1RBR19IRUFERVJfU0laRV9XSVRIT1VUX1NDSSArIE1BQ1NFQ19TQ0lfTEVOKVxuIFxuLS8qIE1BQ3NlYyBmc19pZCBoYW5kbGluZyBmb3Igc3RlZXJpbmcgKi9cbi0jZGVmaW5lIG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpICgoZnNfaWQpIHwgQklUKDMwKSlcbi1cbiBzdHJ1Y3QgbWx4NV9zZWN0YWdfaGVhZGVyIHtcbiBcdF9fYmUxNiBldGhlcnR5cGU7XG4gXHR1OCB0Y2lfYW47XG5AQCAtMTc1NywxMSArMTc1NSwxMCBAQCBtYWNzZWNfZnNfcnhfYWRkX3J1bGUoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsXG4gXHRyeF90YWJsZXMgPSBcdTAwMjZyeF9mcy1cdTAwM2V0YWJsZXM7XG4gXHRmdF9jcnlwdG8gPSBcdTAwMjZyeF90YWJsZXMtXHUwMDNlZnRfY3J5cHRvO1xuIFxuLVx0LyogU2V0IGJpdFszMSAtIDMwXSBtYWNzZWMgbWFya2VyIC0gMHgwMSAqL1xuIFx0LyogU2V0IGJpdFsxNS0wXSBmcyBpZCAqL1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpO1xuIFx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBmaWVsZCwgTUxYNV9BQ1RJT05fSU5fRklFTERfTUVUQURBVEFfUkVHX0IpO1xuLVx0TUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBkYXRhLCBtYWNzZWNfZnNfc2V0X3J4X2ZzX2lkKGZzX2lkKSk7XG4rXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGRhdGEsIGZzX2lkKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgb2Zmc2V0LCAwKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgbGVuZ3RoLCAzMik7XG4gXG5AQCAtMTc3OCw2ICsxNzc1LDkgQEAgbWFjc2VjX2ZzX3J4X2FkZF9ydWxlKHN0cnVjdCBtbHg1X21hY3NlY19mcyAqbWFjc2VjX2ZzLFxuIFx0LyogUnggY3J5cHRvIHRhYmxlIHdpdGggU0NJIHJ1bGUgKi9cbiBcdG1hY3NlY19mc19yeF9zZXR1cF9mdGUoc3BlYywgXHUwMDI2Zmxvd19hY3QsIGF0dHJzLCB0cnVlKTtcbiBcbitcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsYWdzIHw9IEZMT1dfQ09OVEVYVF9IQVNfVEFHO1xuK1x0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxvd190YWcgPSBNTFg1RV9BQ0NFTF9GTE9XX1RBR19QUk9UT19NQUNTRUM7XG4rXG4gXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxuQEAgLTE4MDMsNiArMTgwMyw5IEBAIG1hY3NlY19mc19yeF9hZGRfcnVsZShzdHJ1Y3QgbWx4NV9tYWNzZWNfZnMgKm1hY3NlY19mcyxcbiBcbiBcdFx0bWFjc2VjX2ZzX3J4X3NldHVwX2Z0ZShzcGVjLCBcdTAwMjZmbG93X2FjdCwgYXR0cnMsIGZhbHNlKTtcbiBcbitcdFx0c3BlYy1cdTAwM2VmbG93X2NvbnRleHQuZmxhZ3MgfD0gRkxPV19DT05URVhUX0hBU19UQUc7XG4rXHRcdHNwZWMtXHUwMDNlZmxvd19jb250ZXh0LmZsb3dfdGFnID0gTUxYNUVfQUNDRUxfRkxPV19UQUdfUFJPVE9fTUFDU0VDO1xuK1xuIFx0XHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcdFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbiBcdFx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHxcbkBAIC0yMTYwLDggKzIxNjMsOCBAQCBzdGF0aWMgaW50IG1seDVfbWFjc2VjX2ZzX2FkZF9yb2NlX3J1bGVfcngoc3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnMsIHUzMlxuIFxuIFx0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgfD0gTUxYNV9NQVRDSF9NSVNDX1BBUkFNRVRFUlNfMjtcbiBcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3BhcmFtLCBzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhLCBtaXNjX3BhcmFtZXRlcnNfMi5tZXRhZGF0YV9yZWdfY181KTtcbi1cdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgbWlzY19wYXJhbWV0ZXJzXzIubWV0YWRhdGFfcmVnX2NfNSxcbi1cdFx0IG1hY3NlY19mc19zZXRfcnhfZnNfaWQoZnNfaWQpKTtcbitcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbitcdFx0IG1pc2NfcGFyYW1ldGVyc18yLm1ldGFkYXRhX3JlZ19jXzUsIGZzX2lkKTtcbiBcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9BTExPVztcbiBcdG5ld19ydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9mcy1cdTAwM2Vyb2NlLmZ0X21hY3NlY19vcF9jaGVjaywgc3BlYywgXHUwMDI2Zmxvd19hY3QsXG4gXHRcdFx0XHQgICAgICAgTlVMTCwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9tYWNzZWNfZnMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvbWFjc2VjX2ZzLmhcbmluZGV4IDE1YWNhZmY0MzY0MTcuLmI4YjhiNDEyZDVjM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL21hY3NlY19mcy5oXG5AQCAtNiwxMSArNiwxMCBAQFxuIFxuICNpZmRlZiBDT05GSUdfTUxYNV9NQUNTRUNcbiBcbi0vKiBCaXQzMSAtIDMwOiBNQUNzZWMgbWFya2VyLCBCaXQxNS0wOiBNQUNzZWMgaWQgKi9cbi0jZGVmaW5lIE1MWDVfTUFDRUNfUlhfRlNfSURfTUFYIFVTSFJUX01BWCAvKiBNdXN0IGJlIHBvd2VyIG9mIHR3byAqL1xuLSNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfRlNfSURfTUFTSyBNTFg1X01BQ0VDX1JYX0ZTX0lEX01BWFxuLSNkZWZpbmUgTUxYNV9NQUNTRUNfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcdTAwM2VcdTAwM2UgMzApIFx1MDAyNiAweDMpICA9PSAweDEpXG4tI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9NRVRBREFUX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFx1MDAyNiBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLKVxuKy8qIE1BQ3NlYyBmc19pZCBpbiBmdF9tZXRhZGF0YSBiaXRzWzE1OjBdICovXG4rI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVggVVNIUlRfTUFYIC8qIE11c3QgYmUgcG93ZXIgb2YgdHdvICovXG4rI2RlZmluZSBNTFg1X01BQ1NFQ19SWF9GU19JRF9NQVNLIE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BWFxuKyNkZWZpbmUgTUxYNV9NQUNTRUNfUlhfTUVUQURBVEFfSEFORExFKG1ldGFkYXRhKSAgKChtZXRhZGF0YSkgXHUwMDI2IE1MWDVfTUFDU0VDX1JYX0ZTX0lEX01BU0spXG4gXG4gLyogTUFDc2VjIFRYIGZsb3cgc3RlZXJpbmcgKi9cbiAjZGVmaW5lIE1MWDVfRVRIX1dRRV9GVF9NRVRBX01BQ1NFQ19NQVNLIFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmNcbmluZGV4IDY0M2I0YWFjMjAzMzYuLjQwNmMwZjdlNjNkODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jXG5AQCAtMTgxMCw2ICsxODEwLDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcbiBcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KFx1MDAyNmRldi1cdTAwM2Vsb2NrX2tleSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VpbnRmX3N0YXRlX211dGV4KTtcbiBcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmRldi1cdTAwM2VpbnRmX3N0YXRlX211dGV4LCBcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNld2Nfc3RhdGVfbG9jayk7XG4gXG5AQCAtMTg5OCw2ICsxODk5LDcgQEAgaW50IG1seDVfbWRldl9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBwcm9maWxlX2lkeClcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VhbGxvY19tdXRleCk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLndjX2hlYWQubG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlYmZyZWdzLnJlZ19oZWFkLmxvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZWludGZfc3RhdGVfbXV0ZXgpO1xuIFx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC0xOTI1LDYgKzE5MjcsNyBAQCB2b2lkIG1seDVfbWRldl91bmluaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2ViZnJlZ3MucmVnX2hlYWQubG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2V3Y19zdGF0ZV9sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZW1seDVlX3Jlcy51cGxpbmtfbmV0ZGV2X2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlb2ZmbG9hZF9ibG9jay5sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZWludGZfc3RhdGVfbXV0ZXgpO1xuIFx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXYtXHUwMDNlbG9ja19rZXkpO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbmluZGV4IGIxODcxYzA4MjFkMGIuLjJkOWJjNzUyZTQzMWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTc4OCw4ICs3ODgsMTEgQEAgc3RydWN0IG1seDVfY29yZV9kZXYge1xuIFx0dTMyICAgICAgICAgICAgICAgICAgICAgIHZzY19hZGRyO1xuIFx0c3RydWN0IG1seDVfaHZfdmhjYVx0Kmh2X3ZoY2E7XG4gXHRzdHJ1Y3QgbWx4NV9od21vblx0Kmh3bW9uO1xuLVx0dTY0XHRcdFx0bnVtX2Jsb2NrX3RjO1xuLVx0dTY0XHRcdFx0bnVtX2Jsb2NrX2lwc2VjO1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IG11dGV4IGxvY2s7XG4rXHRcdHU2NCBudW1fdGM7XG4rXHRcdHU2NCBudW1fYWNjZWw7XG4rXHR9IG9mZmxvYWRfYmxvY2s7XG4gI2lmZGVmIENPTkZJR19NTFg1X01BQ1NFQ1xuIFx0c3RydWN0IG1seDVfbWFjc2VjX2ZzICptYWNzZWNfZnM7XG4gXHQvKiBNQUNzZWMgbm90aWZpZXIgY2hhaW4gdG8gc3luYyBNQUNzZWMgY29yZSBhbmQgSUIgZGF0YWJhc2UgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbmluZGV4IDMxNTY0OGE3NzBkMDAuLjliODk5NzIzYTYzNWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuQEAgLTE2LDExICsxNiwxMiBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3RydWUsIGtzZnRfZXEsIGtzZnRfbmUsIGtzZnRfZ3QsIGtzZnRfcmFpc2VzXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X25vbmVcbiBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuLWZyb20gbGliLnB5IGltcG9ydCBLc2Z0U2tpcEV4LCBLc2Z0RmFpbEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IEtzZnRTa2lwRXgsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldERydkVwRW52LCBOZXREcnZDb250RW52XG4tZnJvbSBsaWIucHkgaW1wb3J0IE5ldGxpbmssIE5sRXJyb3IsIFBTUEZhbWlseSwgUnRubEZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBOZXRsaW5rLCBObEVycm9yLCBOZXRkZXZGYW1pbHksIFBTUEZhbWlseSwgUnRubEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4rZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgZXRodG9vbCwgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuLCBDbWRFeGl0RmFpbHVyZVxuIGZyb20gbGliLnB5IGltcG9ydCBpcFxuIFxuIFxuQEAgLTMwLDE1ICszMSwyNSBAQCBkZWYgX2dldF9vdXRxKHMpOlxuICAgICByZXR1cm4gc3RydWN0LnVucGFjayhcIklcIiwgb3V0cSlbMF1cbiBcbiBcbitkZWYgX3JlY3ZfZXhhY3Qoc29jaywgbik6XG4rICAgIGJ1ZiA9IGInJ1xuKyAgICB3aGlsZSBsZW4oYnVmKSBcdTAwM2MgbjpcbisgICAgICAgIGNodW5rID0gc29jay5yZWN2KG4gLSBsZW4oYnVmKSlcbisgICAgICAgIGlmIG5vdCBjaHVuazpcbisgICAgICAgICAgICBicmVha1xuKyAgICAgICAgYnVmICs9IGNodW5rXG4rICAgIHJldHVybiBidWZcbitcbitcbiBkZWYgX3NlbmRfd2l0aF9hY2soY2ZnLCBtc2cpOlxuLSAgICBjZmcuY29tbV9zb2NrLnNlbmQobXNnKVxuLSAgICByZXNwb25zZSA9IGNmZy5jb21tX3NvY2sucmVjdig0KVxuKyAgICBjZmcuY29tbV9zb2NrLnNlbmRhbGwobXNnKVxuKyAgICByZXNwb25zZSA9IF9yZWN2X2V4YWN0KGNmZy5jb21tX3NvY2ssIDQpXG4gICAgIGlmIHJlc3BvbnNlICE9IGInYWNrXFwwJzpcbiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlXCIsIHJlc3BvbnNlKVxuIFxuIFxuIGRlZiBfcmVtb3RlX3JlYWRfbGVuKGNmZyk6XG4tICAgIGNmZy5jb21tX3NvY2suc2VuZChiJ3JlYWQgbGVuXFwwJylcbisgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGIncmVhZCBsZW5cXDAnKVxuICAgICByZXR1cm4gaW50KGNmZy5jb21tX3NvY2sucmVjdigxMDI0KVs6LTFdLmRlY29kZSgndXRmLTgnKSlcbiBcbiBcbkBAIC05Nyw3ICsxMDgsNyBAQCBkZWYgX3NlbmRfY2FyZWZ1bChjZmcsIHMsIHJvdW5kcyk6XG4gZGVmIF9jaGVja19kYXRhX3J4KGNmZywgZXhwX2xlbik6XG4gICAgIHJlYWRfbGVuID0gLTFcbiAgICAgZm9yIF8gaW4gcmFuZ2UoMzApOlxuLSAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kKGIncmVhZCBsZW5cXDAnKVxuKyAgICAgICAgY2ZnLmNvbW1fc29jay5zZW5kYWxsKGIncmVhZCBsZW5cXDAnKVxuICAgICAgICAgcmVhZF9sZW4gPSBpbnQoY2ZnLmNvbW1fc29jay5yZWN2KDEwMjQpWzotMV0uZGVjb2RlKCd1dGYtOCcpKVxuICAgICAgICAgaWYgcmVhZF9sZW4gPT0gZXhwX2xlbjpcbiAgICAgICAgICAgICBicmVha1xuQEAgLTU4Myw2ICs1OTQsMTA4IEBAIGRlZiBfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciBpcHYgaW4gKFwiNFwiLCBcIjZcIik6XG4gICAgICAgICAgICAgeWllbGQgS3NmdE5hbWVkVmFyaWFudChmXCJ2e3Zlcn1faXB7aXB2fVwiLCB2ZXIsIGlwdilcbiBcbitkZWYgX2VuYWJsZV9sb2NhbF9od19ncm8oY2ZnKTpcbisgICAgY2ZnLnJlcXVpcmVfY21kKFwiZXRodG9vbFwiKVxuKyAgICBmZWF0ID0gZXRodG9vbChmXCItayB7Y2ZnLmlmbmFtZX1cIiwganNvbj1UcnVlKVswXVxuKyAgICBncm8gPSBmZWF0LmdldChcInJ4LWdyby1od1wiKVxuKyAgICBpZiBub3QgZ3JvIG9yIFwiYWN0aXZlXCIgbm90IGluIGdybyBvciBcImZpeGVkXCIgbm90IGluIGdybzpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJIVyBHUk8gZmVhdHVyZSBub3QgcmVwb3J0ZWQgYnkgZXRodG9vbFwiKVxuKyAgICBpZiBncm9bXCJmaXhlZFwiXSBhbmQgbm90IGdyb1tcImFjdGl2ZVwiXTpcbisgICAgICAgIHJhaXNlIEtzZnRYZmFpbEV4KFwiSFcgR1JPIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXCIpXG4rICAgIGlmIG5vdCBncm9bXCJhY3RpdmVcIl06XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgZXRodG9vbChmXCItSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9uXCIpXG4rICAgICAgICBleGNlcHQgQ21kRXhpdEZhaWx1cmUgYXMgZTpcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwiQ2Fubm90IGVuYWJsZSBIVyBHUk8gdmlhIGV0aHRvb2xcIikgZnJvbSBlXG4rICAgICAgICBkZWZlcihldGh0b29sLCBmXCItSyB7Y2ZnLmlmbmFtZX0gcngtZ3JvLWh3IG9mZlwiKVxuKyAgICAgICAgZmVhdCA9IGV0aHRvb2woZlwiLWsge2NmZy5pZm5hbWV9XCIsIGpzb249VHJ1ZSlbMF1cbisgICAgICAgIGdybyA9IGZlYXQuZ2V0KFwicngtZ3JvLWh3XCIsIHt9KVxuKyAgICAgICAgaWYgbm90IGdyby5nZXQoXCJhY3RpdmVcIik6XG4rICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIkhXIEdSTyBmYWlsZWQgdG8gYWN0aXZhdGVcIilcbitcbitcbitkZWYgX3JlbW90ZV9zZW5kKGNmZywgc2l6ZSk6XG4rICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiJ2RhdGEgc2VuZFxcMCcgKyBzdHJ1Y3QucGFjaygnIUknLCBzaXplKSlcbisgICAgcmVzcG9uc2UgPSBfcmVjdl9leGFjdChjZmcuY29tbV9zb2NrLCA0KVxuKyAgICBpZiByZXNwb25zZSAhPSBiJ2Fja1xcMCc6XG4rICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoXCJVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZSB0byBkYXRhIHNlbmRcIiwgcmVzcG9uc2UpXG4rXG4rXG4rZGVmIF9yZWN2X2FsbChzLCBleHBlY3RlZCwgdGltZW91dD0yMCk6XG4rICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KVxuKyAgICB0b3RhbCA9IDBcbisgICAgdHJ5OlxuKyAgICAgICAgd2hpbGUgdG90YWwgXHUwMDNjIGV4cGVjdGVkOlxuKyAgICAgICAgICAgIGRhdGEgPSBzLnJlY3YobWluKDY1NTM2LCBleHBlY3RlZCAtIHRvdGFsKSlcbisgICAgICAgICAgICBpZiBub3QgZGF0YTpcbisgICAgICAgICAgICAgICAgYnJlYWtcbisgICAgICAgICAgICB0b3RhbCArPSBsZW4oZGF0YSlcbisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OlxuKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKFxuKyAgICAgICAgICAgIGZcIlRpbWVkIG91dCByZWNlaXZpbmcgZGF0YTogZ290IHt0b3RhbH0ve2V4cGVjdGVkfSBieXRlcyBcIlxuKyAgICAgICAgICAgIGZcIihyZXNwb25kZXIgbWF5IGhhdmUgZmFpbGVkIHRvIHNlbmQpXCIpXG4rICAgIGlmIHRvdGFsIFx1MDAzYyBleHBlY3RlZDpcbisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihcbisgICAgICAgICAgICBmXCJTaG9ydCByZWFkOiBnb3Qge3RvdGFsfS97ZXhwZWN0ZWR9IGJ5dGVzIFwiXG4rICAgICAgICAgICAgZlwiKHJlc3BvbmRlciBjb25uZWN0aW9uIGNsb3NlZCBlYXJseSlcIilcbisgICAgcmV0dXJuIHRvdGFsXG4rXG4rXG4rZGVmIF9kYXRhX2h3X2dybyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcbisgICAgXCJcIlwiIFRlc3QgUFNQIGRhdGEgdHJhbnNmZXIgd2l0aCBIVyBHUk8gZW5hYmxlZCBcIlwiXCJcbisgICAgX2luaXRfcHNwX2RldihjZmcpXG4rICAgICMgVmVyc2lvbiAwIGlzIHJlcXVpcmVkIGJ5IHNwZWMsIGRvbid0IGxldCBpdCBza2lwXG4rICAgIGlmIHZlcnNpb246XG4rICAgICAgICBuYW1lID0gY2ZnLnBzcG5sLmNvbnN0c1tcInZlcnNpb25cIl0uZW50cmllc19ieV92YWxbdmVyc2lvbl0ubmFtZVxuKyAgICAgICAgaWYgbmFtZSBub3QgaW4gY2ZnLnBzcF9pbmZvWydwc3AtdmVyc2lvbnMtY2FwJ106XG4rICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIlBTUCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcIiwgbmFtZSlcbitcbisgICAgX2VuYWJsZV9sb2NhbF9od19ncm8oY2ZnKVxuK1xuKyAgICBzID0gX21ha2VfcHNwX2Nvbm4oY2ZnLCB2ZXJzaW9uLCBpcHZlcilcbisgICAgdHJ5OlxuKyAgICAgICAgcnhfYXNzb2MgPSBjZmcucHNwbmwucnhfYXNzb2Moe1widmVyc2lvblwiOiB2ZXJzaW9uLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRldi1pZFwiOiBjZmcucHNwX2Rldl9pZCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2NrLWZkXCI6IHMuZmlsZW5vKCl9KVxuKyAgICAgICAgcnggPSByeF9hc3NvY1sncngta2V5J11cbisgICAgICAgIHR4ID0gX3NwaV94Y2hnKHMsIHJ4KVxuKyAgICAgICAgY2ZnLnBzcG5sLnR4X2Fzc29jKHtcImRldi1pZFwiOiBjZmcucHNwX2Rldl9pZCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVyc2lvblwiOiB2ZXJzaW9uLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eC1rZXlcIjogdHgsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvY2stZmRcIjogcy5maWxlbm8oKX0pXG4rXG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgYmVmb3JlID0gY2ZnLm5ldG5sLnFzdGF0c19nZXQoe1wiaWZpbmRleFwiOiBjZmcuaWZpbmRleH0sIGR1bXA9VHJ1ZSlbMF1cbisgICAgICAgIGV4Y2VwdCBObEVycm9yIGFzIGU6XG4rICAgICAgICAgICAgaWYgZS5lcnJvciA9PSBlcnJuby5FT1BOT1RTVVBQOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwicXN0YXRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwiKSBmcm9tIGVcbisgICAgICAgICAgICByYWlzZVxuKyAgICAgICAgaWYgKCdyeC1ody1ncm8tcGFja2V0cycgbm90IGluIGJlZm9yZSBvclxuKyAgICAgICAgICAgICdyeC1ody1ncm8td2lyZS1wYWNrZXRzJyBub3QgaW4gYmVmb3JlKTpcbisgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwicngtaHctZ3JvLXBhY2tldHMgY291bnRlciBub3QgYXZhaWxhYmxlXCIpXG4rXG4rICAgICAgICAjIFJlbW90ZSBzZW5kcyBkYXRhIGluIDhLQiBjaHVua3M7IEdTTyBvbiByZW1vdGUgVFggc2VnbWVudHMgdGhlbSxcbisgICAgICAgICMgSFcgR1JPIHJlYXNzZW1ibGVzIG9uIGxvY2FsIFJYXG4rICAgICAgICBkYXRhX2xlbiA9IDEwICogNjU1MzZcbisgICAgICAgIF9yZW1vdGVfc2VuZChjZmcsIGRhdGFfbGVuKVxuKyAgICAgICAgcmVjdl9sZW4gPSBfcmVjdl9hbGwocywgZGF0YV9sZW4pXG4rICAgICAgICBrc2Z0X2VxKHJlY3ZfbGVuLCBkYXRhX2xlbilcbitcbisgICAgICAgIGNmZy53YWl0X2h3X3N0YXRzX3NldHRsZSgpXG4rICAgICAgICBhZnRlciA9IGNmZy5uZXRubC5xc3RhdHNfZ2V0KHtcImlmaW5kZXhcIjogY2ZnLmlmaW5kZXh9LCBkdW1wPVRydWUpWzBdXG4rICAgICAgICBrc2Z0X2d0KGFmdGVyWydyeC1ody1ncm8tcGFja2V0cyddLFxuKyAgICAgICAgICAgICAgICBiZWZvcmVbJ3J4LWh3LWdyby1wYWNrZXRzJ10pXG4rICAgICAgICBrc2Z0X2d0KGFmdGVyWydyeC1ody1ncm8td2lyZS1wYWNrZXRzJ10sXG4rICAgICAgICAgICAgICAgIGJlZm9yZVsncngtaHctZ3JvLXdpcmUtcGFja2V0cyddKVxuKyAgICBmaW5hbGx5OlxuKyAgICAgICAgX2Nsb3NlX3BzcF9jb25uKGNmZywgcylcbitcbitAa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXBfdmFyaWFudHMoKSlcbitkZWYgZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XG4rICAgIFwiXCJcIiBUZXN0IFBTUCBkYXRhIHRyYW5zZmVyIHdpdGggSFcgR1JPIGVuYWJsZWQgXCJcIlwiXG4rICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxuKyAgICBfZGF0YV9od19ncm8oY2ZnLCB2ZXJzaW9uLCBpcHZlcilcbitcbiBcbiBkZWYgX2dldF9pcF92YXJpYW50cygpOlxuICAgICBmb3IgaXB2IGluIChcIjRcIiwgXCI2XCIpOlxuQEAgLTkzNyw3ICsxMDUwLDYgQEAgZGVmIF9zZXR1cF9wc3BfYXR0cmlidXRlcyhjZmcpOlxuICAgICBjZmcucHNwX2Rldl9wZWVyX25zaWQgPSBfZ2V0X25zaWQoY2ZnLm5ldG5zLm5hbWUpXG4gXG4gXG4tXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwiXCJcIiBLc2Z0IGJvaWxlciBwbGF0ZSBtYWluIFwiXCJcIlxuIFxuQEAgLTk1NCw2ICsxMDY2LDcgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gXG4gICAgIHdpdGggZW52IGFzIGNmZzpcbiAgICAgICAgIGNmZy5wc3BubCA9IFBTUEZhbWlseSgpXG4rICAgICAgICBjZmcubmV0bmwgPSBOZXRkZXZGYW1pbHkoKVxuIFxuICAgICAgICAgaWYgaGFzX2NvbnQ6XG4gICAgICAgICAgICAgX3NldHVwX3BzcF9hdHRyaWJ1dGVzKGNmZylcbkBAIC05NzMsNyArMTA4Niw3IEBAIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcuY29tbV9wb3J0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEpXG4gXG4tICAgICAgICAgICAgICAgIGNhc2VzID0gW2RhdGFfYmFzaWNfc2VuZCwgZGF0YV9tc3NfYWRqdXN0XVxuKyAgICAgICAgICAgICAgICBjYXNlcyA9IFtkYXRhX2Jhc2ljX3NlbmQsIGRhdGFfaHdfZ3JvLCBkYXRhX21zc19hZGp1c3RdXG4gXG4gICAgICAgICAgICAgICAgIGlmIGhhc19jb250OlxuICAgICAgICAgICAgICAgICAgICAgY2FzZXMgKz0gW1xuQEAgLTk5MCw3ICsxMTAzLDcgQEAgZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VfcGZ4PXtcImRldl9cIiwgXCJkYXRhX1wiLCBcImFzc29jX1wiLCBcInJlbW92YWxfXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjZmcsICkpXG4gXG4tICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZChiXCJleGl0XFwwXCIpXG4rICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suc2VuZGFsbChiXCJleGl0XFwwXCIpXG4gICAgICAgICAgICAgICAgIGNmZy5jb21tX3NvY2suY2xvc2UoKVxuICAgICAgICAgZmluYWxseTpcbiAgICAgICAgICAgICBpZiBzcnYgYW5kIChzcnYuc3Rkb3V0IG9yIHNydi5zdGRlcnIpOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xuaW5kZXggYTI2ZTc2MjhiYmIxMy4uOWE2NzViZjQ0OWY1ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcF9yZXNwb25kZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwX3Jlc3BvbmRlci5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvcG9sbC5oXHUwMDNlXG5AQCAtMTE4LDYgKzExOSwzNCBAQCBzdGF0aWMgdm9pZCBzZW5kX3N0cihpbnQgc29jaywgaW50IHZhbHVlKVxuIFx0c2VuZChzb2NrLCBidWYsIHJldCArIDEsIE1TR19XQUlUQUxMKTtcbiB9XG4gXG4rc3RhdGljIGludCBzZW5kX2RhdGEoaW50IHNvY2ssIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBzYnVmWzgxOTJdID0gezB9O1xuK1x0c3NpemVfdCBzZW50O1xuK1xuK1x0d2hpbGUgKGxlbiBcdTAwM2UgMCkge1xuK1x0XHRzaXplX3QgY2h1bmsgPSBsZW47XG4rXG4rXHRcdGlmIChjaHVuayBcdTAwM2Ugc2l6ZW9mKHNidWYpKVxuK1x0XHRcdGNodW5rID0gc2l6ZW9mKHNidWYpO1xuK1xuK1x0XHRzZW50ID0gc2VuZChzb2NrLCBzYnVmLCBjaHVuaywgTVNHX05PU0lHTkFMKTtcbitcdFx0aWYgKHNlbnQgXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFUlI6ICVzOiAlc1xcblwiLCBfX2Z1bmNfXyxcbitcdFx0XHRcdHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGlmIChzZW50ID09IDApIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJFUlI6ICVzOiBwZWVyIGNsb3NlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGxlbiAtPSBzZW50O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHQgICAgaW50IHNlcnZlcl9zb2NrLCBpbnQgY29tbV9zb2NrKVxuQEAgLTE4NSwyMiArMjE0LDIyIEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHRvZmYgKz0gbjtcbi1cdFx0XHRuID0gb2ZmO1xuIFxuICNkZWZpbmUgX19jb25zdW1lKHN6KVx0XHRcdFx0XHRcdFxcXG4gXHRcdCh7XHRcdFx0XHRcdFx0XFxcbi1cdFx0XHRpZiAobiA9PSAoc3opKSB7XHRcdFx0XFxcbi1cdFx0XHRcdG9mZiA9IDA7XHRcdFx0XFxcbi1cdFx0XHR9IGVsc2Uge1x0XHRcdFx0XFxcbi1cdFx0XHRcdG9mZiAtPSAoc3opO1x0XHRcdFxcXG4tXHRcdFx0XHRtZW1tb3ZlKGJ1ZiwgXHUwMDI2YnVmWyhzeildLCBvZmYpO1x0XFxcbi1cdFx0XHR9XHRcdFx0XHRcdFxcXG4rXHRcdFx0b2ZmIC09IChzeik7XHRcdFx0XHRcXFxuK1x0XHRcdG1lbW1vdmUoYnVmLCBcdTAwMjZidWZbKHN6KV0sIG9mZik7XHRcdFxcXG4gXHRcdH0pXG4gXG4tI2RlZmluZSBjbWQoX25hbWUpXHRcdFx0XHRcdFx0XHRcXFxuKy8qIE9ubHkgbWF0Y2ggb25jZSB0aGUgY29tbWFuZCBhbmQgaXRzIF9leHRyYV9zeiBieXRlIHBheWxvYWQgYXJlIGJvdGhcbisgKiBidWZmZXJlZCwgb3RoZXJ3aXNlIGEgc3BsaXQgcmVhZCB3b3VsZCBjb25zdW1lIHRoZSBuYW1lIGFuZCBzdHJhbmRcbisgKiB0aGUgcGF5bG9hZCwgZGVzeW5jaHJvbml6aW5nIHRoZSBwYXJzZXIgZm9yIGdvb2QuXG4rICovXG4rI2RlZmluZSBjbWQoX25hbWUsIF9leHRyYV9zeilcdFx0XHRcdFx0XHRcXFxuIFx0XHQoe1x0XHRcdFx0XHRcdFx0XFxcbiBcdFx0XHRzc2l6ZV90IHN6ID0gc2l6ZW9mKF9uYW1lKTtcdFx0XHRcXFxuLVx0XHRcdGJvb2wgbWF0Y2ggPSBuIFx1MDAzZT0gc3ogXHUwMDI2XHUwMDI2XHQhbWVtY21wKGJ1ZiwgX25hbWUsIHN6KTsgXFxcbitcdFx0XHRib29sIG1hdGNoID0gb2ZmIFx1MDAzZT0gc3ogKyAoX2V4dHJhX3N6KSBcdTAwMjZcdTAwMjZcdFx0XFxcbitcdFx0XHRcdCFtZW1jbXAoYnVmLCBfbmFtZSwgc3opO1x0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRcdFx0aWYgKG1hdGNoKSB7XHRcdFx0XHRcdFxcXG4gXHRcdFx0XHRkYmcoXCJjb21tYW5kOiBcIiBfbmFtZSBcIlxcblwiKTtcdFx0XFxcbkBAIC0yMTMsMTAgKzI0MiwxMCBAQCBydW5fc2Vzc2lvbihzdHJ1Y3QgeW5sX3NvY2sgKnlzLCBzdHJ1Y3Qgb3B0cyAqb3B0cyxcbiBcdFx0XHRkbyB7XG4gXHRcdFx0XHRjb25zdW1lZCA9IGZhbHNlO1xuIFxuLVx0XHRcdFx0aWYgKGNtZChcInJlYWQgbGVuXCIpKVxuK1x0XHRcdFx0aWYgKGNtZChcInJlYWQgbGVuXCIsIDApKVxuIFx0XHRcdFx0XHRzZW5kX3N0cihjb21tX3NvY2ssIGRhdGFfcmVhZCk7XG4gXG4tXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBlY2hvXCIpKSB7XG4rXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBlY2hvXCIsIDApKSB7XG4gXHRcdFx0XHRcdGlmIChkYXRhX3NvY2sgXHUwMDNlPSAwKVxuIFx0XHRcdFx0XHRcdHNlbmQoZGF0YV9zb2NrLCBcImVjaG9cIiwgNSxcbiBcdFx0XHRcdFx0XHQgICAgIE1TR19XQUlUQUxMKTtcbkBAIC0yMjQsNyArMjUzLDI3IEBAIHJ1bl9zZXNzaW9uKHN0cnVjdCB5bmxfc29jayAqeXMsIHN0cnVjdCBvcHRzICpvcHRzLFxuIFx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk46IGVjaG8gYnV0IG5vIGRhdGEgc29ja1xcblwiKTtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCJkYXRhIGNsb3NlXCIpKSB7XG4rXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBzZW5kXCIsIDQpKSB7XG4rXHRcdFx0XHRcdF9fdTMyIGxlbjtcbitcbitcdFx0XHRcdFx0bWVtY3B5KFx1MDAyNmxlbiwgYnVmLCBzaXplb2YobGVuKSk7XG4rXHRcdFx0XHRcdF9fY29uc3VtZShzaXplb2YobGVuKSk7XG4rXHRcdFx0XHRcdGxlbiA9IG50b2hsKGxlbik7XG4rXG4rXHRcdFx0XHRcdGlmIChkYXRhX3NvY2sgXHUwMDNjIDApIHtcbitcdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XHRcdFx0XHRcdFwiV0FSTjogc2VuZCBidXQgbm8gZGF0YSBzb2NrXFxuXCIpO1xuK1x0XHRcdFx0XHRcdHNlbmRfZXJyKGNvbW1fc29jayk7XG4rXHRcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRcdH1cbitcbitcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbitcdFx0XHRcdFx0aWYgKHNlbmRfZGF0YShkYXRhX3NvY2ssIGxlbikpXG4rXHRcdFx0XHRcdFx0ZnByaW50ZihzdGRlcnIsXG4rXHRcdFx0XHRcdFx0XHRcIldBUk46IHNlbmQgaW5jb21wbGV0ZSBmb3IgJXUgYnl0ZXNcXG5cIixcbitcdFx0XHRcdFx0XHRcdGxlbik7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRpZiAoY21kKFwiZGF0YSBjbG9zZVwiLCAwKSkge1xuIFx0XHRcdFx0XHRpZiAoZGF0YV9zb2NrIFx1MDAzZT0gMCkge1xuIFx0XHRcdFx0XHRcdGNsb3NlKGRhdGFfc29jayk7XG4gXHRcdFx0XHRcdFx0ZGF0YV9zb2NrID0gLTE7XG5AQCAtMjMzLDI2ICsyODIsMjIgQEAgcnVuX3Nlc3Npb24oc3RydWN0IHlubF9zb2NrICp5cywgc3RydWN0IG9wdHMgKm9wdHMsXG4gXHRcdFx0XHRcdFx0cmFjZV9jbG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCJjb25uIHBzcFwiKSkge1xuK1x0XHRcdFx0aWYgKGNtZChcImNvbm4gcHNwXCIsIDIpKSB7XG4gXHRcdFx0XHRcdGlmIChhY2NlcHRfY2ZnICE9IEFDQ0VQVF9DRkdfTk9ORSlcbiBcdFx0XHRcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJXQVJOOiBvbGQgY29ubiBjb25maWcgc3RpbGwgc2V0IVxcblwiKTtcbiBcdFx0XHRcdFx0YWNjZXB0X2NmZyA9IEFDQ0VQVF9DRkdfUFNQO1xuIFx0XHRcdFx0XHRzZW5kX2Fjayhjb21tX3NvY2spO1xuIFx0XHRcdFx0XHQvKiBuZXh0IHR3byBieXRlcyBhcmUgdmVyc2lvbnMgKi9cbi1cdFx0XHRcdFx0aWYgKG9mZiBcdTAwM2U9IDIpIHtcbi1cdFx0XHRcdFx0XHRtZW1jcHkoXHUwMDI2cHNwX3ZlcnMsIGJ1ZiwgMik7XG4tXHRcdFx0XHRcdFx0X19jb25zdW1lKDIpO1xuLVx0XHRcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk46IHNob3J0IGNvbm4gcHNwIGNvbW1hbmQhXFxuXCIpO1xuLVx0XHRcdFx0XHR9XG4rXHRcdFx0XHRcdG1lbWNweShcdTAwMjZwc3BfdmVycywgYnVmLCAyKTtcbitcdFx0XHRcdFx0X19jb25zdW1lKDIpO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0aWYgKGNtZChcImNvbm4gY2xyXCIpKSB7XG4rXHRcdFx0XHRpZiAoY21kKFwiY29ubiBjbHJcIiwgMCkpIHtcbiBcdFx0XHRcdFx0aWYgKGFjY2VwdF9jZmcgIT0gQUNDRVBUX0NGR19OT05FKVxuIFx0XHRcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk46IG9sZCBjb25uIGNvbmZpZyBzdGlsbCBzZXQhXFxuXCIpO1xuIFx0XHRcdFx0XHRhY2NlcHRfY2ZnID0gQUNDRVBUX0NGR19DTEVBUjtcbiBcdFx0XHRcdFx0c2VuZF9hY2soY29tbV9zb2NrKTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdGlmIChjbWQoXCJleGl0XCIpKVxuK1x0XHRcdFx0aWYgKGNtZChcImV4aXRcIiwgMCkpXG4gXHRcdFx0XHRcdHNob3VsZF9xdWl0ID0gdHJ1ZTtcbiAjdW5kZWYgY21kXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwOTozNDoxNC40MDYyOTI4MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg0MDQ0ODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IE1lbGxhbm94IG1seDUgRHJpdmVyIC0gTm90IEZ1enphYmxlIGluIFN0YW5kYXJkIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIHRvIHN1cHBvcnQgUFNQIGhhcmR3YXJlIEdSTy9kZWNhcHN1bGF0aW9uLiBJdCdzIGFkZGluZyBuZXcgZmVhdHVyZXMsIG1vZGlmeWluZyBleGlzdGluZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBUQyBvZmZsb2FkLCBpbnRyb2R1Y2luZyBhIHVuaWZpZWQgZmxvdyB0YWcsIGFuZCB1cGRhdGluZyBzZXZlcmFsIGZpbGVzIChgaXBzZWNfZnMuY2AsIGBtYWNzZWMuY2AsIGBwc3AuY2AsIGBlbl9yeC5jYCwgYGVuX3RjLmNgKSB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVyZSBhcmUgYWxzbyBhc3NvY2lhdGVkIHRlc3RzIGluIGBwc3AucHlgIGFuZCBgcHNwX3Jlc3BvbmRlci5jYC4gSSdtIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGNvcmUgTWVsbGFub3ggZmlsZXMuXG5cblRoZSBjb2RlIGlzIGZvY3VzZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9gLiBUaGlzIGlzIGEgcHJldHR5IGNsZWFyIGluZGljYXRpb24gaXQncyByZWxhdGVkIHRvIHRoZSBDb25uZWN0WC00LzUvNi83IG5ldHdvcmsgY2FyZHMsIGEgaGlnaC1lbmQgU21hcnROSUMuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCdzIHRoZSBrZXkuXG5cbkxldCBtZSB0aGlua+KApiBJcyBgbWx4NWAgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyPyBZZXMsIGFic29sdXRlbHkuIEl0J3MgKnRoZSogTWVsbGFub3ggQ29ubmVjdFggZHJpdmVyLiBBbmQgZG9lcyBRRU1VIGVtdWxhdGUgTWVsbGFub3ggQ29ubmVjdFgtNCsgTklDcz8gTm9wZS4gUUVNVSBoYXMgc29tZSBlbXVsYXRpb24sIGJ1dCBpdCdzIG5vdCByZWxldmFudCBoZXJlLiBTbywgbm8gc3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gZXhpc3RzIGZvciBgbWx4NWAsIHBlcmlvZC5cblxuSSByZWNhbGwgdGhhdCBTeXprYWxsZXIgdXN1YWxseSBkb2Vzbid0IGZ1enogaGFyZHdhcmUgZHJpdmVycyB1bmxlc3MgdGhlcmUncyBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgdkRQQS4gVGhpcyBzZWVtcyB0byBiZSBldGhlcm5ldCBhY2NlbGVyYXRpb24gZm9yIElQc2VjL01BQ3NlYy9QU1AsIHdoaWNoLCBhcyBJIHNlZSBpdCwgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE5JQy4gTGV0J3MgbWFrZSBzdXJlLCBvbmNlIGFnYWluLiBDaGVja2luZyBjYXJlZnVsbHksIEkgZG9uJ3Qgc2VlIGFueSBRRU1VIGVtdWxhdGlvbiBmb3IgYG1seDVgIGluIHRoZSBzdGFuZGFyZCBRRU1VLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGBtbHg1YCBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgKGEgU21hcnROSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkpIHRoYXQgcmVsaWVzIG9uIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBBbmQgSSd2ZSBkb3VibGUtY2hlY2tlZCwgdGhlIGNoYW5nZXMgYXJlIGFsbCBpbiBgbWx4NWAgYW5kIHNlbGZ0ZXN0cyB0aGF0IHJlbHkgb24gdGhhdC4gSSdtIGNvbmZpZGVudCBhYm91dCB0aGF0LiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDM1LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwOTozNDo1MC4yNDY3NDU2NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8qKSB0byBhZGQgUFNQIGhhcmR3YXJlIEdSTyBhbmQgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LCBhbG9uZyB3aXRoIHJlbGF0ZWQgZmxvdyB0YWcgYW5kIFRDIG9mZmxvYWQgYmxvY2tpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyopIHRvIGFkZCBQU1AgaGFyZHdhcmUgR1JPIGFuZCBkZWNhcHN1bGF0aW9uIHN1cHBvcnQsIGFsb25nIHdpdGggcmVsYXRlZCBmbG93IHRhZyBhbmQgVEMgb2ZmbG9hZCBibG9ja2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowrcg5f[1] Phase: Running StartedAt: 2026-08-04 09:35:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcg5f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 09:35:01 +0000 UTC FinishedAt: 2026-08-04 09:35:17 +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,}