Name: series-workflow64cdv Phase: Failed StartedAt: 2026-08-11 16:47:39 +0000 UTC FinishedAt: 2026-08-11 16:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64cdv[0] Phase: Succeeded StartedAt: 2026-08-11 16:47:39 +0000 UTC FinishedAt: 2026-08-11 16:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64cdv[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 16:47:39 +0000 UTC FinishedAt: 2026-08-11 16:49:47 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVuYW1lcyB0aGUgJiMzOTtzY3JhdGNoJiMzOTsgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJiMzOTtib290bWVtJiMzOTsgYW5kICYjMzk7bm9wcnNydiYjMzk7LiBJdCByZW5hbWVzIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLCBkZWJ1Z2ZzIGZpbGVzLCBzdHJ1Y3QgbmFtZXMsIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgYSBLY29uZmlnIG9wdGlvbiwgYnV0IGRvZXMgbm90IGFsdGVyIGFueSBleGVjdXRpb24gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODViZjU3NjZlZGNmY2ZkNTMyN2U0ZmNkOWVjYjc0Njg0ZDRlNDI3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE2OjQ5OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjguLmEwMzkyN2ZmYjg1ZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0yOTg5LDExICYjNDM7Mjk4OSwxMiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFx0XHRcdFwmIzM0OzBcJiMzNDsgfCBcJiMzNDtvZmZcJiMzNDsgfCBcJiMzNDtuXCYjMzQ7IC0ga2V4ZWMgaGFuZG92ZXIgaXMgZGlzYWJsZWRcbiBcdFx0XHRcJiMzNDsxXCYjMzQ7IHwgXCYjMzQ7b25cJiMzNDsgfCBcJiMzNDt5XCYjMzQ7IC0ga2V4ZWMgaGFuZG92ZXIgaXMgZW5hYmxlZFxuIFxuLVx0a2hvX3NjcmF0Y2g9XHRbS0VYRUMsRUFSTFldXG4mIzQzO1x0a2hvX2Jvb3RtZW09XHRbS0VYRUMsRUFSTFldXG4gXHRcdFx0Rm9ybWF0OiBsbFtLTUddLG1tW0tNR10sbm5bS01HXSB8IG5uJVxuLVx0XHRcdERlZmluZXMgdGhlIHNpemUgb2YgdGhlIEtITyBzY3JhdGNoIHJlZ2lvbi4gVGhlIEtIT1xuLVx0XHRcdHNjcmF0Y2ggcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeVxuLVx0XHRcdHJhbmdlcyB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgZm9yIG5vbi1rZXJuZWxcbiYjNDM7XG4mIzQzO1x0XHRcdERlZmluZXMgdGhlIHNpemUgb2YgdGhlIEtITyBib290IG1lbW9yeSByZWdpb24uIFRoZVxuJiM0MztcdFx0XHRLSE8gYm9vdCBtZW1vcnkgcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4mIzQzO1x0XHRcdG1lbW9yeSByYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXG4gXHRcdFx0YWxsb2NhdGlvbnMuIFRoYXQgd2F5LCBldmVuIHdoZW4gbWVtb3J5IGlzIGhlYXZpbHlcbiBcdFx0XHRmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZFxuIFx0XHRcdGtlcm5lbCB3aWxsIGFsd2F5cyBoYXZlIGVub3VnaCBjb250aWd1b3VzIHJhbmdlcyB0b1xuQEAgLTMwMDIsMTAgJiM0MzszMDAzLDEwIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0SXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgZXhhY3QgYW1vdW50IG9mXG4gXHRcdFx0bWVtb3J5IGluIHRoZSBmb3JtIG9mIFwmIzM0O2xsW0tNR10sbW1bS01HXSxubltLTUddXCYjMzQ7XG4gXHRcdFx0d2hlcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBkZWZpbmVzIHRoZSBzaXplIG9mIGEgbG93XG4tXHRcdFx0bWVtb3J5IHNjcmF0Y2ggYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xuLVx0XHRcdHRoZSBzaXplIG9mIGEgZ2xvYmFsIHNjcmF0Y2ggYXJlYSBhbmQgdGhlIHRoaXJkXG4mIzQzO1x0XHRcdG1lbW9yeSBib290bWVtIGFyZWEsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRlZmluZXNcbiYjNDM7XHRcdFx0dGhlIHNpemUgb2YgYSBnbG9iYWwgYm9vdG1lbSBhcmVhIGFuZCB0aGUgdGhpcmRcbiBcdFx0XHRwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhZGRpdGlvbmFsIHBlci1ub2RlXG4tXHRcdFx0c2NyYXRjaCBhcmVhcy4gIFRoZSBmb3JtIFwmIzM0O25uJVwmIzM0OyBkZWZpbmVzIHNjYWxlIGZhY3RvclxuJiM0MztcdFx0XHRib290bWVtIGFyZWFzLiAgVGhlIGZvcm0gXCYjMzQ7bm4lXCYjMzQ7IGRlZmluZXMgc2NhbGUgZmFjdG9yXG4gXHRcdFx0KGluIHBlcmNlbnRzKSBvZiBtZW1vcnkgdGhhdCB3YXMgdXNlZCBkdXJpbmcgYm9vdC5cbiBcbiBcdGttYWM9XHRcdFtNSVBTXSBLb3JpbmEgZXRoZXJuZXQgTUFDIGFkZHJlc3MuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0XG5pbmRleCAyYzI2ZTU2MGJkNzhhLi5mMTRjOGQ5YWQ2YTQ1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcbkBAIC0yMCwxMCAmIzQzOzIwLDEwIEBAIG5lZWQgdG8gZW5hYmxlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHByZXNlcnZlIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgYWNyb3NzXG4ga2V4ZWMuXG4gXG4gVG8gdXNlIEtITywgcGxlYXNlIGJvb3QgdGhlIGtlcm5lbCB3aXRoIHRoZSBgYGtobz1vbmBgIGNvbW1hbmQgbGluZVxuLXBhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fc2NyYXRjaGBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGVcbi1zY3JhdGNoIHJlZ2lvbnMuIEZvciBleGFtcGxlIGBga2hvX3NjcmF0Y2g9MTZNLDUxMk0sMjU2TWBgIHdpbGwgcmVzZXJ2ZSBhXG4tMTYgTWlCIGxvdyBtZW1vcnkgc2NyYXRjaCBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIHNjcmF0Y2ggcmVnaW9uLCBhbmQgMjU2IE1pQlxuLXBlciBOVU1BIG5vZGUgc2NyYXRjaCByZWdpb25zIG9uIGJvb3QuXG4mIzQzO3BhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fYm9vdG1lbWBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGVcbiYjNDM7Ym9vdCBtZW1vcnkgcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fYm9vdG1lbT0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcbiYjNDM7MTYgTWlCIGxvdyBtZW1vcnkgYm9vdG1lbSBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIGJvb3RtZW0gcmVnaW9uLCBhbmQgMjU2IE1pQlxuJiM0MztwZXIgTlVNQSBub2RlIGJvb3RtZW0gcmVnaW9ucyBvbiBib290LlxuIFxuIFBlcmZvcm0gYSBLSE8ga2V4ZWNcbiA9PT09PT09PT09PT09PT09PT09XG5AQCAtOTYsMTUgJiM0Mzs5NiwxNSBAQCBzdGFiaWxpemVkLlxuICAgICBjdXJyZW50IEtITyBzdGF0ZSBpbiB0aGlzIGZpbGUuIEtleGVjIHVzZXIgc3BhY2UgdG9vbGluZyBjYW4gdXNlIHRoaXNcbiAgICAgYXMgaW5wdXQgZmlsZSBmb3IgdGhlIEtITyBwYXlsb2FkIGltYWdlLlxuIFxuLWBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zY3JhdGNoX2xlbmBgXG4tICAgIExlbmd0aHMgb2YgS0hPIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xuJiM0MztgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvYm9vdG1lbV9sZW5gYFxuJiM0MzsgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4gICAgIG1lbW9yeSByZWdpb25zIHRoYXQgd2lsbCBhbHdheXMgc3RheSBhdmFpbGFibGUgZm9yIGZ1dHVyZSBrZXhlY1xuICAgICBhbGxvY2F0aW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29scyBjYW4gdXNlIHRoaXMgZmlsZSB0byBkZXRlcm1pbmVcbiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cbiBcbi1gYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc2NyYXRjaF9waHlzYGBcbi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHNcbi0gICAgY2FuIHVzZSB0aGlzIGZpbGUgaW4gY29uanVuY3Rpb24gdG8gc2NyYXRjaF9waHlzIHRvIGRldGVybWluZSB3aGVyZVxuJiM0MztgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvYm9vdG1lbV9waHlzYGBcbiYjNDM7ICAgIFBoeXNpY2FsIGxvY2F0aW9ucyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLiBLZXhlYyB1c2VyIHNwYWNlIHRvb2xzXG4mIzQzOyAgICBjYW4gdXNlIHRoaXMgZmlsZSBpbiBjb25qdW5jdGlvbiB0byBib290bWVtX3BoeXMgdG8gZGV0ZXJtaW5lIHdoZXJlXG4gICAgIGl0IHNob3VsZCBwbGFjZSBpdHMgcGF5bG9hZCBpbWFnZXMuXG4gXG4gYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3N1Yl9mZHRzL2BgXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG5pbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3RcbkBAIC0xMyw4ICYjNDM7MTMsOCBAQCBLZXhlYyBIYW5kT3ZlciAoS0hPKSBpcyBhIG1lY2hhbmlzbSB0aGF0IGFsbG93cyBMaW51eCB0byBwcmVzZXJ2ZSBtZW1vcnlcbiByZWdpb25zLCB3aGljaCBjb3VsZCBjb250YWluIHNlcmlhbGl6ZWQgc3lzdGVtIHN0YXRlcywgYWNyb3NzIGtleGVjLlxuIFxuIEtITyB1c2VzIDpyZWY6YGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSAoRkRUKSBcdTAwM2NraG9fZmR0XHUwMDNlYCB0byBwYXNzIGluZm9ybWF0aW9uIGFib3V0XG4tdGhlIHByZXNlcnZlZCBzdGF0ZSBmcm9tIHByZS1leGVjIGtlcm5lbCB0byBwb3N0LWtleGVjIGtlcm5lbCBhbmQgOnJlZjpgc2NyYXRjaFxuLW1lbW9yeSByZWdpb25zIFx1MDAzY2tob19zY3JhdGNoXHUwMDNlYCB0byBlbnN1cmUgaW50ZWdyaXR5IG9mIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5LlxuJiM0Mzt0aGUgcHJlc2VydmVkIHN0YXRlIGZyb20gcHJlLWV4ZWMga2VybmVsIHRvIHBvc3Qta2V4ZWMga2VybmVsIGFuZCA6cmVmOmBib290XG4mIzQzO21lbW9yeSByZWdpb25zIFx1MDAzY2tob19ib290bWVtXHUwMDNlYCB0byBlbnN1cmUgaW50ZWdyaXR5IG9mIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5LlxuIFxuIC4uIF9raG9fZmR0OlxuIFxuQEAgLTQwLDMxICYjNDM7NDAsMzEgQEAgYW5kIHBvc3Qta2V4ZWMga2VybmVscy4gVGhpcyBBQkkgaXMgZGVmaW5lZCBieSBoZWFkZXIgZmlsZXMgaW5cbiBcbiAgICBhYmkucnN0XG4gXG4tLi4gX2tob19zY3JhdGNoOlxuJiM0MzsuLiBfa2hvX2Jvb3RtZW06XG4gXG4tU2NyYXRjaCBSZWdpb25zXG4tPT09PT09PT09PT09PT09XG4mIzQzO0Jvb3QgTWVtb3J5IFJlZ2lvbnNcbiYjNDM7PT09PT09PT09PT09PT09PT09PVxuIFxuIFRvIGJvb3QgaW50byBrZXhlYywgd2UgbmVlZCB0byBoYXZlIGEgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByYW5nZSB0aGF0XG4gY29udGFpbnMgbm8gaGFuZGVkIG92ZXIgbWVtb3J5LiBLZXhlYyB0aGVuIHBsYWNlcyB0aGUgdGFyZ2V0IGtlcm5lbCBhbmQgaW5pdHJkXG4gaW50byB0aGF0IHJlZ2lvbi4gVGhlIG5ldyBrZXJuZWwgZXhjbHVzaXZlbHkgdXNlcyB0aGlzIHJlZ2lvbiBmb3IgbWVtb3J5XG4gYWxsb2NhdGlvbnMgYmVmb3JlIGR1cmluZyBib290IHVwIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFnZSBhbGxvY2F0b3IuXG4gXG4tV2UgZ3VhcmFudGVlIHRoYXQgd2UgYWx3YXlzIGhhdmUgc3VjaCByZWdpb25zIHRocm91Z2ggdGhlIHNjcmF0Y2ggcmVnaW9uczogT25cbi1maXJzdCBib290IEtITyBhbGxvY2F0ZXMgc2V2ZXJhbCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMuIFNpbmNlXG4mIzQzO1dlIGd1YXJhbnRlZSB0aGF0IHdlIGFsd2F5cyBoYXZlIHN1Y2ggcmVnaW9ucyB0aHJvdWdoIHRoZSBib290IG1lbW9yeSByZWdpb25zOlxuJiM0MztPbiBmaXJzdCBib290IEtITyBhbGxvY2F0ZXMgc2V2ZXJhbCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMuIFNpbmNlXG4gYWZ0ZXIga2V4ZWMgdGhlc2UgcmVnaW9ucyB3aWxsIGJlIHVzZWQgYnkgZWFybHkgbWVtb3J5IGFsbG9jYXRpb25zLCB0aGVyZSBpcyBhXG4tc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9uc1xuLXJlcXVlc3RzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFydGljdWxhciBOVU1BIG5vZGUgYXNzaWdubWVudC5cbi1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcbi1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG4tdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbnMuXG4tVGhlIHNjcmF0Y2ggcmVnaW9ucyBhcmUgZGVjbGFyZWQgYXMgQ01BIHdoZW4gcGFnZSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQgc29cbi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlXG4tZ3VhcmFudGVlIHRoYXQgbm8gaGFuZG92ZXIgcGFnZXMgbGFuZCBpbiB0aGF0IHJlZ2lvbiwgYmVjYXVzZSBoYW5kb3ZlciBwYWdlc1xuLW11c3QgYmUgYXQgYSBzdGF0aWMgcGh5c2ljYWwgbWVtb3J5IGxvY2F0aW9uIGFuZCBDTUEgZW5mb3JjZXMgdGhhdCBvbmx5XG4tbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuXG4tXG4tQWZ0ZXIgS0hPIGtleGVjLCB3ZSBpZ25vcmUgdGhlIGBga2hvX3NjcmF0Y2hgYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmRcbiYjNDM7Ym9vdCBtZW1vcnkgcmVnaW9uIHBlciBOVU1BIG5vZGUgcGx1cyBhIGJvb3QgbWVtb3J5IHJlZ2lvbiB0byBzYXRpc2Z5XG4mIzQzO2FsbG9jYXRpb25zIHJlcXVlc3RzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFydGljdWxhciBOVU1BIG5vZGUgYXNzaWdubWVudC4gQnlcbiYjNDM7ZGVmYXVsdCwgc2l6ZSBvZiB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYW1vdW50IG9mIG1lbW9yeVxuJiM0MzthbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG4mIzQzO3VzZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBvZiB0aGUgYm9vdCBtZW1vcnkgcmVnaW9ucy4gVGhlIGJvb3QgbWVtb3J5XG4mIzQzO3JlZ2lvbnMgYXJlIGRlY2xhcmVkIGFzIENNQSB3aGVuIHBhZ2UgYWxsb2NhdG9yIGlzIGluaXRpYWxpemVkIHNvIHRoYXQgdGhlaXJcbiYjNDM7bWVtb3J5IGNhbiBiZSB1c2VkIGR1cmluZyBzeXN0ZW0gbGlmZXRpbWUuIENNQSBnaXZlcyB1cyB0aGUgZ3VhcmFudGVlIHRoYXQgbm9cbiYjNDM7aGFuZG92ZXIgcGFnZXMgbGFuZCBpbiB0aGF0IHJlZ2lvbiwgYmVjYXVzZSBoYW5kb3ZlciBwYWdlcyBtdXN0IGJlIGF0IGEgc3RhdGljXG4mIzQzO3BoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiBhbmQgQ01BIGVuZm9yY2VzIHRoYXQgb25seSBtb3ZhYmxlIHBhZ2VzIGNhbiBiZSBsb2NhdGVkXG4mIzQzO2luc2lkZS5cbiYjNDM7XG4mIzQzO0FmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXG4gaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXG4gdXMgdG8gcmVjdXJzaXZlbHkgZXhlY3V0ZSBhbnkgYW1vdW50IG9mIEtITyBrZXhlY3MuIEJlY2F1c2Ugd2UgdXNlZCB0aGlzIHJlZ2lvblxuIGZvciBib290IG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYXMgdGFyZ2V0IG1lbW9yeSBmb3Iga2V4ZWMgYmxvYnMsIHNvbWUgcGFydHNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5pbmRleCAyMjI2N2E4M2UwNjRhLi4yOTAxNTM4MThkMGYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5AQCAtNzY0LDEyICYjNDM7NzY0LDEyIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZTgyMF9lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcbiB9XG4gXG4gLypcbi0gKiBJZiBLSE8gaXMgYWN0aXZlLCBvbmx5IHByb2Nlc3MgaXRzIHNjcmF0Y2ggYXJlYXMgdG8gZW5zdXJlIHdlIGFyZSBub3RcbiYjNDM7ICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBib290bWVtIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90XG4gICogc3RlcHBpbmcgb250byBwcmVzZXJ2ZWQgbWVtb3J5LlxuICAqL1xuIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG4ge1xuLVx0c3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbiYjNDM7XHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuIFx0c3RydWN0IHNldHVwX2RhdGEgKnB0cjtcbiBcdHN0cnVjdCBraG9fZGF0YSAqa2hvO1xuIFx0aW50IGksIG5yX2FyZWFzID0gMDtcbkBAIC03ODEsOCAmIzQzOzc4MSw4IEBAIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG4gXHR3aGlsZSAocHRyKSB7XG4gXHRcdGlmIChwdHItXHUwMDNldHlwZSA9PSBTRVRVUF9LRVhFQ19LSE8pIHtcbiBcdFx0XHRraG8gPSAoc3RydWN0IGtob19kYXRhICopKHVuc2lnbmVkIGxvbmcpcHRyLVx1MDAzZWRhdGE7XG4tXHRcdFx0a2hvX3NjcmF0Y2ggPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWtoby1cdTAwM2VzY3JhdGNoX2FkZHI7XG4tXHRcdFx0bnJfYXJlYXMgPSBraG8tXHUwMDNlc2NyYXRjaF9zaXplIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4mIzQzO1x0XHRcdGtob19ib290bWVtID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylraG8tXHUwMDNlYm9vdG1lbV9hZGRyO1xuJiM0MztcdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2Vib290bWVtX3NpemUgLyBzaXplb2YoKmtob19ib290bWVtKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYXJlYXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9IFx1MDAyNmtob19zY3JhdGNoW2ldO1xuJiM0MztcdFx0c3RydWN0IGtob19ib290bWVtICphcmVhID0gXHUwMDI2a2hvX2Jvb3RtZW1baV07XG4gXHRcdHN0cnVjdCBtZW1fdmVjdG9yIHJlZ2lvbiA9IHtcbiBcdFx0XHQuc3RhcnQgPSBhcmVhLVx1MDAzZWFkZHIsXG4gXHRcdFx0LnNpemUgPSBhcmVhLVx1MDAzZXNpemUsXG5AQCAtODIyLDcgJiM0Mzs4MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3JhbmRvbV9waHlzX2FkZHIodW5zaWduZWQgbG9uZyBtaW5pbXVtLFxuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIER1cmluZyBrZXhlYyBoYW5kb3ZlciBvbmx5IHByb2Nlc3MgS0hPIHNjcmF0Y2ggYXJlYXMgdGhhdCBhcmUga25vd25cbiYjNDM7XHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duXG4gXHQgKiBub3QgdG8gY29udGFpbiBhbnkgZGF0YSB0aGF0IG11c3QgYmUgcHJlc2VydmVkLlxuIFx0ICovXG4gXHRpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuaW5kZXggMjY3MWM0ZTFiM2EwYi4uNjEwOTBkYjUwNjVjNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc2V0dXBfZGF0YS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuQEAgLTg1LDggJiM0Mzs4NSw4IEBAIHN0cnVjdCBpbWFfc2V0dXBfZGF0YSB7XG4gc3RydWN0IGtob19kYXRhIHtcbiBcdF9fdTY0IGZkdF9hZGRyO1xuIFx0X191NjQgZmR0X3NpemU7XG4tXHRfX3U2NCBzY3JhdGNoX2FkZHI7XG4tXHRfX3U2NCBzY3JhdGNoX3NpemU7XG4mIzQzO1x0X191NjQgYm9vdG1lbV9hZGRyO1xuJiM0MztcdF9fdTY0IGJvb3RtZW1fc2l6ZTtcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuICNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcbmluZGV4IGViNzI1MzdiYzBiMTkuLjJhNmUxOWY5NTI1MTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG5AQCAtMTM2Myw3ICYjNDM7MTM2Myw3IEBAIF9faW5pdCB2b2lkIGU4MjBfX21lbWJsb2NrX3NldHVwKHZvaWQpXG4gXHQgKiBBZnRlciByZWFsIG1vZGUgdHJhbXBvbGluZSBpcyBhbGxvY2F0ZWQsIHdlIGNsZWFyIHRoYXQgc2NyYXRjaFxuIFx0ICogbWFya2luZy5cbiBcdCAqL1xuLVx0bWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgwLCBTWl8xTSk7XG4mIzQzO1x0bWVtYmxvY2tfbWFya19raG9fbm9wcnNydigwLCBTWl8xTSk7XG4gXG4gXHQvKlxuIFx0ICogMzItYml0IHN5c3RlbXMgYXJlIGxpbWl0ZWQgdG8gNEJHIG9mIG1lbW9yeSBldmVuIHdpdGggSElHSE1FTSBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcbmluZGV4IDdlOTgwZWE0OWQ4ZDYuLjNhYTc3MDA2YWRhYjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuY1xuQEAgLTI4NSwxNCAmIzQzOzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLFxuIFx0c2QtXHUwMDNlbGVuID0gc2l6ZW9mKHN0cnVjdCBraG9fZGF0YSk7XG4gXG4gXHQvKiBPbmx5IGFkZCBpZiB3ZSBoYXZlIGFsbCBLSE8gaW1hZ2VzIGluIHBsYWNlICovXG4tXHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKVxuJiM0MztcdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLmJvb3RtZW0pXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIEFkZCBzZXR1cCBkYXRhICovXG4gXHRraG8tXHUwMDNlZmR0X2FkZHIgPSBpbWFnZS1cdTAwM2VraG8uZmR0O1xuIFx0a2hvLVx1MDAzZWZkdF9zaXplID0gUEFHRV9TSVpFO1xuLVx0a2hvLVx1MDAzZXNjcmF0Y2hfYWRkciA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbTtcbi1cdGtoby1cdTAwM2VzY3JhdGNoX3NpemUgPSBpbWFnZS1cdTAwM2VraG8uc2NyYXRjaC1cdTAwM2VidWZzejtcbiYjNDM7XHRraG8tXHUwMDNlYm9vdG1lbV9hZGRyID0gaW1hZ2UtXHUwMDNla2hvLmJvb3RtZW0tXHUwMDNlbWVtO1xuJiM0MztcdGtoby1cdTAwM2Vib290bWVtX3NpemUgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VidWZzejtcbiBcdHNkLVx1MDAzZW5leHQgPSBwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGE7XG4gXHRwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGEgPSBwYXJhbXNfbG9hZF9hZGRyICYjNDM7IHNldHVwX2RhdGFfb2Zmc2V0O1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG5pbmRleCA1ZWJiNTIxZTEzNmQ3Li5kMTYxOGM0Y2Y3ZmJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG5AQCAtNDcyLDcgJiM0Mzs0NzIsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYWRkX2tobyh1NjQgcGh5c19hZGRyLCB1MzIgZGF0YV9sZW4pXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGtob19wb3B1bGF0ZShraG8tXHUwMDNlZmR0X2FkZHIsIGtoby1cdTAwM2VmZHRfc2l6ZSwga2hvLVx1MDAzZXNjcmF0Y2hfYWRkciwga2hvLVx1MDAzZXNjcmF0Y2hfc2l6ZSk7XG4mIzQzO1x0a2hvX3BvcHVsYXRlKGtoby1cdTAwM2VmZHRfYWRkciwga2hvLVx1MDAzZWZkdF9zaXplLCBraG8tXHUwMDNlYm9vdG1lbV9hZGRyLCBraG8tXHUwMDNlYm9vdG1lbV9zaXplKTtcbiBcbiBcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYyBiL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuaW5kZXggNjk0ZDgwYTVjNjhlMS4uNjUxMTBiMmVlMWExZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jXG5AQCAtNjYsNyAmIzQzOzY2LDcgQEAgdm9pZCBfX2luaXQgcmVzZXJ2ZV9yZWFsX21vZGUodm9pZClcbiBcdCAqL1xuIFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl8xTSk7XG4gXG4tXHRtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaCgwLCBTWl8xTSk7XG4mIzQzO1x0bWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnYoMCwgU1pfMU0pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgc21lX3Nldl9zZXR1cF9yZWFsX21vZGUoc3RydWN0IHRyYW1wb2xpbmVfaGVhZGVyICp0aClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuY1xuaW5kZXggNjEwM2IxYTA4MmQyNC4uOWYwOWIwZDJkYWEwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmNcbkBAIC0xNjUsMTAgJiM0MzsxNjUsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxuIFx0XHRwcl9pbmZvKFwmIzM0O1Byb2Nlc3NpbmcgRUZJIG1lbW9yeSBtYXA6XFxuXCYjMzQ7KTtcbiBcbiBcdC8qXG4tXHQgKiBEaXNjYXJkIG1lbWJsb2NrcyBkaXNjb3ZlcmVkIHNvIGZhciBleGNlcHQgZm9yIEtITyBzY3JhdGNoXG4mIzQzO1x0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gYm9vdG1lbVxuIFx0ICogcmVnaW9ucy4gTW9zdCBtZW1ibG9ja3MgYXQgdGhpcyBwb2ludCBvcmlnaW5hdGUgZnJvbSBtZW1vcnkgbm9kZXNcbiBcdCAqIGluIHRoZSBEVCBhbmQgVUVGSSB1c2VzIGl0cyBvd24gbWVtb3J5IG1hcCBpbnN0ZWFkLiBIb3dldmVyLCBpZlxuLVx0ICogS0hPIGlzIGVuYWJsZWQsIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XG4mIzQzO1x0ICogS0hPIGlzIGVuYWJsZWQsIGJvb3RtZW0gcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XG4gXHQgKiBtdXN0IGJlIHByZXNlcnZlZC5cbiBcdCAqL1xuIFx0bWVtYmxvY2tfZHVtcF9hbGwoKTtcbkBAIC0xNzgsNyAmIzQzOzE3OCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCByZXNlcnZlX3JlZ2lvbnModm9pZClcbiBcbiBcdFx0LyogUmVtb3ZlIGFsbCBub24tS0hPIHJlZ2lvbnMgKi9cbiBcdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0aWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkge1xuJiM0MztcdFx0XHRpZiAoIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHIpKSB7XG4gXHRcdFx0XHRtZW1ibG9ja19yZW1vdmUoci1cdTAwM2ViYXNlLCByLVx1MDAzZXNpemUpO1xuIFx0XHRcdFx0ci0tO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2tleGVjLmMgYi9kcml2ZXJzL29mL2tleGVjLmNcbmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL2tleGVjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xuQEAgLTI2MSwyMyAmIzQzOzI2MSwyMyBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZVxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbiBcdHBoeXNfYWRkcl90IGZkdF9tZW0gPSAwO1xuIFx0cGh5c19hZGRyX3QgZmR0X2xlbiA9IDA7XG4tXHRwaHlzX2FkZHJfdCBzY3JhdGNoX21lbSA9IDA7XG4tXHRwaHlzX2FkZHJfdCBzY3JhdGNoX2xlbiA9IDA7XG4mIzQzO1x0cGh5c19hZGRyX3QgYm9vdG1lbV9hcnIgPSAwO1xuJiM0MztcdHBoeXNfYWRkcl90IGJvb3RtZW1fbGVuID0gMDtcbiBcbiBcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwmIzM0O2xpbnV4LGtoby1mZHRcJiMzNDspO1xuIFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1GRFRfRVJSX05PVEZPVU5EKVxuIFx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgXCYjMzQ7bGludXgsa2hvLXNjcmF0Y2hcJiMzNDspO1xuJiM0MztcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwmIzM0O2xpbnV4LGtoby1ib290bWVtXCYjMzQ7KTtcbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gpXG4mIzQzO1x0aWYgKCFpbWFnZS1cdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRmZHRfbWVtID0gaW1hZ2UtXHUwMDNla2hvLmZkdDtcbiBcdGZkdF9sZW4gPSBQQUdFX1NJWkU7XG4tXHRzY3JhdGNoX21lbSA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbTtcbi1cdHNjcmF0Y2hfbGVuID0gaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlYnVmc3o7XG4mIzQzO1x0Ym9vdG1lbV9hcnIgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VtZW07XG4mIzQzO1x0Ym9vdG1lbV9sZW4gPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VidWZzejtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O0FkZGluZyBraG8gbWV0YWRhdGEgdG8gRFRcJiMzNDspO1xuIFxuQEAgLTI4NSw4ICYjNDM7Mjg1LDggQEAgc3RhdGljIGludCBraG9fYWRkX2Nob3Nlbihjb25zdCBzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqZmR0LCBpbnQgY2hvc2VuX25vZGVcbiBcdFx0XHRcdCAgICAgICBmZHRfbWVtLCBmZHRfbGVuKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4tXHRyZXQgPSBmZHRfYXBwZW5kcHJvcF9hZGRycmFuZ2UoZmR0LCAwLCBjaG9zZW5fbm9kZSwgXCYjMzQ7bGludXgsa2hvLXNjcmF0Y2hcJiMzNDssXG4tXHRcdFx0XHQgICAgICAgc2NyYXRjaF9tZW0sIHNjcmF0Y2hfbGVuKTtcbiYjNDM7XHRyZXQgPSBmZHRfYXBwZW5kcHJvcF9hZGRycmFuZ2UoZmR0LCAwLCBjaG9zZW5fbm9kZSwgXCYjMzQ7bGludXgsa2hvLWJvb3RtZW1cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb3RtZW1fYXJyLCBib290bWVtX2xlbik7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDUwODM5ZmI1ZWU4ZWQuLmNmNzNkOWIzNGMzYzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxuQEAgLTQsNyAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbi1zdHJ1Y3Qga2hvX3NjcmF0Y2gge1xuJiM0MztzdHJ1Y3Qga2hvX2Jvb3RtZW0ge1xuIFx0cGh5c19hZGRyX3QgYWRkcjtcbiBcdHBoeXNfYWRkcl90IHNpemU7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWMuaFxuQEAgLTQxOCw3ICYjNDM7NDE4LDcgQEAgc3RydWN0IGtpbWFnZSB7XG4gI2VuZGlmXG4gXG4gXHRzdHJ1Y3Qge1xuLVx0XHRzdHJ1Y3Qga2V4ZWNfc2VnbWVudCAqc2NyYXRjaDtcbiYjNDM7XHRcdHN0cnVjdCBrZXhlY19zZWdtZW50ICpib290bWVtO1xuIFx0XHRwaHlzX2FkZHJfdCBmZHQ7XG4gXHR9IGtobztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDQ2ZGU4NmRjMzQzZTkuLmVmMmIxODhjOGVkMDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuQEAgLTM2LDE1ICYjNDM7MzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpO1xuIFxuLXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxuLVx0XHQgIHU2NCBzY3JhdGNoX2xlbik7XG4mIzQzO3ZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3QgYm9vdG1lbV9waHlzLFxuJiM0MztcdFx0ICB1NjQgYm9vdG1lbV9sZW4pO1xuIFxuLWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2Jvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4gXG4tc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuJiM0MztzdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdFx0ICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpXG4ge1xuLVx0aWYgKGtob19zY3JhdGNoX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSlcbiYjNDM7XHRpZiAoa2hvX2Jvb3RtZW1fb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKVxuIFx0XHRyZXR1cm4gTUlHUkFURV9DTUE7XG4gXHRyZXR1cm4gbXQ7XG4gfVxuQEAgLTEyMywxNiAmIzQzOzEyMywxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4tXHRcdFx0XHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcbiYjNDM7XHRcdFx0XHRwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbilcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHRcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxuIHtcbiBcdHJldHVybiBtdDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjE4NmI5NjVjZmM4OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTQ2LDExICYjNDM7NDYsMTEgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuO1xuICAqIEBNRU1CTE9DS19SU1JWX0tFUk46IG1lbW9yeSByZWdpb24gdGhhdCBpcyByZXNlcnZlZCBmb3Iga2VybmVsIHVzZSxcbiAgKiBlaXRoZXIgZXhwbGljdGl0bHkgd2l0aCBtZW1ibG9ja19yZXNlcnZlX2tlcm4oKSBvciB2aWEgbWVtYmxvY2tcbiAgKiBhbGxvY2F0aW9uIEFQSXMuIEFsbCBtZW1ibG9jayBhbGxvY2F0aW9ucyBzZXQgdGhpcyBmbGFnLlxuLSAqIEBNRU1CTE9DS19LSE9fU0NSQVRDSDogbWVtb3J5IHJlZ2lvbiB0aGF0IGtleGVjIGNhbiBwYXNzIHRvIHRoZSBuZXh0XG4tICoga2VybmVsIGluIGhhbmRvdmVyIG1vZGUuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGxcbi0gKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzXG4tICoga2VybmVsIHRoYXQgd2Uga25vdyBpcyBnb29kIHRvIHVzZS4gSXQgaXMgdGhlIG9ubHkgbWVtb3J5IHRoYXRcbi0gKiBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20gaW4gdGhpcyBwaGFzZS5cbiYjNDM7ICogQE1FTUJMT0NLX0tIT19OT1BSU1JWOiBtZW1vcnkgcmVnaW9uIHdpdGggbm8gcHJlc2VydmF0aW9uIGZyb20ga2V4ZWNcbiYjNDM7ICogaGFuZG92ZXIuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGwgbWVtb3J5IHByZXNlcnZhdGlvbnNcbiYjNDM7ICogeWV0LCBzbyB3ZSBnZXQgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgdGhhdCB3ZVxuJiM0MzsgKiBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdCBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb21cbiYjNDM7ICogaW4gdGhpcyBwaGFzZS5cbiAgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcbiAgKi9cbiBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbkBAIC02MSw3ICYjNDM7NjEsNyBAQCBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbiBcdE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEID0gMHg4LFx0LyogYWx3YXlzIGRldGVjdGVkIHZpYSBhIGRyaXZlciAqL1xuIFx0TUVNQkxPQ0tfUlNSVl9OT0lOSVRcdD0gMHgxMCxcdC8qIGRvbiYjMzk7dCBpbml0aWFsaXplIHN0cnVjdCBwYWdlcyAqL1xuIFx0TUVNQkxPQ0tfUlNSVl9LRVJOXHQ9IDB4MjAsXHQvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGtlcm5lbCB1c2UgKi9cbi1cdE1FTUJMT0NLX0tIT19TQ1JBVENIXHQ9IDB4NDAsXHQvKiBzY3JhdGNoIG1lbW9yeSBmb3Iga2V4ZWMgaGFuZG92ZXIgKi9cbiYjNDM7XHRNRU1CTE9DS19LSE9fTk9QUlNSVlx0PSAweDQwLFx0LyogbWVtb3J5IHdpdGggbm8gS0hPIHByZXNlcnZhdGlvbnMgKi9cbiBcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlx0PSAweDgwLCAvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXMgKi9cbiB9O1xuIFxuQEAgLTE1OCw4ICYjNDM7MTU4LDggQEAgaW50IG1lbWJsb2NrX21hcmtfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gaW50IG1lbWJsb2NrX2NsZWFyX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGludCBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBpbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuLWludCBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuLWludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiYjNDM7aW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4mIzQzO2ludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBcbiB2b2lkIG1lbWJsb2NrX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKTtcbkBAIC0zMDEsOSAmIzQzOzMwMSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19kcml2ZXJfbWFuYWdlZChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuIFx0cmV0dXJuIG0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2goc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqbSlcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXG4ge1xuLVx0cmV0dXJuIG0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuJiM0MztcdHJldHVybiBtLVx1MDAzZWZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiB9XG4gXG4gaW50IG1lbWJsb2NrX3NlYXJjaF9wZm5fbmlkKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXG5AQCAtNjE0LDEyICYjNDM7NjE0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9tZW10ZXN0KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW10ZXN0X3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkgeyB9XG4gI2VuZGlmXG4gXG4tI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSFxuLXZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZCk7XG4tdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG4mIzQzO3ZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCk7XG4mIzQzO3ZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNldl9vbmx5KHZvaWQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKSB7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX01FTUJMT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnIGIva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ1xuaW5kZXggYzEzYWYzOGJhMjNhYi4uZjUwZGFlZThlZmYwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbkBAIC01LDcgJiM0Mzs1LDYgQEAgbWVudSBcJiMzNDtMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcJiMzNDtcbiBjb25maWcgS0VYRUNfSEFORE9WRVJcbiBcdGJvb2wgXCYjMzQ7a2V4ZWMgaGFuZG92ZXJcJiMzNDtcbiBcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUiBcdTAwMjZcdTAwMjYgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG4tXHRzZWxlY3QgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbiBcdHNlbGVjdCBLRVhFQ19GSUxFXG4gXHRzZWxlY3QgTElCRkRUXG4gXHRzZWxlY3QgQ01BXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IGZlNmYyYWM3ZTQ1ODMuLmRhOGQ1ZWNiOTE1YjUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5AQCAtNDEsMTIgJiM0Mzs0MSwxMiBAQFxuIC8qXG4gICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cbiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3Ncbi0gKiBhdCB0aGUgbmVpZ2hib3JpbmcgcGFnZXMgKHVwIHRvIE1BWF9QQUdFX09SREVSKSB0byBtZXJnZSB0aGVtLlxuLSAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxuLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4mIzQzOyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uIElmIEtITyBib290bWVtXG4mIzQzOyAqIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFnZXMsXG4mIzQzOyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxuICAqL1xuLSNkZWZpbmUgU0NSQVRDSF9BTElHTk1FTlRfQllURVMgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylcbi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFx1MDAzZT0gQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MzsjZGVmaW5lIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpXG4mIzQzO3N0YXRpY19hc3NlcnQoQk9PVE1FTV9BTElHTk1FTlRfQllURVMgXHUwMDNlPSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4gXG4gLyogVGhlIG1hZ2ljIHRva2VuIGZvciBwcmVzZXJ2ZWQgcGFnZXMgKi9cbiAjZGVmaW5lIEtIT19QQUdFX01BR0lDIDB4NGI0ODRmNTBVIC8qIEFTQ0lJIGZvciAmIzM5O0tIT1AmIzM5OyAqL1xuQEAgLTk2LDcgJiM0Mzs5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xuIFxuIHN0cnVjdCBraG9faW4ge1xuIFx0cGh5c19hZGRyX3QgZmR0X3BoeXM7XG4tXHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXM7XG4mIzQzO1x0cGh5c19hZGRyX3QgYm9vdG1lbV9waHlzO1xuIFx0Y2hhciBwcmV2aW91c19yZWxlYXNlW19fTkVXX1VUU19MRU4gJiM0MzsgMV07XG4gXHR1MzIga2V4ZWNfY291bnQ7XG4gXHRzdHJ1Y3Qga2hvX2RlYnVnZnMgZGJnO1xuQEAgLTY1NiwzNCAmIzQzOzY1NiwzNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgKmtob19nZXRfbWVtX21hcChjb25zdCB2b2lkICpmZHQpXG4gXG4gLypcbiAgKiBXaXRoIEtITyBlbmFibGVkLCBtZW1vcnkgY2FuIGJlY29tZSBmcmFnbWVudGVkIGJlY2F1c2UgS0hPIHJlZ2lvbnMgbWF5XG4tICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIHNjcmF0Y2ggcmVnaW9ucyBnaXZlIHVzIGFcbiYjNDM7ICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIGJvb3RtZW0gcmVnaW9ucyBnaXZlIHVzIGFcbiAgKiBzYWZlIHpvbmVzIHRoYXQgd2Ugd2lsbCBuZXZlciBzZWUgS0hPIGFsbG9jYXRpb25zIGZyb20uIFRoaXMgaXMgd2hlcmUgd2Vcbi0gKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIHNjcmF0Y2hcbiYjNDM7ICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBib290bWVtXG4gICogYXJlYSBmb3IgZWFybHkgYWxsb2NhdGlvbnMgdGhhdCBoYXBwZW4gYmVmb3JlIHBhZ2UgYWxsb2NhdG9yIGlzXG4gICogaW5pdGlhbGl6ZWQuXG4gICovXG4tc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbi11bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xuJiM0MztzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuJiM0Mzt1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuIC8qXG4tICogVGhlIHNjcmF0Y2ggYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXG4mIzQzOyAqIFRoZSBib290bWVtIGFyZWFzIGFyZSBzY2FsZWQgYnkgZGVmYXVsdCBhcyBwZXJjZW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbVxuICAqIG1lbWJsb2NrLiBBIHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBzY2FsZSB3aXRoIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXI6XG4gICpcbi0gKiBraG9fc2NyYXRjaD1OJVxuJiM0MzsgKiBraG9fYm9vdG1lbT1OJVxuICAqXG4gICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIGZvciBhIGxvd21lbSwgYSBnbG9iYWwgYW5kXG4tICogcGVyLW5vZGUgc2NyYXRjaCBhcmVhczpcbiYjNDM7ICogcGVyLW5vZGUgYm9vdG1lbSBhcmVhczpcbiAgKlxuLSAqIGtob19zY3JhdGNoPWxbS01HXSxuW0tNR10sbVtLTUddXG4mIzQzOyAqIGtob19ib290bWVtPWxbS01HXSxuW0tNR10sbVtLTUddXG4gICpcbiAgKiBUaGUgZXhwbGljaXQgc2l6ZSBkZWZpbml0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzY2FsZSBkZWZpbml0aW9uLlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2NyYXRjaF9zY2FsZSBfX2luaXRkYXRhID0gMjAwO1xuLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XG4tc3RhdGljIHBoeXNfYWRkcl90IHNjcmF0Y2hfc2l6ZV9wZXJub2RlIF9faW5pdGRhdGE7XG4tc3RhdGljIHBoeXNfYWRkcl90IHNjcmF0Y2hfc2l6ZV9sb3dtZW0gX19pbml0ZGF0YTtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBib290bWVtX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7XG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfcGVybm9kZSBfX2luaXRkYXRhO1xuJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgYm9vdG1lbV9zaXplX2xvd21lbSBfX2luaXRkYXRhO1xuIFxuLXN0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9zY3JhdGNoX3NpemUoY2hhciAqcClcbiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZShjaGFyICpwKVxuIHtcbiBcdHNpemVfdCBsZW47XG4gXHR1bnNpZ25lZCBsb25nIHNpemVzWzNdO1xuQEAgLTcwNyw5ICYjNDM7NzA3LDkgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRtZW1jcHkoc19zY2FsZSwgcCwgbGVuIC0gMSk7XG4tXHRcdHJldCA9IGtzdHJ0b3VpbnQoc19zY2FsZSwgMTAsIFx1MDAyNnNjcmF0Y2hfc2NhbGUpO1xuJiM0MztcdFx0cmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgXHUwMDI2Ym9vdG1lbV9zY2FsZSk7XG4gXHRcdGlmICghcmV0KVxuLVx0XHRcdHByX25vdGljZShcJiMzNDtzY3JhdGNoIHNjYWxlIGlzICVkJSVcXG5cJiMzNDssIHNjcmF0Y2hfc2NhbGUpO1xuJiM0MztcdFx0XHRwcl9ub3RpY2UoXCYjMzQ7Ym9vdG1lbSBzY2FsZSBpcyAlZCUlXFxuXCYjMzQ7LCBib290bWVtX3NjYWxlKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC03MzcsODEgJiM0Mzs3MzcsODEgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxuIFx0aWYgKCpwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplc1swXTtcbi1cdHNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSBzaXplc1sxXTtcbi1cdHNjcmF0Y2hfc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07XG4tXHRzY3JhdGNoX3NjYWxlID0gMDtcbiYjNDM7XHRib290bWVtX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XG4mIzQzO1x0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHNpemVzWzFdO1xuJiM0MztcdGJvb3RtZW1fc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07XG4mIzQzO1x0Ym9vdG1lbV9zY2FsZSA9IDA7XG4gXG4tXHRwcl9ub3RpY2UoXCYjMzQ7c2NyYXRjaCBhcmVhczogbG93bWVtOiAlbGx1TWlCIGdsb2JhbDogJWxsdU1pQiBwZXJub2RlOiAlbGxkTWlCXFxuXCYjMzQ7LFxuLVx0XHQgICh1NjQpKHNjcmF0Y2hfc2l6ZV9sb3dtZW0gXHUwMDNlXHUwMDNlIDIwKSxcbi1cdFx0ICAodTY0KShzY3JhdGNoX3NpemVfZ2xvYmFsIFx1MDAzZVx1MDAzZSAyMCksXG4tXHRcdCAgKHU2NCkoc2NyYXRjaF9zaXplX3Blcm5vZGUgXHUwMDNlXHUwMDNlIDIwKSk7XG4mIzQzO1x0cHJfbm90aWNlKFwmIzM0O2Jvb3RtZW0gYXJlYXM6IGxvd21lbTogJWxsdU1pQiBnbG9iYWw6ICVsbHVNaUIgcGVybm9kZTogJWxsZE1pQlxcblwmIzM0OyxcbiYjNDM7XHRcdCAgKHU2NCkoYm9vdG1lbV9zaXplX2xvd21lbSBcdTAwM2VcdTAwM2UgMjApLFxuJiM0MztcdFx0ICAodTY0KShib290bWVtX3NpemVfZ2xvYmFsIFx1MDAzZVx1MDAzZSAyMCksXG4mIzQzO1x0XHQgICh1NjQpKGJvb3RtZW1fc2l6ZV9wZXJub2RlIFx1MDAzZVx1MDAzZSAyMCkpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLWVhcmx5X3BhcmFtKFwmIzM0O2tob19zY3JhdGNoXCYjMzQ7LCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKTtcbiYjNDM7ZWFybHlfcGFyYW0oXCYjMzQ7a2hvX2Jvb3RtZW1cJiMzNDssIGtob19wYXJzZV9ib290bWVtX3NpemUpO1xuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCBzY3JhdGNoX3NpemVfdXBkYXRlKHZvaWQpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBib290bWVtX3NpemVfdXBkYXRlKHZvaWQpXG4ge1xuIFx0LypcbiBcdCAqIElmIGZpeGVkIHNpemVzIGFyZSBub3QgcHJvdmlkZWQgdmlhIGNvbW1hbmQgbGluZSwgY2FsY3VsYXRlIHRoZW0gbm93LlxuIFx0ICogUmVtb3ZlIEh1Z2VUTEIgYWxsb2NhdGlvbnMgZnJvbSBpdCBiZWNhdXNlIHRoZXkgbmV2ZXIgZ2V0IGFsbG9jYXRlZFxuLVx0ICogZnJvbSBzY3JhdGNoLlxuJiM0MztcdCAqIGZyb20gYm9vdG1lbS5cbiBcdCAqL1xuLVx0aWYgKHNjcmF0Y2hfc2NhbGUpIHtcbiYjNDM7XHRpZiAoYm9vdG1lbV9zY2FsZSkge1xuIFx0XHRwaHlzX2FkZHJfdCBzaXplO1xuIFxuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQsXG4gXHRcdFx0XHRcdFx0ICAgTlVNQV9OT19OT0RFKTtcbiBcdFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoQVJDSF9MT1dfQUREUkVTU19MSU1JVCxcbiBcdFx0XHRcdFx0XHQgICAgICAgTlVNQV9OT19OT0RFKTtcbi1cdFx0c2l6ZSA9IHNpemUgKiBzY3JhdGNoX3NjYWxlIC8gMTAwO1xuLVx0XHRzY3JhdGNoX3NpemVfbG93bWVtID0gc2l6ZTtcbiYjNDM7XHRcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDtcbiYjNDM7XHRcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSBzaXplO1xuIFxuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgIE5VTUFfTk9fTk9ERSk7XG4gXHRcdHNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgICAgICBOVU1BX05PX05PREUpO1xuLVx0XHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDAgLSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0XHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZTtcbiYjNDM7XHRcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMCAtIGJvb3RtZW1fc2l6ZV9sb3dtZW07XG4mIzQzO1x0XHRib290bWVtX3NpemVfZ2xvYmFsID0gc2l6ZTtcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiYjNDM7XHQgKiBib290bWVtIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiBcdCAqIHNpemUuXG4gXHQgKi9cbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSByb3VuZF91cChib290bWVtX3NpemVfbG93bWVtLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKGJvb3RtZW1fc2l6ZV9nbG9iYWwsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGJvb3RtZW1fc2l6ZV9ub2RlKGludCBuaWQpXG4ge1xuIFx0cGh5c19hZGRyX3Qgc2l6ZTtcbiBcbi1cdGlmIChzY3JhdGNoX3NjYWxlKSB7XG4mIzQzO1x0aWYgKGJvb3RtZW1fc2NhbGUpIHtcbiBcdFx0c2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSxcbiBcdFx0XHRcdFx0XHQgICBuaWQpO1xuIFx0XHQvKiBEbyBub3QgY291bnQgSHVnZVRMQiBwYWdlcy4gKi9cbiBcdFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUsXG4gXHRcdFx0XHRcdFx0ICAgICAgIG5pZCk7XG4tXHRcdHNpemUgPSBzaXplICogc2NyYXRjaF9zY2FsZSAvIDEwMDtcbiYjNDM7XHRcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDtcbiBcdH0gZWxzZSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfcGVybm9kZTtcbiYjNDM7XHRcdHNpemUgPSBib290bWVtX3NpemVfcGVybm9kZTtcbiBcdH1cbiBcbi1cdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0cmV0dXJuIHJvdW5kX3VwKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4tYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuJiM0Mztib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuLVx0cGh5c19hZGRyX3Qgc2NyYXRjaF9zdGFydCwgc2NyYXRjaF9lbmQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgYm9vdG1lbV9zdGFydCwgYm9vdG1lbV9lbmQ7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XG4tXHRcdHNjcmF0Y2hfZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciAmIzQzOyBraG9fc2NyYXRjaFtpXS5zaXplO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJvb3RtZW1fc3RhcnQgPSBraG9fYm9vdG1lbVtpXS5hZGRyO1xuJiM0MztcdFx0Ym9vdG1lbV9lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICYjNDM7IGtob19ib290bWVtW2ldLnNpemU7XG4gXG4tXHRcdGlmIChwaHlzIFx1MDAzYyBzY3JhdGNoX2VuZCBcdTAwMjZcdTAwMjYgKHBoeXMgJiM0Mzsgc2l6ZSkgXHUwMDNlIHNjcmF0Y2hfc3RhcnQpXG4mIzQzO1x0XHRpZiAocGh5cyBcdTAwM2MgYm9vdG1lbV9lbmQgXHUwMDI2XHUwMDI2IChwaHlzICYjNDM7IHNpemUpIFx1MDAzZSBib290bWVtX3N0YXJ0KVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTgxOSw3ICYjNDM7ODE5LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuIH1cbiBcbiAvKipcbi0gKiBraG9fcmVzZXJ2ZV9zY3JhdGNoIC0gUmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IGZvciBrZXhlY1xuJiM0MzsgKiBraG9fcmVzZXJ2ZV9ib290bWVtIC0gUmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IGZvciBrZXhlY1xuICAqXG4gICogV2l0aCBLSE8gd2UgY2FuIHByZXNlcnZlIGFyYml0cmFyeSBwYWdlcyBpbiB0aGUgc3lzdGVtLiBUbyBlbnN1cmUgd2Ugc3RpbGxcbiAgKiBoYXZlIGEgbGFyZ2UgY29udGlndW91cyByZWdpb24gb2YgbWVtb3J5IHdoZW4gd2Ugc2VhcmNoIHRoZSBwaHlzaWNhbCBhZGRyZXNzXG5AQCAtODI3LDcgJiM0Mzs4MjcsNyBAQCBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4gICogYWN0aXZlLiBUaGlzIENNQSByZWdpb24gd2lsbCBvbmx5IGJlIHVzZWQgZm9yIG1vdmFibGUgcGFnZXMgd2hpY2ggYXJlIG5vdCBhXG4gICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfYm9vdG1lbSh2b2lkKVxuIHtcbiBcdHBoeXNfYWRkcl90IGFkZHIsIHNpemU7XG4gXHRpbnQgbmlkLCBpID0gMDtcbkBAIC04MzUsNzMgJiM0Mzs4MzUsNzMgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdGlmICgha2hvX2VuYWJsZSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2NyYXRjaF9zaXplX3VwZGF0ZSgpO1xuJiM0MztcdGJvb3RtZW1fc2l6ZV91cGRhdGUoKTtcbiBcbiBcdC8qIEZJWE1FOiBkZWFsIHdpdGggbm9kZSBob3QtcGx1Zy9yZW1vdmUgKi9cbi1cdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICYjNDM7IDI7XG4tXHRzaXplID0ga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4tXHRraG9fc2NyYXRjaCA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XG4tXHRpZiAoIWtob19zY3JhdGNoKSB7XG4tXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFycmF5XFxuXCYjMzQ7KTtcbiYjNDM7XHRraG9fYm9vdG1lbV9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyO1xuJiM0MztcdHNpemUgPSBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKTtcbiYjNDM7XHRraG9fYm9vdG1lbSA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XG4mIzQzO1x0aWYgKCFraG9fYm9vdG1lbSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGJvb3RtZW0gYXJyYXlcXG5cJiMzNDspO1xuIFx0XHRnb3RvIGVycl9kaXNhYmxlX2tobztcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiByZXNlcnZlIHNjcmF0Y2ggYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlXG4mIzQzO1x0ICogcmVzZXJ2ZSBib290bWVtIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIFx0ICogbmV4dCBrZXJuZWxcbiBcdCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbiYjNDM7XHRzaXplID0gYm9vdG1lbV9zaXplX2xvd21lbTtcbiYjNDM7XHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywgMCxcbiBcdFx0XHRcdFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xuIFx0aWYgKCFhZGRyKSB7XG4tXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXG5cJiMzNDspO1xuLVx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfZGVzYztcbiYjNDM7XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2Jvb3RtZW1fZGVzYztcbiBcdH1cbiBcbi1cdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuLVx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4mIzQzO1x0a2hvX2Jvb3RtZW1baV0uYWRkciA9IGFkZHI7XG4mIzQzO1x0a2hvX2Jvb3RtZW1baV0uc2l6ZSA9IHNpemU7XG4gXHRpJiM0MzsmIzQzOztcbiBcbiBcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0c2l6ZSA9IGJvb3RtZW1fc2l6ZV9nbG9iYWw7XG4mIzQzO1x0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpO1xuIFx0aWYgKCFhZGRyKSB7XG4tXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgc2NyYXRjaCBidWZmZXJcXG5cJiMzNDspO1xuLVx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIGJvb3RtZW1cXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9ib290bWVtX2FyZWFzO1xuIFx0fVxuIFxuLVx0a2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7XG4tXHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcbiYjNDM7XHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcbiYjNDM7XHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcbiBcdGkmIzQzOyYjNDM7O1xuIFxuIFx0LypcbiBcdCAqIExvb3Agb3ZlciBub2RlcyB0aGF0IGhhdmUgYm90aCBtZW1vcnkgYW5kIGFyZSBvbmxpbmUuIFNraXBcbi1cdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbiYjNDM7XHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIGJvb3RtZW0gYXJlYXMgdGhlcmUuXG4gXHQgKi9cbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuLVx0XHRzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcbi1cdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiYjNDM7XHRcdHNpemUgPSBib290bWVtX3NpemVfbm9kZShuaWQpO1xuJiM0MztcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuLVx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgc2NyYXRjaCBidWZmZXJcXG5cJiMzNDssIG5pZCk7XG4tXHRcdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgbmlkICVkIGJvb3RtZW1cXG5cJiMzNDssIG5pZCk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcbiBcdFx0fVxuIFxuLVx0XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbi1cdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcbiYjNDM7XHRcdGtob19ib290bWVtW2ldLnNpemUgPSBzaXplO1xuIFx0XHRpJiM0MzsmIzQzOztcbiBcdH1cbiBcbiBcdHJldHVybjtcbiBcbi1lcnJfZnJlZV9zY3JhdGNoX2FyZWFzOlxuJiM0MztlcnJfZnJlZV9ib290bWVtX2FyZWFzOlxuIFx0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pXG4tXHRcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fc2NyYXRjaFtpXS5hZGRyLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcbi1lcnJfZnJlZV9zY3JhdGNoX2Rlc2M6XG4tXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XG4mIzQzO1x0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX2Jvb3RtZW1baV0uYWRkciwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XG4mIzQzO2Vycl9mcmVlX2Jvb3RtZW1fZGVzYzpcbiYjNDM7XHRtZW1ibG9ja19mcmVlKGtob19ib290bWVtLCBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKSk7XG4gZXJyX2Rpc2FibGVfa2hvOlxuLVx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFyZWEsIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBib290bWVtLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXG5cJiMzNDspO1xuIFx0a2hvX2VuYWJsZSA9IGZhbHNlO1xuIH1cbiBcbkBAIC05MTEsMTEgJiM0Mzs5MTEsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiAgKiBvbiBzbWFsbGVyIHN5c3RlbXMuIFRoZSBhbGdvcml0aG0gaXRzZWxmIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHZhbHVlLFxuICAqIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgZGlmZmVyZW50IGhldXJpc3RpYyBsYXRlciBpZiBuZWVkZWQuXG4gICovXG4tI2RlZmluZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRVx0XHRTWl8xR1xuLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUXHRjb25zdF9pbG9nMihLSE9fU0NSQVRDSF9FWFRfQkxLU0laRSlcbiYjNDM7I2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0laRVx0XHRTWl8xR1xuJiM0MzsjZGVmaW5lIEtIT19ESVNDT1ZFUl9CTEtTSElGVFx0Y29uc3RfaWxvZzIoS0hPX0RJU0NPVkVSX0JMS1NJWkUpXG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gKi9cbi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcbiBcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XG5AQCAtOTMwLDU0ICYjNDM7OTMwLDU3IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19leHRfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuIFx0ZW5kID0gc3RhcnQgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKG9yZGVyICYjNDM7IFBBR0VfU0hJRlQpKTtcbiBcbiBcdHdoaWxlIChzdGFydCBcdTAwM2MgZW5kKSB7XG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCBcdTAwM2VcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbiYjNDM7XHRcdGVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCBcdTAwM2VcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRzdGFydCAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbiYjNDM7XHRcdHN0YXJ0ICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBLSE9fRElTQ09WRVJfQkxLU0hJRlQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXG4tc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSlcbiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX3dhbGtfbm9kZShwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqYnVzeV9ibG9ja3MgPSBkYXRhO1xuIFxuLVx0cmV0dXJuIGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBwaHlzIFx1MDAzZVx1MDAzZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQpO1xuJiM0MztcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcdTAwM2VcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiB9XG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgYnVzeSBibG9jayByYWRpeCB0cmVlLiAqL1xuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuJiM0MztzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfbWFya19ub3Byc3J2KHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuIHtcbiBcdHBoeXNfYWRkcl90ICpwcmV2X2VuZCA9IGRhdGE7XG4tXHRwaHlzX2FkZHJfdCBzdGFydCA9IGtleSBcdTAwM2NcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUO1xuJiM0MztcdHBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5IFx1MDAzY1x1MDAzYyBLSE9fRElTQ09WRVJfQkxLU0hJRlQ7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKHN0YXJ0IFx1MDAzZSAqcHJldl9lbmQpIHtcbi1cdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgqcHJldl9lbmQsIHN0YXJ0IC0gKnByZXZfZW5kKTtcbiYjNDM7XHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdCpwcmV2X2VuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7XG4mIzQzO1x0KnByZXZfZW5kID0gc3RhcnQgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuLSAqIGtob19leHRlbmRfc2NyYXRjaCAtIEV4dGVuZCB0aGUgc2NyYXRjaCByZWdpb25zXG4mIzQzOyAqIGtob19kaXNjb3Zlcl9ub3Byc3J2IC0gRGlzY292ZXIgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9uc1xuJiM0MzsgKlxuJiM0MzsgKiBEaXNjb3ZlcnMgbWVtb3J5IHJhbmdlcyB3aXRoIG5vIHByZXNlcnZlZCBtZW1vcnkgYW5kIG1hcmtzIGl0IGFzIE5PUFJTUlYuXG4mIzQzOyAqIFRoaXMgbGV0cyBtZW1ibG9jayBhbGxvY2F0ZSBtZW1vcnkgZnJvbSBhcmVhcyBvdXRzaWRlIEtITyBib290bWVtLlxuICAqXG4gICogVGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUgbWl4ZXMgYm90aCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlclxuICAqIGludG8gYSBzaW5nbGUga2V5LiBUaGlzIG1ha2VzIGl0IGhhcmQgdG8gbG9vayBmb3IgZnJlZSByYW5nZXMgZGlyZWN0bHkuIFRoaXNcbiAgKiBmdW5jdGlvbiBmaXJzdCB3YWxrcyB0aGUgcmFkaXggdHJlZSBhbmQgZGlnZXN0cyBpdCBkb3duIGludG8gYW5vdGhlciByYWRpeFxuLSAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkUgd2hpY2hcbi0gKiBjb250YWluIHByZXNlcnZlZCBtZW1vcnkuXG4mIzQzOyAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX0RJU0NPVkVSX0JMS1NJWkUgd2hpY2ggY29udGFpblxuJiM0MzsgKiBwcmVzZXJ2ZWQgbWVtb3J5LlxuICAqXG4gICogVGhlbiBpdCB3YWxrcyB0aGUgZGlnZXN0ZWQgcmFkaXggdHJlZSBhbmQgbWFya3MgZXZlcnl0aGluZyB0aGF0IGRvZXNuJiMzOTt0IGhhdmVcbi0gKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIHNjcmF0Y2guXG4mIzQzOyAqIHByZXNlcnZlZCBtZW1vcnkgYXMgTk9QUlNSVi5cbiAgKlxuLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gc2NyYXRjaCBoYXNcbiYjNDM7ICogTk9URTogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBib290bWVtIGhhc1xuICAqIGF2YWlsYWJsZSBzcGFjZS5cbiAgKlxuICAqIE5PVEU6IFRoZSBwYWdlcyBvZiB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZSB0YWJsZXMgYXJlIG5vdCBtYXJrZWRcbkBAIC05ODYsMTggJiM0Mzs5ODksMTggQEAgc3RhdGljIGludCBfX2luaXQga2hvX2V4dF9tYXJrX3NjcmF0Y2godW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4gICogdGhlbSB0byBiZSBcJiMzNDtwcmVzZXJ2ZWQgbWVtb3J5XCYjMzQ7IGFuZCBtYXJrcyB0aGVpciBibG9ja3MgYXMgYnVzeS5cbiAgKlxuICAqIE5PVEU6IGVmaV9pbml0KCk6OnJlc2VydmVfcmVnaW9ucygpIHJlbW92ZXMgYWxsIHJlZ2lvbnMgZXhjZXB0XG4tICogTUVNQkxPQ0tfS0hPX1NDUkFUQ0guIFRoaXMgZnVuY3Rpb24gYWRkcyBzdWNoIHJlZ2lvbnMgYnV0IHRoZXkgYXJlIG5vdCBLSE9cbi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxuJiM0MzsgKiBNRU1CTE9DS19LSE9fTk9QUlNSVi4gVGhpcyBmdW5jdGlvbiBhZGRzIHN1Y2ggcmVnaW9ucyBidXQgdGhleSBhcmUgbm90IEtIT1xuJiM0MzsgKiBib290IG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxuICAqIGNhbGxlZCBhZnRlciByZXNlcnZlX3JlZ2lvbnMoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2V4dGVuZF9zY3JhdGNoKHZvaWQpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7XG4tXHRcdC5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsXG4tXHRcdC5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsXG4mIzQzO1x0XHQubGVhZiA9IGtob19kaXNjb3Zlcl93YWxrX2xlYWYsXG4mIzQzO1x0XHQubm9kZSA9IGtob19kaXNjb3Zlcl93YWxrX25vZGUsXG4gXHR9O1xuIFx0Y29uc3Qgc3RydWN0IGtob19yYWRpeF93YWxrX2NiIGV4dF9jYiA9IHtcbi1cdFx0LmxlYWYgPSBraG9fZXh0X21hcmtfc2NyYXRjaCxcbiYjNDM7XHRcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX21hcmtfbm9wcnNydixcbiBcdH07XG4gXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1c3lfcmFkaXhfY2xhc3M7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgYnVzeV9ibG9ja3M7XG5AQCAtMTAyMiwyMSAmIzQzOzEwMjUsMjEgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBzY3JhdGNoLiAqL1xuJiM0MztcdC8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIG5vcHJzcnYuICovXG4gXHRlcnIgPSBraG9fcmFkaXhfd2Fsa190cmVlKFx1MDAyNmJ1c3lfYmxvY2tzLCBcdTAwMjZleHRfY2IsIFx1MDAyNnByZXZfZW5kKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogTWFyayBldmVyeXRoaW5nIGZyb20gbGFzdCBidXN5IGJsb2NrIHRvIGVuZCBvZiBEUkFNLiAqL1xuIFx0aWYgKHByZXZfZW5kIFx1MDAzYyBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpKVxuLVx0XHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHByZXZfZW5kLCBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gcHJldl9lbmQpO1xuJiM0MztcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTtcbiBcbiBcdC8qIGZhbGx0aHJvdWdoICovXG4gb3V0OlxuIFx0a2hvX3JhZGl4X2Rlc3Ryb3lfdHJlZShcdTAwMjZidXN5X2Jsb2Nrcyk7XG4gcHJpbnQ6XG4gXHRpZiAoZXJyKVxuLVx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGV4dGVuZCBzY3JhdGNoOiAlcGVcXG5cJiMzNDssIEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGRpc2NvdmVyIGV4dHJhIGFsbG9jYXRhYmxlIG1lbW9yeTogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKGVycikpO1xuIH1cbiBcbiAvKipcbkBAIC0xMTUwLDcgJiM0MzsxMTUzLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Y29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4mIzQzO1x0ICAgIFdBUk5fT04oa2hvX2Jvb3RtZW1fb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkodHJlZSwga2hvX2VuY29kZV9yYWRpeF9rZXkoUEZOX1BIWVMocGZuKSxcbkBAIC0xMjI4LDcgJiM0MzsxMjMxLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuJiM0MztcdCAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKSB7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE4MjUsNyAmIzQzOzE4MjgsNyBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFxuIFx0ZXJyID0ga2hvX3JhZGl4X2luaXRfdHJlZSh0cmVlLCBOVUxMKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaDtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbTtcbiBcbiBcdGtob19vdXQuZmR0ID0ga2hvX2FsbG9jX3ByZXNlcnZlKFBBR0VfU0laRSk7XG4gXHRpZiAoSVNfRVJSKGtob19vdXQuZmR0KSkge1xuQEAgLTE4NTQsOSAmIzQzOzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fc2NyYXRjaFtpXS5hZGRyKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IGtob19zY3JhdGNoW2ldLnNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fYm9vdG1lbVtpXS5hZGRyKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fYm9vdG1lbVtpXS5zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHR1bnNpZ25lZCBsb25nIHBmbjtcbiBcbiBcdFx0LypcbkBAIC0xODY0LDEwICYjNDM7MTg2NywxMCBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFx0XHQgKiBjb3JyZXNwb25kaW5nIFBSRVNFTlQgYml0IGluIHRoZSBrZXJuZWwgcGFnZSB0YWJsZS5cbiBcdFx0ICogU3Vic2VxdWVudCBrbWVtbGVhayBzY2FucyBvZiB0aGVzZSBwYWdlcyBjYXVzZSB0aGVcbiBcdFx0ICogbm9uLVBSRVNFTlQgcGFnZSBmYXVsdHMuXG4tXHRcdCAqIE1hcmsgc2NyYXRjaCBhcmVhcyB3aXRoIGttZW1sZWFrX2lnbm9yZV9waHlzKCkgdG8gZXhjbHVkZVxuJiM0MztcdFx0ICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlXG4gXHRcdCAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy5cbiBcdFx0ICovXG4tXHRcdGttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpO1xuJiM0MztcdFx0a21lbWxlYWtfaWdub3JlX3BoeXMoa2hvX2Jvb3RtZW1baV0uYWRkcik7XG4gXHRcdGZvciAocGZuID0gYmFzZV9wZm47IHBmbiBcdTAwM2MgYmFzZV9wZm4gJiM0MzsgY291bnQ7XG4gXHRcdCAgICAgcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpXG4gXHRcdFx0aW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHBmbl90b19wYWdlKHBmbikpO1xuQEAgLTE4ODMsMTEgJiM0MzsxODg2LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpXG4gXHRraG9fdW5wcmVzZXJ2ZV9mcmVlKGtob19vdXQuZmR0KTtcbiBlcnJfZnJlZV9raG9fcmFkaXhfdHJlZTpcbiBcdGtob19yYWRpeF9kZXN0cm95X3RyZWUodHJlZSk7XG4tZXJyX2ZyZWVfc2NyYXRjaDpcbiYjNDM7ZXJyX2ZyZWVfYm9vdG1lbTpcbiBcdGtob19vdXQuZmR0ID0gTlVMTDtcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHZvaWQgKnN0YXJ0ID0gX192YShraG9fc2NyYXRjaFtpXS5hZGRyKTtcbi1cdFx0dm9pZCAqZW5kID0gc3RhcnQgJiM0Mzsga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpO1xuJiM0MztcdFx0dm9pZCAqZW5kID0gc3RhcnQgJiM0Mzsga2hvX2Jvb3RtZW1baV0uc2l6ZTtcbiBcbiBcdFx0ZnJlZV9yZXNlcnZlZF9hcmVhKHN0YXJ0LCBlbmQsIC0xLCBcJiMzNDtcJiMzNDspO1xuIFx0fVxuQEAgLTE5MDYsNyAmIzQzOzE5MDksNyBAQCB2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZClcbiBcbiBcdC8qXG4gXHQgKiBraG9fZ2V0X21lbV9tYXAoKSBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuIElmIGl0IGZhaWxzLCBraG9fcG9wdWxhdGUoKVxuLVx0ICogY2F0Y2hlcyB0aGF0IGFuZCBuZXZlciBzZXRzIGtob19pbi5zY3JhdGNoX3BoeXMsIHdoaWNoIHN0b3BzIG1lbW9yeVxuJiM0MztcdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uYm9vdG1lbV9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcbiBcdCAqIHJldHJpZXZhbC5cbiBcdCAqL1xuIFx0bWVtX21hcCA9IGtob19nZXRfbWVtX21hcChmZHQpO1xuQEAgLTE5MTQsNDEgJiM0MzsxOTE3LDQwIEBAIHZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qXG4tXHQgKiBraG9fc2NyYXRjaF9vdmVybGFwKCkgbmVlZHMga2hvX3NjcmF0Y2ggdG8gYmUgaW5pdGlhbGl6ZWQuIEl0XG4tXHQgKiBpcyB1c2VkIGJ5IGZyZWVfYXJlYV9pbml0KCkgb24gS0hPIGJvb3RzLCBzbyBpbml0aWFsaXplIGl0XG4tXHQgKiBlYXJseS5cbiYjNDM7XHQgKiBraG9fYm9vdG1lbV9vdmVybGFwKCkgbmVlZHMga2hvX2Jvb3RtZW0gdG8gYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIHVzZWRcbiYjNDM7XHQgKiBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdCBlYXJseS5cbiBcdCAqL1xuLVx0a2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7XG4mIzQzO1x0a2hvX2Jvb3RtZW0gPSBwaHlzX3RvX3ZpcnQoa2hvX2luLmJvb3RtZW1fcGh5cyk7XG4gXG4gXHRpZiAoa2hvX3JhZGl4X2luaXRfdHJlZShcdTAwMjZraG9faW4ucmFkaXhfdHJlZSwgbWVtX21hcCkpXG4gXHRcdGdvdG8gZXJyO1xuIFxuLVx0a2hvX2V4dGVuZF9zY3JhdGNoKCk7XG4mIzQzO1x0a2hvX2Rpc2NvdmVyX25vcHJzcnYoKTtcbiBcbiBcdHJldHVybjtcbiBcbiBlcnI6XG4gXHQvKlxuIFx0ICogRmFpbGVkIHRvIGluaXRpYWxpemUgcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlLiBDbGVhciBGRFRcbi1cdCAqIGFuZCBzY3JhdGNoIHNvIEtITyB1c2VycyBkb24mIzM5O3QgdHJlYXQgaXQgYXMgYSBLSE8gYm9vdC5cbiYjNDM7XHQgKiBhbmQgYm9vdG1lbSBzbyBLSE8gdXNlcnMgZG9uJiMzOTt0IHRyZWF0IGl0IGFzIGEgS0hPIGJvb3QuXG4gXHQgKi9cbiBcdGtob19pbi5mZHRfcGh5cyA9IDA7XG4tXHRraG9faW4uc2NyYXRjaF9waHlzID0gMDtcbiYjNDM7XHRraG9faW4uYm9vdG1lbV9waHlzID0gMDtcbiB9XG4gXG4gdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXG4ge1xuLVx0aWYgKGtob19pbi5zY3JhdGNoX3BoeXMpXG4mIzQzO1x0aWYgKGtob19pbi5ib290bWVtX3BoeXMpXG4gXHRcdGtob19tZW1fcmV0cmlldmUoKTtcbiBcdGVsc2Vcbi1cdFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xuJiM0MztcdFx0a2hvX3Jlc2VydmVfYm9vdG1lbSgpO1xuIH1cbiBcbiB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxuLVx0XHRcdCBwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcbiYjNDM7XHRcdFx0IHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywgdTY0IGJvb3RtZW1fbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4tXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xuJiM0MztcdHVuc2lnbmVkIGludCBib290bWVtX2NudCA9IGJvb3RtZW1fbGVuIC8gc2l6ZW9mKCpraG9fYm9vdG1lbSk7XG4mIzQzO1x0c3RydWN0IGtob19ib290bWVtICpib290bWVtID0gTlVMTDtcbiBcdHBoeXNfYWRkcl90IG1lbV9tYXBfcGh5cztcbiBcdHZvaWQgKmZkdCA9IE5VTEw7XG4gXHRib29sIHBvcHVsYXRlZCA9IGZhbHNlO1xuQEAgLTE5NzcsNTIgJiM0MzsxOTc5LDUyIEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4gXHRpZiAoIW1lbV9tYXBfcGh5cylcbiBcdFx0Z290byB1bm1hcF9mZHQ7XG4gXG4tXHRzY3JhdGNoID0gZWFybHlfbWVtcmVtYXAoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4tXHRpZiAoIXNjcmF0Y2gpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtzZXR1cDogZmFpbGVkIHRvIG1lbXJlbWFwIHNjcmF0Y2ggKHBoeXM9MHglbGx4LCBsZW49JWxsZClcXG5cJiMzNDssXG4tXHRcdFx0c2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4mIzQzO1x0Ym9vdG1lbSA9IGVhcmx5X21lbXJlbWFwKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuJiM0MztcdGlmICghYm9vdG1lbSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtzZXR1cDogZmFpbGVkIHRvIG1lbXJlbWFwIGJvb3RtZW0gKHBoeXM9MHglbGx4LCBsZW49JWxsZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuIFx0XHRnb3RvIHVubWFwX2ZkdDtcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBXZSBwYXNzIGEgc2FmZSBjb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgdG8gdXNlIGZvciBlYXJseSBib290XG4tXHQgKiBwdXJwb3JzZXMgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsIHNvIHRoYXQgd2UgY2FuIHJlc2l6ZSB0aGVcbi1cdCAqIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cbiYjNDM7XHQgKiBXZSBwYXNzIGEgc2FmZSBjb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zIHRvXG4mIzQzO1x0ICogdXNlIGZvciBlYXJseSBib290IHB1cnBvcnNlcyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgc28gdGhhdCB3ZSBjYW5cbiYjNDM7XHQgKiByZXNpemUgdGhlIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cbiBcdCAqL1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmFyZWEgPSBcdTAwMjZzY3JhdGNoW2ldO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBraG9fYm9vdG1lbSAqYXJlYSA9IFx1MDAyNmJvb3RtZW1baV07XG4gXHRcdHU2NCBzaXplID0gYXJlYS1cdTAwM2VzaXplO1xuIFxuIFx0XHRtZW1ibG9ja19hZGQoYXJlYS1cdTAwM2VhZGRyLCBzaXplKTtcbi1cdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xuJiM0MztcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gbWFyayB0aGUgc2NyYXRjaCByZWdpb24gMHglcGEmIzQzOzB4JXBhOiAlcGVcJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIG1hcmsgdGhlIGJvb3RtZW0gcmVnaW9uIDB4JXBhJiM0MzsweCVwYTogJXBlXCYjMzQ7LFxuIFx0XHRcdFx0XHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplLCBFUlJfUFRSKGVycikpO1xuLVx0XHRcdGdvdG8gdW5tYXBfc2NyYXRjaDtcbiYjNDM7XHRcdFx0Z290byB1bm1hcF9ib290bWVtO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgc2NyYXRjaFwmIzM0OywgXHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplKTtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgYm9vdG1lbVwmIzM0OywgXHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplKTtcbiBcdH1cbiBcbi1cdG1lbWJsb2NrX3Jlc2VydmUoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4mIzQzO1x0bWVtYmxvY2tfcmVzZXJ2ZShib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcbiBcbiBcdC8qXG4tXHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGEgdmlhYmxlIHJlZ2lvbiBvZiBzY3JhdGNoIG1lbW9yeSwgbGV0JiMzOTtzIHRlbGxcbiYjNDM7XHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGEgdmlhYmxlIHJlZ2lvbiBvZiBib290IG1lbW9yeSwgbGV0JiMzOTtzIHRlbGxcbiBcdCAqIHRoZSBtZW1ibG9ja3MgYWxsb2NhdG9yIHRvIG9ubHkgdXNlIHRoYXQgZm9yIGFueSBhbGxvY2F0aW9ucy5cbiBcdCAqIFRoYXQgd2F5IHdlIGVuc3VyZSB0aGF0IG5vdGhpbmcgc2NyaWJibGVzIG92ZXIgaW4gdXNlIGRhdGEgd2hpbGVcbiBcdCAqIHdlIGluaXRpYWxpemUgdGhlIHBhZ2UgdGFibGVzIHdoaWNoIHdlIHdpbGwgbmVlZCB0byBpbmdlc3QgYWxsXG4gXHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC5cbiBcdCAqL1xuLVx0bWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkoKTtcbiYjNDM7XHRtZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSgpO1xuIFxuIFx0a2hvX2luLmZkdF9waHlzID0gZmR0X3BoeXM7XG4tXHRraG9faW4uc2NyYXRjaF9waHlzID0gc2NyYXRjaF9waHlzO1xuLVx0a2hvX3NjcmF0Y2hfY250ID0gc2NyYXRjaF9jbnQ7XG4mIzQzO1x0a2hvX2luLmJvb3RtZW1fcGh5cyA9IGJvb3RtZW1fcGh5cztcbiYjNDM7XHRraG9fYm9vdG1lbV9jbnQgPSBib290bWVtX2NudDtcbiBcbiBcdHBvcHVsYXRlZCA9IHRydWU7XG4gXHRwcl9pbmZvKFwmIzM0O2ZvdW5kIGtleGVjIGhhbmRvdmVyIGRhdGEuXFxuXCYjMzQ7KTtcbiBcbi11bm1hcF9zY3JhdGNoOlxuLVx0ZWFybHlfbWVtdW5tYXAoc2NyYXRjaCwgc2NyYXRjaF9sZW4pO1xuJiM0Mzt1bm1hcF9ib290bWVtOlxuJiM0MztcdGVhcmx5X21lbXVubWFwKGJvb3RtZW0sIGJvb3RtZW1fbGVuKTtcbiB1bm1hcF9mZHQ6XG4gXHRlYXJseV9tZW11bm1hcChmZHQsIGZkdF9sZW4pO1xuIHJlcG9ydDpcbkBAIC0yMDM0LDQ3ICYjNDM7MjAzNiw0NyBAQCB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxuIFxuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4ge1xuLVx0c3NpemVfdCBzY3JhdGNoX3NpemU7XG4mIzQzO1x0c3NpemVfdCBib290bWVtX3NpemU7XG4gXHRpbnQgZXJyID0gMDtcbi1cdHN0cnVjdCBrZXhlY19idWYgc2NyYXRjaDtcbiYjNDM7XHRzdHJ1Y3Qga2V4ZWNfYnVmIGJvb3RtZW07XG4gXG4gXHRpZiAoIWtob19lbmFibGUgfHwgaW1hZ2UtXHUwMDNldHlwZSA9PSBLRVhFQ19UWVBFX0NSQVNIKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGltYWdlLVx1MDAzZWtoby5mZHQgPSB2aXJ0X3RvX3BoeXMoa2hvX291dC5mZHQpO1xuIFxuLVx0c2NyYXRjaF9zaXplID0gc2l6ZW9mKCpraG9fc2NyYXRjaCkgKiBraG9fc2NyYXRjaF9jbnQ7XG4tXHRzY3JhdGNoID0gKHN0cnVjdCBrZXhlY19idWYpe1xuJiM0MztcdGJvb3RtZW1fc2l6ZSA9IHNpemVvZigqa2hvX2Jvb3RtZW0pICoga2hvX2Jvb3RtZW1fY250O1xuJiM0MztcdGJvb3RtZW0gPSAoc3RydWN0IGtleGVjX2J1Zil7XG4gXHRcdC5pbWFnZSA9IGltYWdlLFxuLVx0XHQuYnVmZmVyID0ga2hvX3NjcmF0Y2gsXG4tXHRcdC5idWZzeiA9IHNjcmF0Y2hfc2l6ZSxcbiYjNDM7XHRcdC5idWZmZXIgPSBraG9fYm9vdG1lbSxcbiYjNDM7XHRcdC5idWZzeiA9IGJvb3RtZW1fc2l6ZSxcbiBcdFx0Lm1lbSA9IEtFWEVDX0JVRl9NRU1fVU5LTk9XTixcbi1cdFx0Lm1lbXN6ID0gc2NyYXRjaF9zaXplLFxuJiM0MztcdFx0Lm1lbXN6ID0gYm9vdG1lbV9zaXplLFxuIFx0XHQuYnVmX2FsaWduID0gU1pfNjRLLCAvKiBNYWtlcyBpdCBlYXNpZXIgdG8gbWFwICovXG4gXHRcdC5idWZfbWF4ID0gVUxPTkdfTUFYLFxuIFx0XHQudG9wX2Rvd24gPSB0cnVlLFxuIFx0fTtcbi1cdGVyciA9IGtleGVjX2FkZF9idWZmZXIoXHUwMDI2c2NyYXRjaCk7XG4mIzQzO1x0ZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcihcdTAwMjZib290bWVtKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpbWFnZS1cdTAwM2VraG8uc2NyYXRjaCA9IFx1MDAyNmltYWdlLVx1MDAzZXNlZ21lbnRbaW1hZ2UtXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcbiYjNDM7XHRpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSA9IFx1MDAyNmltYWdlLVx1MDAzZXNlZ21lbnRbaW1hZ2UtXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiYjNDM7c3RhdGljIGludCBraG9fd2Fsa19ib290bWVtKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xuLVx0XHRcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXG4tXHRcdFx0LmVuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgJiM0Mzsga2hvX3NjcmF0Y2hbaV0uc2l6ZSAtIDEsXG4mIzQzO1x0XHRcdC5zdGFydCA9IGtob19ib290bWVtW2ldLmFkZHIsXG4mIzQzO1x0XHRcdC5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICYjNDM7IGtob19ib290bWVtW2ldLnNpemUgLSAxLFxuIFx0XHR9O1xuIFxuLVx0XHQvKiBUcnkgdG8gZml0IHRoZSBraW1hZ2UgaW50byBvdXIgS0hPIHNjcmF0Y2ggcmVnaW9uICovXG4mIzQzO1x0XHQvKiBUcnkgdG8gZml0IHRoZSBraW1hZ2UgaW50byBvdXIgS0hPIGJvb3RtZW0gcmVnaW9uICovXG4gXHRcdHJldCA9IGZ1bmMoXHUwMDI2cmVzLCBrYnVmKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbkBAIC0yMDkxLDcgJiM0MzsyMDkzLDcgQEAgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdGlmICgha2hvX2VuYWJsZSB8fCBrYnVmLVx1MDAzZWltYWdlLVx1MDAzZXR5cGUgPT0gS0VYRUNfVFlQRV9DUkFTSClcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRyZXQgPSBraG9fd2Fsa19zY3JhdGNoKGtidWYsIGZ1bmMpO1xuJiM0MztcdHJldCA9IGtob193YWxrX2Jvb3RtZW0oa2J1ZiwgZnVuYyk7XG4gXG4gXHRyZXR1cm4gcmV0ID09IDEgPyAwIDogLUVBRERSTk9UQVZBSUw7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuY1xuaW5kZXggMjU3ZWU4YTUyYmU2Ni4uN2Q3NDQ3N2RhMGI3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXG5AQCAtNzcsMjMgJiM0Mzs3NywyMyBAQCB2b2lkIGtob19kZWJ1Z2ZzX2Jsb2JfcmVtb3ZlKHN0cnVjdCBraG9fZGVidWdmcyAqZGJnLCB2b2lkICpibG9iKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IHNjcmF0Y2hfcGh5c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjNDM7c3RhdGljIGludCBib290bWVtX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspXG4tXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7LCBraG9fc2NyYXRjaFtpXS5hZGRyKTtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7LCBraG9fYm9vdG1lbVtpXS5hZGRyKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbi1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9waHlzKTtcbiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGJvb3RtZW1fcGh5cyk7XG4gXG4tc3RhdGljIGludCBzY3JhdGNoX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjNDM7c3RhdGljIGludCBib290bWVtX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOylcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVsbHhcXG5cJiMzNDssIGtob19zY3JhdGNoW2ldLnNpemUpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVsbHhcXG5cJiMzNDssIGtob19ib290bWVtW2ldLnNpemUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLURFRklORV9TSE9XX0FUVFJJQlVURShzY3JhdGNoX2xlbik7XG4mIzQzO0RFRklORV9TSE9XX0FUVFJJQlVURShib290bWVtX2xlbik7XG4gXG4gX19pbml0IHZvaWQga2hvX2luX2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZywgY29uc3Qgdm9pZCAqZmR0KVxuIHtcbkBAIC0xODYsMTMgJiM0MzsxODYsMTMgQEAgX19pbml0IGludCBraG9fb3V0X2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZylcbiBcdGlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbi1cdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NjcmF0Y2hfcGh5c1wmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdFx0XHUwMDI2c2NyYXRjaF9waHlzX2ZvcHMpO1xuJiM0MztcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2Jvb3RtZW1fcGh5c1wmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx1MDAyNmJvb3RtZW1fcGh5c19mb3BzKTtcbiBcdGlmIChJU19FUlIoZikpXG4gXHRcdGdvdG8gZXJyX3JtZGlyO1xuIFxuLVx0ZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2NyYXRjaF9sZW5cJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbi1cdFx0XHRcdFx1MDAyNnNjcmF0Y2hfbGVuX2ZvcHMpO1xuJiM0MztcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2Jvb3RtZW1fbGVuXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHUwMDI2Ym9vdG1lbV9sZW5fZm9wcyk7XG4gXHRpZiAoSVNfRVJSKGYpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFxuaW5kZXggODA1ZDJhNzZjMzg4MS4uZTk2ODVlMWVmNmQ3OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbkBAIC0xOSw4ICYjNDM7MTksOCBAQCBzdHJ1Y3Qga2hvX2RlYnVnZnMge1xuIHN0cnVjdCBraG9fZGVidWdmcyB7fTtcbiAjZW5kaWZcbiBcbi1leHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbi1leHRlcm4gdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBraG9fYm9vdG1lbSAqa2hvX2Jvb3RtZW07XG4mIzQzO2V4dGVybiB1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xuIGludCBraG9fZGVidWdmc19pbml0KHZvaWQpO1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li41NDE1ZTBiMzhiNWQ1IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZ1xuQEAgLTQ4NSwxMCAmIzQzOzQ4NSw2IEBAIGNvbmZpZyBIQVZFX0dVUF9GQVNUXG4gXHRkZXBlbmRzIG9uIE1NVVxuIFx0Ym9vbFxuIFxuLSMgRW5hYmxlIG1lbWJsb2NrIHN1cHBvcnQgZm9yIHNjcmF0Y2ggbWVtb3J5IHdoaWNoIGlzIG5lZWRlZCBmb3Iga2V4ZWMgaGFuZG92ZXJcbi1jb25maWcgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbi1cdGJvb2xcbi1cbiAjIERvbiYjMzk7dCBkaXNjYXJkIGFsbG9jYXRlZCBtZW1vcnkgdXNlZCB0byB0cmFjayBcJiMzNDttZW1vcnlcJiMzNDsgYW5kIFwmIzM0O3Jlc2VydmVkXCYjMzQ7IG1lbWJsb2Nrc1xuICMgYWZ0ZXIgZWFybHkgYm9vdCwgc28gaXQgY2FuIHN0aWxsIGJlIHVzZWQgdG8gdGVzdCBmb3IgdmFsaWRpdHkgb2YgbWVtb3J5LlxuICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCAzN2UwNmU3MGMxZDAwLi4wMzUxOTEzY2U3OWIwIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTExMiwxMSAmIzQzOzExMiwxMSBAQCB1bnNpZ25lZCBsb25nIG1pbl9sb3dfcGZuO1xuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjtcbiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcbiBcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXG4tLyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19TQ1JBVENIIHJhbmdlcyAqL1xuLXN0YXRpYyBib29sIGtob19zY3JhdGNoX29ubHk7XG4mIzQzOyNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbiYjNDM7LyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19OT1BSU1JWIHJhbmdlcyAqL1xuJiM0MztzdGF0aWMgYm9vbCBraG9fbm9wcnNydl9vbmx5O1xuICNlbHNlXG4tI2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXG4mIzQzOyNkZWZpbmUga2hvX25vcHJzcnZfb25seSBmYWxzZVxuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIG1lbWJsb2NrX21lbW9yeV9pbml0X3JlZ2lvbnNbSU5JVF9NRU1CTE9DS19NRU1PUllfUkVHSU9OU10gX19pbml0ZGF0YV9tZW1ibG9jaztcbkBAIC0xNzgsOSAmIzQzOzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZClcbiBcbiBzdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXG4ge1xuLVx0Lyogc2tpcCBub24tc2NyYXRjaCBtZW1vcnkgZm9yIGtobyBlYXJseSBib290IGFsbG9jYXRpb25zICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb25seSlcbi1cdFx0cmV0dXJuIE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuJiM0MztcdC8qIG9ubHkgdXNlIEtIT19OT1BSU1JWIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cbiYjNDM7XHRpZiAoa2hvX25vcHJzcnZfb25seSlcbiYjNDM7XHRcdHJldHVybiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiBcbiBcdHJldHVybiBzeXN0ZW1faGFzX3NvbWVfbWlycm9yID8gTUVNQkxPQ0tfTUlSUk9SIDogTUVNQkxPQ0tfTk9ORTtcbiB9XG5AQCAtMTE3NCwzMyAmIzQzOzExNzQsMzMgQEAgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2lcbiB9XG4gXG4gLyoqXG4tICogbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19TQ1JBVENILlxuJiM0MzsgKiBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2IC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX05PUFJTUlYuXG4gICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cbiAgKlxuLSAqIE9ubHkgbWVtb3J5IHJlZ2lvbnMgbWFya2VkIHdpdGggJU1FTUJMT0NLX0tIT19TQ1JBVENIIHdpbGwgYmUgY29uc2lkZXJlZFxuJiM0MzsgKiBPbmx5IG1lbW9yeSByZWdpb25zIG1hcmtlZCB3aXRoICVNRU1CTE9DS19LSE9fTk9QUlNSViB3aWxsIGJlIGNvbnNpZGVyZWRcbiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7X19pbml0IGludCBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4ge1xuIFx0cmV0dXJuIG1lbWJsb2NrX3NldGNscl9mbGFnKFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwgMSxcbi1cdFx0XHRcdCAgICBNRU1CTE9DS19LSE9fU0NSQVRDSCk7XG4mIzQzO1x0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19OT1BSU1JWKTtcbiB9XG4gXG4gLyoqXG4tICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXG4mIzQzOyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYVxuICAqIHNwZWNpZmllZCByZWdpb24uXG4gICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4mIzQzO19faW5pdCBpbnQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gbWVtYmxvY2tfc2V0Y2xyX2ZsYWcoXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAwLFxuLVx0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19TQ1JBVENIKTtcbiYjNDM7XHRcdFx0XHQgICAgTUVNQkxPQ0tfS0hPX05PUFJTUlYpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBzaG91bGRfc2tpcF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG5AQCAtMTIzNiw5ICYjNDM7MTIzNiw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcbiBcdC8qXG4gXHQgKiBJbiBlYXJseSBhbGxvYyBkdXJpbmcga2V4ZWMgaGFuZG92ZXIsIHdlIGNhbiBvbmx5IGNvbnNpZGVyXG4tXHQgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcbiYjNDM7XHQgKiBNRU1CTE9DS19LSE9fTk9QUlNSViByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcbiBcdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpIFx1MDAyNlx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpXG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgTUVNQkxPQ0tfS0hPX05PUFJTUlYpIFx1MDAyNlx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX25vcHJzcnYobSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE3OTMsNyAmIzQzOzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4gXHRpZiAobnVtYV92YWxpZF9ub2RlKG5pZCkgXHUwMDI2XHUwMDI2ICFleGFjdF9uaWQpIHtcbiBcdFx0bmlkID0gTlVNQV9OT19OT0RFO1xuIFx0XHQvKlxuLVx0XHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIHNjcmF0Y2gsIGl0IHdvdWxkXG4mIzQzO1x0XHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIGJvb3RtZW0sIGl0IHdvdWxkXG4gXHRcdCAqIHVwZGF0ZSBzdGFydCBvciBlbmQuIE5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgb3BlbmluZyB0byBhbGxcbiBcdFx0ICogbm9kZXMsIHJlc2V0IHRoZW0uXG4gXHRcdCAqL1xuQEAgLTE4MDksMTIgJiM0MzsxODA5LDEyIEBAIHZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcbiBmb3VuZDpcbiBcdC8qXG4gXHQgKiBIdWdlVExCIHBhZ2VzIGNhbiBiZSBwcmVzZXJ2ZWQgd2l0aCBLSE8gYW5kIG5vIHByZXNlcnZlZCBtZW1vcnkgY2FuXG4tXHQgKiBiZSBpbiBzY3JhdGNoLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggc2NyYXRjaC5cbiYjNDM7XHQgKiBiZSBpbiBib290bWVtLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggYm9vdG1lbS5cbiBcdCAqXG4tXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJiMzOTt0IHRha2UgdG9vXG4mIzQzO1x0ICogQm9vdG1lbSBhcmVhcyBhcmUgbm9ybWFsbHkgbm90IHZlcnkgbGFyZ2UsIHNvIHRoaXMgc2hvdWxkbiYjMzk7dCB0YWtlIHRvb1xuIFx0ICogbWFueSByZXRyaWVzLlxuIFx0ICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChhZGRyLCBzaXplKSkge1xuJiM0MztcdGlmIChraG9fYm9vdG1lbV9vdmVybGFwKGFkZHIsIHNpemUpKSB7XG4gXHRcdGlmIChtZW1ibG9ja19ib3R0b21fdXAoKSlcbiBcdFx0XHRzdGFydCA9IGFkZHIgJiM0Mzsgc2l6ZTtcbiBcdFx0ZWxzZVxuQEAgLTI0OTksNyAmIzQzOzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKVxuIFx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG4gXHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xuIFxuLVx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xuJiM0MztcdG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkoKTtcbiBcdHBhZ2VzID0gZnJlZV9sb3dfbWVtb3J5X2NvcmVfZWFybHkoKTtcbiBcdHRvdGFscmFtX3BhZ2VzX2FkZChwYWdlcyk7XG4gfVxuQEAgLTI1OTcsMTUgJiM0MzsyNTk3LDE1IEBAIGludCByZXNlcnZlX21lbV9yZWxlYXNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSlcbiBcdHJldHVybiAxO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXG4tX19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZClcbiYjNDM7I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuJiM0MztfX2luaXQgdm9pZCBtZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSh2b2lkKVxuIHtcbi1cdGtob19zY3JhdGNoX29ubHkgPSB0cnVlO1xuJiM0MztcdGtob19ub3Byc3J2X29ubHkgPSB0cnVlO1xuIH1cbiBcbi1fX2luaXQgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXG4mIzQzO19faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkodm9pZClcbiB7XG4tXHRraG9fc2NyYXRjaF9vbmx5ID0gZmFsc2U7XG4mIzQzO1x0a2hvX25vcHJzcnZfb25seSA9IGZhbHNlO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0yODYxLDcgJiM0MzsyODYxLDcgQEAgc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9tZW0oY2hhciAqcClcbiBcdGlmIChyZXNlcnZlX21lbV9raG9fcmV2aXZlKG5hbWUsIHNpemUsIGFsaWduKSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHQvKiBUT0RPOiBBbGxvY2F0aW9uIG11c3QgYmUgb3V0c2lkZSBvZiBzY3JhdGNoIHJlZ2lvbiAqL1xuJiM0MztcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqL1xuIFx0c3RhcnQgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIGFsaWduKTtcbiBcdGlmICghc3RhcnQpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O3Jlc2VydmVfbWVtOiBtZW1ibG9jayBhbGxvY2F0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG5AQCAtMjg4Niw3ICYjNDM7Mjg4Niw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbiBcdFtpbG9nMihNRU1CTE9DS19EUklWRVJfTUFOQUdFRCldID0gXCYjMzQ7RFJWX01OR1wmIzM0OyxcbiBcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXCYjMzQ7UlNWX05JVFwmIzM0OyxcbiBcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFwmIzM0O1JTVl9LRVJOXCYjMzQ7LFxuLVx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcJiMzNDtLSE9fU0NSQVRDSFwmIzM0OyxcbiYjNDM7XHRbaWxvZzIoTUVNQkxPQ0tfS0hPX05PUFJTUlYpXSA9IFwmIzM0O0tIT19OT1BSU1JWXCYjMzQ7LFxuIH07XG4gXG4gc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDc4ZDYzNzg5YTk2OTAuLmQwMzE1NmJlMGUxMDQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTY4MSw3ICYjNDM7NjgxLDcgQEAgc3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBwZm4gJiM0MzsgbnJfcGFnZXM7XG4gXG4gXHRmb3IgKHBmbiA9IHBhZ2VibG9ja19hbGlnbihwZm4pOyBwZm4gXHUwMDNjIGVuZDsgcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbi1cdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuJiM0MztcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19ib290bWVtX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuIFxuIFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuIFx0XHRpZiAoIWF0b21pYyBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbkBAIC03NjQsNyAmIzQzOzc2NCw3IEBAIHN0YXRpYyB2b2lkIF9fbWVtaW5pdCBfX2luaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcbiBcdGlmIChwYWdlYmxvY2tfYWxpZ25lZChwZm4pKSB7XG4gXHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPVxuLVx0XHRcdGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgTUlHUkFURV9NT1ZBQkxFKTtcbiYjNDM7XHRcdFx0a2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xuIFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuIFx0fVxuIH1cbkBAIC05MjQsNyAmIzQzOzkyNCw3IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXG4gXHRcdCAqIG92ZXIgdGhlIHBsYWNlIGR1cmluZyBzeXN0ZW0gYm9vdC5cbiBcdFx0ICovXG4gXHRcdGlmIChwYWdlYmxvY2tfYWxpZ25lZChwZm4pKSB7XG4tXHRcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuJiM0MztcdFx0XHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XG4gXG4gXHRcdFx0aW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgbXQsIGlzb2xhdGVfcGFnZWJsb2NrKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcbmluZGV4IGU4NmJiOTAwMGIyMmYuLjQ2YzVhMTU2ZmNlNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaFxuQEAgLTY2LDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4gXG4gI2RlZmluZSBfX1NldFBhZ2VSZXNlcnZlZChwKVx0KCh2b2lkKShwKSlcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVuYW1lcyB0aGUgJiMzOTtzY3JhdGNoJiMzOTsgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJiMzOTtib290bWVtJiMzOTsgYW5kICYjMzk7bm9wcnNydiYjMzk7LiBJdCByZW5hbWVzIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLCBkZWJ1Z2ZzIGZpbGVzLCBzdHJ1Y3QgbmFtZXMsIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgYSBLY29uZmlnIG9wdGlvbiwgYnV0IGRvZXMgbm90IGFsdGVyIGFueSBleGVjdXRpb24gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODViZjU3NjZlZGNmY2ZkNTMyN2U0ZmNkOWVjYjc0Njg0ZDRlNDI3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE2OjQ5OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiNTQ5M2E3ZjhmMjI4Li5hMDM5MjdmZmI4NWQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjk4OSwxMSAmIzQzOzI5ODksMTIgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCSYjMzQ7MCYjMzQ7IHwgJiMzNDtvZmYmIzM0OyB8ICYjMzQ7biYjMzQ7IC0ga2V4ZWMgaGFuZG92ZXIgaXMgZGlzYWJsZWQKIAkJCSYjMzQ7MSYjMzQ7IHwgJiMzNDtvbiYjMzQ7IHwgJiMzNDt5JiMzNDsgLSBrZXhlYyBoYW5kb3ZlciBpcyBlbmFibGVkCiAKLQlraG9fc2NyYXRjaD0JW0tFWEVDLEVBUkxZXQomIzQzOwlraG9fYm9vdG1lbT0JW0tFWEVDLEVBUkxZXQogCQkJRm9ybWF0OiBsbFtLTUddLG1tW0tNR10sbm5bS01HXSB8IG5uJQotCQkJRGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgS0hPIHNjcmF0Y2ggcmVnaW9uLiBUaGUgS0hPCi0JCQlzY3JhdGNoIHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkKLQkJCXJhbmdlcyB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgZm9yIG5vbi1rZXJuZWwKJiM0MzsKJiM0MzsJCQlEZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBLSE8gYm9vdCBtZW1vcnkgcmVnaW9uLiBUaGUKJiM0MzsJCQlLSE8gYm9vdCBtZW1vcnkgcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzCiYjNDM7CQkJbWVtb3J5IHJhbmdlcyB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgZm9yIG5vbi1rZXJuZWwKIAkJCWFsbG9jYXRpb25zLiBUaGF0IHdheSwgZXZlbiB3aGVuIG1lbW9yeSBpcyBoZWF2aWx5CiAJCQlmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZAogCQkJa2VybmVsIHdpbGwgYWx3YXlzIGhhdmUgZW5vdWdoIGNvbnRpZ3VvdXMgcmFuZ2VzIHRvCkBAIC0zMDAyLDEwICYjNDM7MzAwMywxMCBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgZXhhY3QgYW1vdW50IG9mCiAJCQltZW1vcnkgaW4gdGhlIGZvcm0gb2YgJiMzNDtsbFtLTUddLG1tW0tNR10sbm5bS01HXSYjMzQ7CiAJCQl3aGVyZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGRlZmluZXMgdGhlIHNpemUgb2YgYSBsb3cKLQkJCW1lbW9yeSBzY3JhdGNoIGFyZWEsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRlZmluZXMKLQkJCXRoZSBzaXplIG9mIGEgZ2xvYmFsIHNjcmF0Y2ggYXJlYSBhbmQgdGhlIHRoaXJkCiYjNDM7CQkJbWVtb3J5IGJvb3RtZW0gYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lcwomIzQzOwkJCXRoZSBzaXplIG9mIGEgZ2xvYmFsIGJvb3RtZW0gYXJlYSBhbmQgdGhlIHRoaXJkCiAJCQlwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhZGRpdGlvbmFsIHBlci1ub2RlCi0JCQlzY3JhdGNoIGFyZWFzLiAgVGhlIGZvcm0gJiMzNDtubiUmIzM0OyBkZWZpbmVzIHNjYWxlIGZhY3RvcgomIzQzOwkJCWJvb3RtZW0gYXJlYXMuICBUaGUgZm9ybSAmIzM0O25uJSYjMzQ7IGRlZmluZXMgc2NhbGUgZmFjdG9yCiAJCQkoaW4gcGVyY2VudHMpIG9mIG1lbW9yeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBib290LgogCiAJa21hYz0JCVtNSVBTXSBLb3JpbmEgZXRoZXJuZXQgTUFDIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QKaW5kZXggMmMyNmU1NjBiZDc4YS4uZjE0YzhkOWFkNmE0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdApAQCAtMjAsMTAgJiM0MzsyMCwxMCBAQCBuZWVkIHRvIGVuYWJsZSBpZiB5b3Ugd291bGQgbGlrZSB0byBwcmVzZXJ2ZSB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGFjcm9zcwoga2V4ZWMuCiAKIFRvIHVzZSBLSE8sIHBsZWFzZSBib290IHRoZSBrZXJuZWwgd2l0aCB0aGUgYGBraG89b25gYCBjb21tYW5kIGxpbmUKLXBhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fc2NyYXRjaGBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGUKLXNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGEKLTE2IE1pQiBsb3cgbWVtb3J5IHNjcmF0Y2ggYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBzY3JhdGNoIHJlZ2lvbiwgYW5kIDI1NiBNaUIKLXBlciBOVU1BIG5vZGUgc2NyYXRjaCByZWdpb25zIG9uIGJvb3QuCiYjNDM7cGFyYW1ldGVyLiBZb3UgbWF5IHVzZSBgYGtob19ib290bWVtYGAgcGFyYW1ldGVyIHRvIGRlZmluZSBzaXplIG9mIHRoZQomIzQzO2Jvb3QgbWVtb3J5IHJlZ2lvbnMuIEZvciBleGFtcGxlIGBga2hvX2Jvb3RtZW09MTZNLDUxMk0sMjU2TWBgIHdpbGwgcmVzZXJ2ZSBhCiYjNDM7MTYgTWlCIGxvdyBtZW1vcnkgYm9vdG1lbSBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIGJvb3RtZW0gcmVnaW9uLCBhbmQgMjU2IE1pQgomIzQzO3BlciBOVU1BIG5vZGUgYm9vdG1lbSByZWdpb25zIG9uIGJvb3QuCiAKIFBlcmZvcm0gYSBLSE8ga2V4ZWMKID09PT09PT09PT09PT09PT09PT0KQEAgLTk2LDE1ICYjNDM7OTYsMTUgQEAgc3RhYmlsaXplZC4KICAgICBjdXJyZW50IEtITyBzdGF0ZSBpbiB0aGlzIGZpbGUuIEtleGVjIHVzZXIgc3BhY2UgdG9vbGluZyBjYW4gdXNlIHRoaXMKICAgICBhcyBpbnB1dCBmaWxlIGZvciB0aGUgS0hPIHBheWxvYWQgaW1hZ2UuCiAKLWBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zY3JhdGNoX2xlbmBgCi0gICAgTGVuZ3RocyBvZiBLSE8gc2NyYXRjaCByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzCiYjNDM7YGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fbGVuYGAKJiM0MzsgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzCiAgICAgbWVtb3J5IHJlZ2lvbnMgdGhhdCB3aWxsIGFsd2F5cyBzdGF5IGF2YWlsYWJsZSBmb3IgZnV0dXJlIGtleGVjCiAgICAgYWxsb2NhdGlvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHMgY2FuIHVzZSB0aGlzIGZpbGUgdG8gZGV0ZXJtaW5lCiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy4KIAotYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3NjcmF0Y2hfcGh5c2BgCi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHMKLSAgICBjYW4gdXNlIHRoaXMgZmlsZSBpbiBjb25qdW5jdGlvbiB0byBzY3JhdGNoX3BoeXMgdG8gZGV0ZXJtaW5lIHdoZXJlCiYjNDM7YGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fcGh5c2BgCiYjNDM7ICAgIFBoeXNpY2FsIGxvY2F0aW9ucyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLiBLZXhlYyB1c2VyIHNwYWNlIHRvb2xzCiYjNDM7ICAgIGNhbiB1c2UgdGhpcyBmaWxlIGluIGNvbmp1bmN0aW9uIHRvIGJvb3RtZW1fcGh5cyB0byBkZXRlcm1pbmUgd2hlcmUKICAgICBpdCBzaG91bGQgcGxhY2UgaXRzIHBheWxvYWQgaW1hZ2VzLgogCiBgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc3ViX2ZkdHMvYGAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdAppbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0CkBAIC0xMyw4ICYjNDM7MTMsOCBAQCBLZXhlYyBIYW5kT3ZlciAoS0hPKSBpcyBhIG1lY2hhbmlzbSB0aGF0IGFsbG93cyBMaW51eCB0byBwcmVzZXJ2ZSBtZW1vcnkKIHJlZ2lvbnMsIHdoaWNoIGNvdWxkIGNvbnRhaW4gc2VyaWFsaXplZCBzeXN0ZW0gc3RhdGVzLCBhY3Jvc3Mga2V4ZWMuCiAKIEtITyB1c2VzIDpyZWY6YGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSAoRkRUKSAmbHQ7a2hvX2ZkdCZndDtgIHRvIHBhc3MgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YHNjcmF0Y2gKLW1lbW9yeSByZWdpb25zICZsdDtraG9fc2NyYXRjaCZndDtgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuCiYjNDM7dGhlIHByZXNlcnZlZCBzdGF0ZSBmcm9tIHByZS1leGVjIGtlcm5lbCB0byBwb3N0LWtleGVjIGtlcm5lbCBhbmQgOnJlZjpgYm9vdAomIzQzO21lbW9yeSByZWdpb25zICZsdDtraG9fYm9vdG1lbSZndDtgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuCiAKIC4uIF9raG9fZmR0OgogCkBAIC00MCwzMSAmIzQzOzQwLDMxIEBAIGFuZCBwb3N0LWtleGVjIGtlcm5lbHMuIFRoaXMgQUJJIGlzIGRlZmluZWQgYnkgaGVhZGVyIGZpbGVzIGluCiAKICAgIGFiaS5yc3QKIAotLi4gX2tob19zY3JhdGNoOgomIzQzOy4uIF9raG9fYm9vdG1lbToKIAotU2NyYXRjaCBSZWdpb25zCi09PT09PT09PT09PT09PT0KJiM0MztCb290IE1lbW9yeSBSZWdpb25zCiYjNDM7PT09PT09PT09PT09PT09PT09PQogCiBUbyBib290IGludG8ga2V4ZWMsIHdlIG5lZWQgdG8gaGF2ZSBhIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmFuZ2UgdGhhdAogY29udGFpbnMgbm8gaGFuZGVkIG92ZXIgbWVtb3J5LiBLZXhlYyB0aGVuIHBsYWNlcyB0aGUgdGFyZ2V0IGtlcm5lbCBhbmQgaW5pdHJkCiBpbnRvIHRoYXQgcmVnaW9uLiBUaGUgbmV3IGtlcm5lbCBleGNsdXNpdmVseSB1c2VzIHRoaXMgcmVnaW9uIGZvciBtZW1vcnkKIGFsbG9jYXRpb25zIGJlZm9yZSBkdXJpbmcgYm9vdCB1cCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLgogCi1XZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgc2NyYXRjaCByZWdpb25zOiBPbgotZmlyc3QgYm9vdCBLSE8gYWxsb2NhdGVzIHNldmVyYWwgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb25zLiBTaW5jZQomIzQzO1dlIGd1YXJhbnRlZSB0aGF0IHdlIGFsd2F5cyBoYXZlIHN1Y2ggcmVnaW9ucyB0aHJvdWdoIHRoZSBib290IG1lbW9yeSByZWdpb25zOgomIzQzO09uIGZpcnN0IGJvb3QgS0hPIGFsbG9jYXRlcyBzZXZlcmFsIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucy4gU2luY2UKIGFmdGVyIGtleGVjIHRoZXNlIHJlZ2lvbnMgd2lsbCBiZSB1c2VkIGJ5IGVhcmx5IG1lbW9yeSBhbGxvY2F0aW9ucywgdGhlcmUgaXMgYQotc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9ucwotcmVxdWVzdHMgdGhhdCBkbyBub3QgcmVxdWlyZSBwYXJ0aWN1bGFyIE5VTUEgbm9kZSBhc3NpZ25tZW50LgotQnkgZGVmYXVsdCwgc2l6ZSBvZiB0aGUgc2NyYXRjaCByZWdpb24gaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBhbW91bnQgb2YgbWVtb3J5Ci1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlCi11c2VkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIHNpemUgb2YgdGhlIHNjcmF0Y2ggcmVnaW9ucy4KLVRoZSBzY3JhdGNoIHJlZ2lvbnMgYXJlIGRlY2xhcmVkIGFzIENNQSB3aGVuIHBhZ2UgYWxsb2NhdG9yIGlzIGluaXRpYWxpemVkIHNvCi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlCi1ndWFyYW50ZWUgdGhhdCBubyBoYW5kb3ZlciBwYWdlcyBsYW5kIGluIHRoYXQgcmVnaW9uLCBiZWNhdXNlIGhhbmRvdmVyIHBhZ2VzCi1tdXN0IGJlIGF0IGEgc3RhdGljIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiBhbmQgQ01BIGVuZm9yY2VzIHRoYXQgb25seQotbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuCi0KLUFmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kCiYjNDM7Ym9vdCBtZW1vcnkgcmVnaW9uIHBlciBOVU1BIG5vZGUgcGx1cyBhIGJvb3QgbWVtb3J5IHJlZ2lvbiB0byBzYXRpc2Z5CiYjNDM7YWxsb2NhdGlvbnMgcmVxdWVzdHMgdGhhdCBkbyBub3QgcmVxdWlyZSBwYXJ0aWN1bGFyIE5VTUEgbm9kZSBhc3NpZ25tZW50LiBCeQomIzQzO2RlZmF1bHQsIHNpemUgb2YgdGhlIGJvb3QgbWVtb3J5IHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnkKJiM0MzthbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlCiYjNDM7dXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBib290IG1lbW9yeSByZWdpb25zLiBUaGUgYm9vdCBtZW1vcnkKJiM0MztyZWdpb25zIGFyZSBkZWNsYXJlZCBhcyBDTUEgd2hlbiBwYWdlIGFsbG9jYXRvciBpcyBpbml0aWFsaXplZCBzbyB0aGF0IHRoZWlyCiYjNDM7bWVtb3J5IGNhbiBiZSB1c2VkIGR1cmluZyBzeXN0ZW0gbGlmZXRpbWUuIENNQSBnaXZlcyB1cyB0aGUgZ3VhcmFudGVlIHRoYXQgbm8KJiM0MztoYW5kb3ZlciBwYWdlcyBsYW5kIGluIHRoYXQgcmVnaW9uLCBiZWNhdXNlIGhhbmRvdmVyIHBhZ2VzIG11c3QgYmUgYXQgYSBzdGF0aWMKJiM0MztwaHlzaWNhbCBtZW1vcnkgbG9jYXRpb24gYW5kIENNQSBlbmZvcmNlcyB0aGF0IG9ubHkgbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZAomIzQzO2luc2lkZS4KJiM0MzsKJiM0MztBZnRlciBLSE8ga2V4ZWMsIHdlIGlnbm9yZSB0aGUgYGBraG9fYm9vdG1lbWBgIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZAogaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzCiB1cyB0byByZWN1cnNpdmVseSBleGVjdXRlIGFueSBhbW91bnQgb2YgS0hPIGtleGVjcy4gQmVjYXVzZSB3ZSB1c2VkIHRoaXMgcmVnaW9uCiBmb3IgYm9vdCBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGFzIHRhcmdldCBtZW1vcnkgZm9yIGtleGVjIGJsb2JzLCBzb21lIHBhcnRzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jCmluZGV4IDIyMjY3YTgzZTA2NGEuLjI5MDE1MzgxOGQwZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jCkBAIC03NjQsMTIgJiM0Mzs3NjQsMTIgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19lODIwX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLAogfQogCiAvKgotICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBzY3JhdGNoIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90CiYjNDM7ICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBib290bWVtIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90CiAgKiBzdGVwcGluZyBvbnRvIHByZXNlcnZlZCBtZW1vcnkuCiAgKi8KIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpCiB7Ci0Jc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDsKJiM0MzsJc3RydWN0IGtob19ib290bWVtICpraG9fYm9vdG1lbTsKIAlzdHJ1Y3Qgc2V0dXBfZGF0YSAqcHRyOwogCXN0cnVjdCBraG9fZGF0YSAqa2hvOwogCWludCBpLCBucl9hcmVhcyA9IDA7CkBAIC03ODEsOCAmIzQzOzc4MSw4IEBAIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpCiAJd2hpbGUgKHB0cikgewogCQlpZiAocHRyLSZndDt0eXBlID09IFNFVFVQX0tFWEVDX0tITykgewogCQkJa2hvID0gKHN0cnVjdCBraG9fZGF0YSAqKSh1bnNpZ25lZCBsb25nKXB0ci0mZ3Q7ZGF0YTsKLQkJCWtob19zY3JhdGNoID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylraG8tJmd0O3NjcmF0Y2hfYWRkcjsKLQkJCW5yX2FyZWFzID0ga2hvLSZndDtzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTsKJiM0MzsJCQlraG9fYm9vdG1lbSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLSZndDtib290bWVtX2FkZHI7CiYjNDM7CQkJbnJfYXJlYXMgPSBraG8tJmd0O2Jvb3RtZW1fc2l6ZSAvIHNpemVvZigqa2hvX2Jvb3RtZW0pOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNzkzLDcgJiM0Mzs3OTMsNyBAQCBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfYXJlYXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9ICZhbXA7a2hvX3NjcmF0Y2hbaV07CiYjNDM7CQlzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSAmYW1wO2tob19ib290bWVtW2ldOwogCQlzdHJ1Y3QgbWVtX3ZlY3RvciByZWdpb24gPSB7CiAJCQkuc3RhcnQgPSBhcmVhLSZndDthZGRyLAogCQkJLnNpemUgPSBhcmVhLSZndDtzaXplLApAQCAtODIyLDcgJiM0Mzs4MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3JhbmRvbV9waHlzX2FkZHIodW5zaWduZWQgbG9uZyBtaW5pbXVtLAogCX0KIAogCS8qCi0JICogRHVyaW5nIGtleGVjIGhhbmRvdmVyIG9ubHkgcHJvY2VzcyBLSE8gc2NyYXRjaCBhcmVhcyB0aGF0IGFyZSBrbm93bgomIzQzOwkgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duCiAJICogbm90IHRvIGNvbnRhaW4gYW55IGRhdGEgdGhhdCBtdXN0IGJlIHByZXNlcnZlZC4KIAkgKi8KIAlpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgJmFtcDsmYW1wOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaAppbmRleCAyNjcxYzRlMWIzYTBiLi42MTA5MGRiNTA2NWM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaApAQCAtODUsOCAmIzQzOzg1LDggQEAgc3RydWN0IGltYV9zZXR1cF9kYXRhIHsKIHN0cnVjdCBraG9fZGF0YSB7CiAJX191NjQgZmR0X2FkZHI7CiAJX191NjQgZmR0X3NpemU7Ci0JX191NjQgc2NyYXRjaF9hZGRyOwotCV9fdTY0IHNjcmF0Y2hfc2l6ZTsKJiM0MzsJX191NjQgYm9vdG1lbV9hZGRyOwomIzQzOwlfX3U2NCBib290bWVtX3NpemU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggZWI3MjUzN2JjMGIxOS4uMmE2ZTE5Zjk1MjUxNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMzYzLDcgJiM0MzsxMzYzLDcgQEAgX19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZCkKIAkgKiBBZnRlciByZWFsIG1vZGUgdHJhbXBvbGluZSBpcyBhbGxvY2F0ZWQsIHdlIGNsZWFyIHRoYXQgc2NyYXRjaAogCSAqIG1hcmtpbmcuCiAJICovCi0JbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgwLCBTWl8xTSk7CiYjNDM7CW1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoMCwgU1pfMU0pOwogCiAJLyoKIAkgKiAzMi1iaXQgc3lzdGVtcyBhcmUgbGltaXRlZCB0byA0Qkcgb2YgbWVtb3J5IGV2ZW4gd2l0aCBISUdITUVNIGFuZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jIGIvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jCmluZGV4IDdlOTgwZWE0OWQ4ZDYuLjNhYTc3MDA2YWRhYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMKQEAgLTI4NSwxNCAmIzQzOzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLAogCXNkLSZndDtsZW4gPSBzaXplb2Yoc3RydWN0IGtob19kYXRhKTsKIAogCS8qIE9ubHkgYWRkIGlmIHdlIGhhdmUgYWxsIEtITyBpbWFnZXMgaW4gcGxhY2UgKi8KLQlpZiAoIWltYWdlLSZndDtraG8uZmR0IHx8ICFpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2gpCiYjNDM7CWlmICghaW1hZ2UtJmd0O2toby5mZHQgfHwgIWltYWdlLSZndDtraG8uYm9vdG1lbSkKIAkJcmV0dXJuOwogCiAJLyogQWRkIHNldHVwIGRhdGEgKi8KIAlraG8tJmd0O2ZkdF9hZGRyID0gaW1hZ2UtJmd0O2toby5mZHQ7CiAJa2hvLSZndDtmZHRfc2l6ZSA9IFBBR0VfU0laRTsKLQlraG8tJmd0O3NjcmF0Y2hfYWRkciA9IGltYWdlLSZndDtraG8uc2NyYXRjaC0mZ3Q7bWVtOwotCWtoby0mZ3Q7c2NyYXRjaF9zaXplID0gaW1hZ2UtJmd0O2toby5zY3JhdGNoLSZndDtidWZzejsKJiM0MzsJa2hvLSZndDtib290bWVtX2FkZHIgPSBpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0tJmd0O21lbTsKJiM0MzsJa2hvLSZndDtib290bWVtX3NpemUgPSBpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0tJmd0O2J1ZnN6OwogCXNkLSZndDtuZXh0ID0gcGFyYW1zLSZndDtoZHIuc2V0dXBfZGF0YTsKIAlwYXJhbXMtJmd0O2hkci5zZXR1cF9kYXRhID0gcGFyYW1zX2xvYWRfYWRkciAmIzQzOyBzZXR1cF9kYXRhX29mZnNldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggNWViYjUyMWUxMzZkNy4uZDE2MThjNGNmN2ZiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKQogCQlyZXR1cm47CiAJfQogCi0Ja2hvX3BvcHVsYXRlKGtoby0mZ3Q7ZmR0X2FkZHIsIGtoby0mZ3Q7ZmR0X3NpemUsIGtoby0mZ3Q7c2NyYXRjaF9hZGRyLCBraG8tJmd0O3NjcmF0Y2hfc2l6ZSk7CiYjNDM7CWtob19wb3B1bGF0ZShraG8tJmd0O2ZkdF9hZGRyLCBraG8tJmd0O2ZkdF9zaXplLCBraG8tJmd0O2Jvb3RtZW1fYWRkciwga2hvLSZndDtib290bWVtX3NpemUpOwogCiAJZWFybHlfbWVtdW5tYXAoa2hvLCBzaXplKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYyBiL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYwppbmRleCA2OTRkODBhNWM2OGUxLi42NTExMGIyZWUxYTFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCB2b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKQogCSAqLwogCW1lbWJsb2NrX3Jlc2VydmUoMCwgU1pfMU0pOwogCi0JbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2goMCwgU1pfMU0pOwomIzQzOwltZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydigwLCBTWl8xTSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWVfc2V2X3NldHVwX3JlYWxfbW9kZShzdHJ1Y3QgdHJhbXBvbGluZV9oZWFkZXIgKnRoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMKaW5kZXggNjEwM2IxYTA4MmQyNC4uOWYwOWIwZDJkYWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jCkBAIC0xNjUsMTAgJiM0MzsxNjUsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKQogCQlwcl9pbmZvKCYjMzQ7UHJvY2Vzc2luZyBFRkkgbWVtb3J5IG1hcDpcbiYjMzQ7KTsKIAogCS8qCi0JICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gc2NyYXRjaAomIzQzOwkgKiBEaXNjYXJkIG1lbWJsb2NrcyBkaXNjb3ZlcmVkIHNvIGZhciBleGNlcHQgZm9yIEtITyBib290bWVtCiAJICogcmVnaW9ucy4gTW9zdCBtZW1ibG9ja3MgYXQgdGhpcyBwb2ludCBvcmlnaW5hdGUgZnJvbSBtZW1vcnkgbm9kZXMKIAkgKiBpbiB0aGUgRFQgYW5kIFVFRkkgdXNlcyBpdHMgb3duIG1lbW9yeSBtYXAgaW5zdGVhZC4gSG93ZXZlciwgaWYKLQkgKiBLSE8gaXMgZW5hYmxlZCwgc2NyYXRjaCByZWdpb25zLCB3aGljaCBhcmUgZ29vZCBrbm93biBtZW1vcnkKJiM0MzsJICogS0hPIGlzIGVuYWJsZWQsIGJvb3RtZW0gcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5CiAJICogbXVzdCBiZSBwcmVzZXJ2ZWQuCiAJICovCiAJbWVtYmxvY2tfZHVtcF9hbGwoKTsKQEAgLTE3OCw3ICYjNDM7MTc4LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKQogCiAJCS8qIFJlbW92ZSBhbGwgbm9uLUtITyByZWdpb25zICovCiAJCWZvcl9lYWNoX21lbV9yZWdpb24ocikgewotCQkJaWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkgewomIzQzOwkJCWlmICghbWVtYmxvY2tfaXNfa2hvX25vcHJzcnYocikpIHsKIAkJCQltZW1ibG9ja19yZW1vdmUoci0mZ3Q7YmFzZSwgci0mZ3Q7c2l6ZSk7CiAJCQkJci0tOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9rZXhlYy5jIGIvZHJpdmVycy9vZi9rZXhlYy5jCmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yva2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL2tleGVjLmMKQEAgLTI2MSwyMyAmIzQzOzI2MSwyMyBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZQogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUgogCXBoeXNfYWRkcl90IGZkdF9tZW0gPSAwOwogCXBoeXNfYWRkcl90IGZkdF9sZW4gPSAwOwotCXBoeXNfYWRkcl90IHNjcmF0Y2hfbWVtID0gMDsKLQlwaHlzX2FkZHJfdCBzY3JhdGNoX2xlbiA9IDA7CiYjNDM7CXBoeXNfYWRkcl90IGJvb3RtZW1fYXJyID0gMDsKJiM0MzsJcGh5c19hZGRyX3QgYm9vdG1lbV9sZW4gPSAwOwogCiAJcmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgJiMzNDtsaW51eCxraG8tZmR0JiMzNDspOwogCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUZEVF9FUlJfTk9URk9VTkQpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgJiMzNDtsaW51eCxraG8tc2NyYXRjaCYjMzQ7KTsKJiM0MzsJcmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgJiMzNDtsaW51eCxraG8tYm9vdG1lbSYjMzQ7KTsKIAlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1GRFRfRVJSX05PVEZPVU5EKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFpbWFnZS0mZ3Q7a2hvLmZkdCB8fCAhaW1hZ2UtJmd0O2toby5zY3JhdGNoKQomIzQzOwlpZiAoIWltYWdlLSZndDtraG8uZmR0IHx8ICFpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0pCiAJCXJldHVybiAwOwogCiAJZmR0X21lbSA9IGltYWdlLSZndDtraG8uZmR0OwogCWZkdF9sZW4gPSBQQUdFX1NJWkU7Ci0Jc2NyYXRjaF9tZW0gPSBpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2gtJmd0O21lbTsKLQlzY3JhdGNoX2xlbiA9IGltYWdlLSZndDtraG8uc2NyYXRjaC0mZ3Q7YnVmc3o7CiYjNDM7CWJvb3RtZW1fYXJyID0gaW1hZ2UtJmd0O2toby5ib290bWVtLSZndDttZW07CiYjNDM7CWJvb3RtZW1fbGVuID0gaW1hZ2UtJmd0O2toby5ib290bWVtLSZndDtidWZzejsKIAogCXByX2RlYnVnKCYjMzQ7QWRkaW5nIGtobyBtZXRhZGF0YSB0byBEVCYjMzQ7KTsKIApAQCAtMjg1LDggJiM0MzsyODUsOCBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZQogCQkJCSAgICAgICBmZHRfbWVtLCBmZHRfbGVuKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCXJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCAmIzM0O2xpbnV4LGtoby1zY3JhdGNoJiMzNDssCi0JCQkJICAgICAgIHNjcmF0Y2hfbWVtLCBzY3JhdGNoX2xlbik7CiYjNDM7CXJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCAmIzM0O2xpbnV4LGtoby1ib290bWVtJiMzNDssCiYjNDM7CQkJCSAgICAgICBib290bWVtX2FyciwgYm9vdG1lbV9sZW4pOwogCiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaAppbmRleCA1MDgzOWZiNWVlOGVkLi5jZjczZDliMzRjM2M5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oCkBAIC00LDcgJiM0Mzs0LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKLXN0cnVjdCBraG9fc2NyYXRjaCB7CiYjNDM7c3RydWN0IGtob19ib290bWVtIHsKIAlwaHlzX2FkZHJfdCBhZGRyOwogCXBoeXNfYWRkcl90IHNpemU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlYy5oIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oCmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleGVjLmgKQEAgLTQxOCw3ICYjNDM7NDE4LDcgQEAgc3RydWN0IGtpbWFnZSB7CiAjZW5kaWYKIAogCXN0cnVjdCB7Ci0JCXN0cnVjdCBrZXhlY19zZWdtZW50ICpzY3JhdGNoOwomIzQzOwkJc3RydWN0IGtleGVjX3NlZ21lbnQgKmJvb3RtZW07CiAJCXBoeXNfYWRkcl90IGZkdDsKIAl9IGtobzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCmluZGV4IDQ2ZGU4NmRjMzQzZTkuLmVmMmIxODhjOGVkMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgKQEAgLTM2LDE1ICYjNDM7MzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpOwogdm9pZCBraG9fbWVtb3J5X2luaXQodm9pZCk7CiB2b2lkIGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKTsKIAotdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLCBwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsCi0JCSAgdTY0IHNjcmF0Y2hfbGVuKTsKJiM0Mzt2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywKJiM0MzsJCSAgdTY0IGJvb3RtZW1fbGVuKTsKIAotYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTsKJiM0Mztib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpOwogCi1zdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCQkJICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpCiB7Ci0JaWYgKGtob19zY3JhdGNoX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQpKQomIzQzOwlpZiAoa2hvX2Jvb3RtZW1fb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCkpCiAJCXJldHVybiBNSUdSQVRFX0NNQTsKIAlyZXR1cm4gbXQ7CiB9CkBAIC0xMjMsMTYgJiM0MzsxMjMsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLAotCQkJCXBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cywgdTY0IHNjcmF0Y2hfbGVuKQomIzQzOwkJCQlwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbikKIHsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCQkJICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpCiB7CiAJcmV0dXJuIG10OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCmluZGV4IGQ2MmRiOWU3NzZjZjkuLjE4NmI5NjVjZmM4OTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKQEAgLTQ2LDExICYjNDM7NDYsMTEgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuOwogICogQE1FTUJMT0NLX1JTUlZfS0VSTjogbWVtb3J5IHJlZ2lvbiB0aGF0IGlzIHJlc2VydmVkIGZvciBrZXJuZWwgdXNlLAogICogZWl0aGVyIGV4cGxpY3RpdGx5IHdpdGggbWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKCkgb3IgdmlhIG1lbWJsb2NrCiAgKiBhbGxvY2F0aW9uIEFQSXMuIEFsbCBtZW1ibG9jayBhbGxvY2F0aW9ucyBzZXQgdGhpcyBmbGFnLgotICogQE1FTUJMT0NLX0tIT19TQ1JBVENIOiBtZW1vcnkgcmVnaW9uIHRoYXQga2V4ZWMgY2FuIHBhc3MgdG8gdGhlIG5leHQKLSAqIGtlcm5lbCBpbiBoYW5kb3ZlciBtb2RlLiBEdXJpbmcgZWFybHkgYm9vdCwgd2UgZG8gbm90IGtub3cgYWJvdXQgYWxsCi0gKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzCi0gKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdAotICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuCiYjNDM7ICogQE1FTUJMT0NLX0tIT19OT1BSU1JWOiBtZW1vcnkgcmVnaW9uIHdpdGggbm8gcHJlc2VydmF0aW9uIGZyb20ga2V4ZWMKJiM0MzsgKiBoYW5kb3Zlci4gRHVyaW5nIGVhcmx5IGJvb3QsIHdlIGRvIG5vdCBrbm93IGFib3V0IGFsbCBtZW1vcnkgcHJlc2VydmF0aW9ucwomIzQzOyAqIHlldCwgc28gd2UgZ2V0IG1lbW9yeSB3aXRoIG5vIHByZXNlcnZhdGlvbnMgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsIHRoYXQgd2UKJiM0MzsgKiBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdCBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20KJiM0MzsgKiBpbiB0aGlzIHBoYXNlLgogICogQE1FTUJMT0NLX1JTUlZfSFVHRVRMQjogbWVtb3J5IGlzIHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzCiAgKi8KIGVudW0gbWVtYmxvY2tfZmxhZ3MgewpAQCAtNjEsNyAmIzQzOzYxLDcgQEAgZW51bSBtZW1ibG9ja19mbGFncyB7CiAJTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQgPSAweDgsCS8qIGFsd2F5cyBkZXRlY3RlZCB2aWEgYSBkcml2ZXIgKi8KIAlNRU1CTE9DS19SU1JWX05PSU5JVAk9IDB4MTAsCS8qIGRvbiYjMzk7dCBpbml0aWFsaXplIHN0cnVjdCBwYWdlcyAqLwogCU1FTUJMT0NLX1JTUlZfS0VSTgk9IDB4MjAsCS8qIG1lbW9yeSByZXNlcnZlZCBmb3Iga2VybmVsIHVzZSAqLwotCU1FTUJMT0NLX0tIT19TQ1JBVENICT0gMHg0MCwJLyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovCiYjNDM7CU1FTUJMT0NLX0tIT19OT1BSU1JWCT0gMHg0MCwJLyogbWVtb3J5IHdpdGggbm8gS0hPIHByZXNlcnZhdGlvbnMgKi8KIAlNRU1CTE9DS19SU1JWX0hVR0VUTEIJPSAweDgwLCAvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXMgKi8KIH07CiAKQEAgLTE1OCw4ICYjNDM7MTU4LDggQEAgaW50IG1lbWJsb2NrX21hcmtfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiBpbnQgbWVtYmxvY2tfY2xlYXJfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiBpbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19ub2luaXQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiBpbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwotaW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7Ci1pbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiYjNDM7aW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiYjNDM7aW50IG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogCiB2b2lkIG1lbWJsb2NrX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiB2b2lkIHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKHZvaWQpOwpAQCAtMzAxLDkgJiM0MzszMDEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtYmxvY2tfaXNfZHJpdmVyX21hbmFnZWQoc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqbSkKIAlyZXR1cm4gbS0mZ3Q7ZmxhZ3MgJmFtcDsgTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fc2NyYXRjaChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fbm9wcnNydihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKQogewotCXJldHVybiBtLSZndDtmbGFncyAmYW1wOyBNRU1CTE9DS19LSE9fU0NSQVRDSDsKJiM0MzsJcmV0dXJuIG0tJmd0O2ZsYWdzICZhbXA7IE1FTUJMT0NLX0tIT19OT1BSU1JWOwogfQogCiBpbnQgbWVtYmxvY2tfc2VhcmNoX3Bmbl9uaWQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgKnN0YXJ0X3BmbiwKQEAgLTYxNCwxMiAmIzQzOzYxNCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfbWVtdGVzdChwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW10ZXN0X3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkgeyB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSAotdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTsKLXZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTsKJiM0MzsjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSCiYjNDM7dm9pZCBtZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSh2b2lkKTsKJiM0Mzt2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNldl9vbmx5KHZvaWQpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydl9vbmx5KHZvaWQpIHsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfTUVNQkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWcKaW5kZXggYzEzYWYzOGJhMjNhYi4uZjUwZGFlZThlZmYwNyAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnCkBAIC01LDcgJiM0Mzs1LDYgQEAgbWVudSAmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlciYjMzQ7CiBjb25maWcgS0VYRUNfSEFORE9WRVIKIAlib29sICYjMzQ7a2V4ZWMgaGFuZG92ZXImIzM0OwogCWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUiAmYW1wOyZhbXA7IEFSQ0hfU1VQUE9SVFNfS0VYRUNfRklMRQotCXNlbGVjdCBNRU1CTE9DS19LSE9fU0NSQVRDSAogCXNlbGVjdCBLRVhFQ19GSUxFCiAJc2VsZWN0IExJQkZEVAogCXNlbGVjdCBDTUEKZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCmluZGV4IGZlNmYyYWM3ZTQ1ODMuLmRhOGQ1ZWNiOTE1YjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwpAQCAtNDEsMTIgJiM0Mzs0MSwxMiBAQAogLyoKICAqIFRoaXMgaXMgdGhlIG1pbmltYWwgYWxpZ25tZW50IHJlcXVpcmVkIGJ5IGRlZmVycmVkIHN0cnVjdCBwYWdlIGluaXQuCiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3MKLSAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uCi0gKiBJZiBLSE8gc2NyYXRjaCBpcyBub3QgYWxpZ25lZCB0byB0aGF0IHZhbHVlLCBidWRkeSBjYW4gYWNjZXNzIHVuaW5pdGlhbGl6ZWQKLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guCiYjNDM7ICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS4gSWYgS0hPIGJvb3RtZW0KJiM0MzsgKiBpcyBub3QgYWxpZ25lZCB0byB0aGF0IHZhbHVlLCBidWRkeSBjYW4gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2VzLAomIzQzOyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLgogICovCi0jZGVmaW5lIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpCi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTICZndDs9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTsKJiM0MzsjZGVmaW5lIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpCiYjNDM7c3RhdGljX2Fzc2VydChCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyAmZ3Q7PSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7CiAKIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovCiAjZGVmaW5lIEtIT19QQUdFX01BR0lDIDB4NGI0ODRmNTBVIC8qIEFTQ0lJIGZvciAmIzM5O0tIT1AmIzM5OyAqLwpAQCAtOTYsNyAmIzQzOzk2LDcgQEAgc3RhdGljIHN0cnVjdCBraG9fb3V0IGtob19vdXQgPSB7CiAKIHN0cnVjdCBraG9faW4gewogCXBoeXNfYWRkcl90IGZkdF9waHlzOwotCXBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5czsKJiM0MzsJcGh5c19hZGRyX3QgYm9vdG1lbV9waHlzOwogCWNoYXIgcHJldmlvdXNfcmVsZWFzZVtfX05FV19VVFNfTEVOICYjNDM7IDFdOwogCXUzMiBrZXhlY19jb3VudDsKIAlzdHJ1Y3Qga2hvX2RlYnVnZnMgZGJnOwpAQCAtNjU2LDM0ICYjNDM7NjU2LDM0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCAqa2hvX2dldF9tZW1fbWFwKGNvbnN0IHZvaWQgKmZkdCkKIAogLyoKICAqIFdpdGggS0hPIGVuYWJsZWQsIG1lbW9yeSBjYW4gYmVjb21lIGZyYWdtZW50ZWQgYmVjYXVzZSBLSE8gcmVnaW9ucyBtYXkKLSAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBzY3JhdGNoIHJlZ2lvbnMgZ2l2ZSB1cyBhCiYjNDM7ICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIGJvb3RtZW0gcmVnaW9ucyBnaXZlIHVzIGEKICAqIHNhZmUgem9uZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIHNlZSBLSE8gYWxsb2NhdGlvbnMgZnJvbS4gVGhpcyBpcyB3aGVyZSB3ZQotICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBzY3JhdGNoCiYjNDM7ICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBib290bWVtCiAgKiBhcmVhIGZvciBlYXJseSBhbGxvY2F0aW9ucyB0aGF0IGhhcHBlbiBiZWZvcmUgcGFnZSBhbGxvY2F0b3IgaXMKICAqIGluaXRpYWxpemVkLgogICovCi1zdHJ1Y3Qga2hvX3NjcmF0Y2ggKmtob19zY3JhdGNoOwotdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDsKJiM0MztzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtOwomIzQzO3Vuc2lnbmVkIGludCBraG9fYm9vdG1lbV9jbnQ7CiAKIC8qCi0gKiBUaGUgc2NyYXRjaCBhcmVhcyBhcmUgc2NhbGVkIGJ5IGRlZmF1bHQgYXMgcGVyY2VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb20KJiM0MzsgKiBUaGUgYm9vdG1lbSBhcmVhcyBhcmUgc2NhbGVkIGJ5IGRlZmF1bHQgYXMgcGVyY2VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb20KICAqIG1lbWJsb2NrLiBBIHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBzY2FsZSB3aXRoIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXI6CiAgKgotICoga2hvX3NjcmF0Y2g9TiUKJiM0MzsgKiBraG9fYm9vdG1lbT1OJQogICoKICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBmb3IgYSBsb3dtZW0sIGEgZ2xvYmFsIGFuZAotICogcGVyLW5vZGUgc2NyYXRjaCBhcmVhczoKJiM0MzsgKiBwZXItbm9kZSBib290bWVtIGFyZWFzOgogICoKLSAqIGtob19zY3JhdGNoPWxbS01HXSxuW0tNR10sbVtLTUddCiYjNDM7ICoga2hvX2Jvb3RtZW09bFtLTUddLG5bS01HXSxtW0tNR10KICAqCiAgKiBUaGUgZXhwbGljaXQgc2l6ZSBkZWZpbml0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzY2FsZSBkZWZpbml0aW9uLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNjcmF0Y2hfc2NhbGUgX19pbml0ZGF0YSA9IDIwMDsKLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7Ci1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX3Blcm5vZGUgX19pbml0ZGF0YTsKLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfbG93bWVtIF9faW5pdGRhdGE7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBib290bWVtX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7CiYjNDM7c3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9nbG9iYWwgX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgYm9vdG1lbV9zaXplX3Blcm5vZGUgX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgYm9vdG1lbV9zaXplX2xvd21lbSBfX2luaXRkYXRhOwogCi1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApCiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZShjaGFyICpwKQogewogCXNpemVfdCBsZW47CiAJdW5zaWduZWQgbG9uZyBzaXplc1szXTsKQEAgLTcwNyw5ICYjNDM7NzA3LDkgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJbWVtY3B5KHNfc2NhbGUsIHAsIGxlbiAtIDEpOwotCQlyZXQgPSBrc3RydG91aW50KHNfc2NhbGUsIDEwLCAmYW1wO3NjcmF0Y2hfc2NhbGUpOwomIzQzOwkJcmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgJmFtcDtib290bWVtX3NjYWxlKTsKIAkJaWYgKCFyZXQpCi0JCQlwcl9ub3RpY2UoJiMzNDtzY3JhdGNoIHNjYWxlIGlzICVkJSVcbiYjMzQ7LCBzY3JhdGNoX3NjYWxlKTsKJiM0MzsJCQlwcl9ub3RpY2UoJiMzNDtib290bWVtIHNjYWxlIGlzICVkJSVcbiYjMzQ7LCBib290bWVtX3NjYWxlKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTczNyw4MSAmIzQzOzczNyw4MSBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApCiAJaWYgKCpwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplc1swXTsKLQlzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07Ci0Jc2NyYXRjaF9zaXplX3Blcm5vZGUgPSBzaXplc1syXTsKLQlzY3JhdGNoX3NjYWxlID0gMDsKJiM0MzsJYm9vdG1lbV9zaXplX2xvd21lbSA9IHNpemVzWzBdOwomIzQzOwlib290bWVtX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07CiYjNDM7CWJvb3RtZW1fc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07CiYjNDM7CWJvb3RtZW1fc2NhbGUgPSAwOwogCi0JcHJfbm90aWNlKCYjMzQ7c2NyYXRjaCBhcmVhczogbG93bWVtOiAlbGx1TWlCIGdsb2JhbDogJWxsdU1pQiBwZXJub2RlOiAlbGxkTWlCXG4mIzM0OywKLQkJICAodTY0KShzY3JhdGNoX3NpemVfbG93bWVtICZndDsmZ3Q7IDIwKSwKLQkJICAodTY0KShzY3JhdGNoX3NpemVfZ2xvYmFsICZndDsmZ3Q7IDIwKSwKLQkJICAodTY0KShzY3JhdGNoX3NpemVfcGVybm9kZSAmZ3Q7Jmd0OyAyMCkpOwomIzQzOwlwcl9ub3RpY2UoJiMzNDtib290bWVtIGFyZWFzOiBsb3dtZW06ICVsbHVNaUIgZ2xvYmFsOiAlbGx1TWlCIHBlcm5vZGU6ICVsbGRNaUJcbiYjMzQ7LAomIzQzOwkJICAodTY0KShib290bWVtX3NpemVfbG93bWVtICZndDsmZ3Q7IDIwKSwKJiM0MzsJCSAgKHU2NCkoYm9vdG1lbV9zaXplX2dsb2JhbCAmZ3Q7Jmd0OyAyMCksCiYjNDM7CQkgICh1NjQpKGJvb3RtZW1fc2l6ZV9wZXJub2RlICZndDsmZ3Q7IDIwKSk7CiAKIAlyZXR1cm4gMDsKIH0KLWVhcmx5X3BhcmFtKCYjMzQ7a2hvX3NjcmF0Y2gmIzM0Oywga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZSk7CiYjNDM7ZWFybHlfcGFyYW0oJiMzNDtraG9fYm9vdG1lbSYjMzQ7LCBraG9fcGFyc2VfYm9vdG1lbV9zaXplKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZCkKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9zaXplX3VwZGF0ZSh2b2lkKQogewogCS8qCiAJICogSWYgZml4ZWQgc2l6ZXMgYXJlIG5vdCBwcm92aWRlZCB2aWEgY29tbWFuZCBsaW5lLCBjYWxjdWxhdGUgdGhlbSBub3cuCiAJICogUmVtb3ZlIEh1Z2VUTEIgYWxsb2NhdGlvbnMgZnJvbSBpdCBiZWNhdXNlIHRoZXkgbmV2ZXIgZ2V0IGFsbG9jYXRlZAotCSAqIGZyb20gc2NyYXRjaC4KJiM0MzsJICogZnJvbSBib290bWVtLgogCSAqLwotCWlmIChzY3JhdGNoX3NjYWxlKSB7CiYjNDM7CWlmIChib290bWVtX3NjYWxlKSB7CiAJCXBoeXNfYWRkcl90IHNpemU7CiAKIAkJc2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShBUkNIX0xPV19BRERSRVNTX0xJTUlULAogCQkJCQkJICAgTlVNQV9OT19OT0RFKTsKIAkJc2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoQVJDSF9MT1dfQUREUkVTU19MSU1JVCwKIAkJCQkJCSAgICAgICBOVU1BX05PX05PREUpOwotCQlzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7Ci0JCXNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplOwomIzQzOwkJc2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwOwomIzQzOwkJYm9vdG1lbV9zaXplX2xvd21lbSA9IHNpemU7CiAKIAkJc2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSwKIAkJCQkJCSAgIE5VTUFfTk9fTk9ERSk7CiAJCXNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLAogCQkJCQkJICAgICAgIE5VTUFfTk9fTk9ERSk7Ci0JCXNpemUgPSBzaXplICogc2NyYXRjaF9zY2FsZSAvIDEwMCAtIHNjcmF0Y2hfc2l6ZV9sb3dtZW07Ci0JCXNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSBzaXplOwomIzQzOwkJc2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwIC0gYm9vdG1lbV9zaXplX2xvd21lbTsKJiM0MzsJCWJvb3RtZW1fc2l6ZV9nbG9iYWwgPSBzaXplOwogCX0KIAogCS8qCi0JICogU2NyYXRjaCBhcmVhcyBhcmUgcmVsZWFzZWQgYXMgTUlHUkFURV9DTUEuIFJvdW5kIHRoZW0gdXAgdG8gdGhlIHJpZ2h0CiYjNDM7CSAqIGJvb3RtZW0gYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodAogCSAqIHNpemUuCiAJICovCi0Jc2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTsKLQlzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpOwomIzQzOwlib290bWVtX3NpemVfbG93bWVtID0gcm91bmRfdXAoYm9vdG1lbV9zaXplX2xvd21lbSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpOwomIzQzOwlib290bWVtX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoYm9vdG1lbV9zaXplX2dsb2JhbCwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpOwogfQogCi1zdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpCiYjNDM7c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBib290bWVtX3NpemVfbm9kZShpbnQgbmlkKQogewogCXBoeXNfYWRkcl90IHNpemU7CiAKLQlpZiAoc2NyYXRjaF9zY2FsZSkgewomIzQzOwlpZiAoYm9vdG1lbV9zY2FsZSkgewogCQlzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLAogCQkJCQkJICAgbmlkKTsKIAkJLyogRG8gbm90IGNvdW50IEh1Z2VUTEIgcGFnZXMuICovCiAJCXNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLAogCQkJCQkJICAgICAgIG5pZCk7Ci0JCXNpemUgPSBzaXplICogc2NyYXRjaF9zY2FsZSAvIDEwMDsKJiM0MzsJCXNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDsKIAl9IGVsc2UgewotCQlzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7CiYjNDM7CQlzaXplID0gYm9vdG1lbV9zaXplX3Blcm5vZGU7CiAJfQogCi0JcmV0dXJuIHJvdW5kX3VwKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTsKIH0KIAotYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKQomIzQzO2Jvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSkKIHsKLQlwaHlzX2FkZHJfdCBzY3JhdGNoX3N0YXJ0LCBzY3JhdGNoX2VuZDsKJiM0MzsJcGh5c19hZGRyX3QgYm9vdG1lbV9zdGFydCwgYm9vdG1lbV9lbmQ7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykgewotCQlzY3JhdGNoX3N0YXJ0ID0ga2hvX3NjcmF0Y2hbaV0uYWRkcjsKLQkJc2NyYXRjaF9lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICYjNDM7IGtob19zY3JhdGNoW2ldLnNpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBraG9fYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib290bWVtX3N0YXJ0ID0ga2hvX2Jvb3RtZW1baV0uYWRkcjsKJiM0MzsJCWJvb3RtZW1fZW5kID0ga2hvX2Jvb3RtZW1baV0uYWRkciAmIzQzOyBraG9fYm9vdG1lbVtpXS5zaXplOwogCi0JCWlmIChwaHlzICZsdDsgc2NyYXRjaF9lbmQgJmFtcDsmYW1wOyAocGh5cyAmIzQzOyBzaXplKSAmZ3Q7IHNjcmF0Y2hfc3RhcnQpCiYjNDM7CQlpZiAocGh5cyAmbHQ7IGJvb3RtZW1fZW5kICZhbXA7JmFtcDsgKHBoeXMgJiM0Mzsgc2l6ZSkgJmd0OyBib290bWVtX3N0YXJ0KQogCQkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC04MTksNyAmIzQzOzgxOSw3IEBAIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSkKIH0KIAogLyoqCi0gKiBraG9fcmVzZXJ2ZV9zY3JhdGNoIC0gUmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IGZvciBrZXhlYwomIzQzOyAqIGtob19yZXNlcnZlX2Jvb3RtZW0gLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjCiAgKgogICogV2l0aCBLSE8gd2UgY2FuIHByZXNlcnZlIGFyYml0cmFyeSBwYWdlcyBpbiB0aGUgc3lzdGVtLiBUbyBlbnN1cmUgd2Ugc3RpbGwKICAqIGhhdmUgYSBsYXJnZSBjb250aWd1b3VzIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiB3ZSBzZWFyY2ggdGhlIHBoeXNpY2FsIGFkZHJlc3MKQEAgLTgyNyw3ICYjNDM7ODI3LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKQogICogYWN0aXZlLiBUaGlzIENNQSByZWdpb24gd2lsbCBvbmx5IGJlIHVzZWQgZm9yIG1vdmFibGUgcGFnZXMgd2hpY2ggYXJlIG5vdCBhCiAgKiBwcm9ibGVtIGZvciB1cyBkdXJpbmcgS0hPIGJlY2F1c2Ugd2UgY2FuIGp1c3QgbW92ZSB0aGVtIHNvbWV3aGVyZSBlbHNlLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9ib290bWVtKHZvaWQpCiB7CiAJcGh5c19hZGRyX3QgYWRkciwgc2l6ZTsKIAlpbnQgbmlkLCBpID0gMDsKQEAgLTgzNSw3MyAmIzQzOzgzNSw3MyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQogCWlmICgha2hvX2VuYWJsZSkKIAkJcmV0dXJuOwogCi0Jc2NyYXRjaF9zaXplX3VwZGF0ZSgpOwomIzQzOwlib290bWVtX3NpemVfdXBkYXRlKCk7CiAKIAkvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovCi0Ja2hvX3NjcmF0Y2hfY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgJiM0MzsgMjsKLQlzaXplID0ga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCk7Ci0Ja2hvX3NjcmF0Y2ggPSBtZW1ibG9ja19hbGxvYyhzaXplLCBQQUdFX1NJWkUpOwotCWlmICgha2hvX3NjcmF0Y2gpIHsKLQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxuJiMzNDspOwomIzQzOwlraG9fYm9vdG1lbV9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyOwomIzQzOwlzaXplID0ga2hvX2Jvb3RtZW1fY250ICogc2l6ZW9mKCpraG9fYm9vdG1lbSk7CiYjNDM7CWtob19ib290bWVtID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTsKJiM0MzsJaWYgKCFraG9fYm9vdG1lbSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgYm9vdG1lbSBhcnJheVxuJiMzNDspOwogCQlnb3RvIGVycl9kaXNhYmxlX2tobzsKIAl9CiAKIAkvKgotCSAqIHJlc2VydmUgc2NyYXRjaCBhcmVhIGluIGxvdyBtZW1vcnkgZm9yIGxvd21lbSBhbGxvY2F0aW9ucyBpbiB0aGUKJiM0MzsJICogcmVzZXJ2ZSBib290bWVtIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZQogCSAqIG5leHQga2VybmVsCiAJICovCi0Jc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07Ci0JYWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsCiYjNDM7CXNpemUgPSBib290bWVtX3NpemVfbG93bWVtOwomIzQzOwlhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywgMCwKIAkJCQkJIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpOwogCWlmICghYWRkcikgewotCQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcbiYjMzQ7KTsKLQkJZ290byBlcnJfZnJlZV9zY3JhdGNoX2Rlc2M7CiYjNDM7CQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfZnJlZV9ib290bWVtX2Rlc2M7CiAJfQogCi0Ja2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7Ci0Ja2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7CiYjNDM7CWtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyOwomIzQzOwlraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTsKIAlpJiM0MzsmIzQzOzsKIAogCS8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqLwotCXNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsOwotCWFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTsKJiM0MzsJc2l6ZSA9IGJvb3RtZW1fc2l6ZV9nbG9iYWw7CiYjNDM7CWFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTsKIAlpZiAoIWFkZHIpIHsKLQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIHNjcmF0Y2ggYnVmZmVyXG4mIzM0Oyk7Ci0JCWdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhczsKJiM0MzsJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBib290bWVtXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGVycl9mcmVlX2Jvb3RtZW1fYXJlYXM7CiAJfQogCi0Ja2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7Ci0Ja2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7CiYjNDM7CWtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyOwomIzQzOwlraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTsKIAlpJiM0MzsmIzQzOzsKIAogCS8qCiAJICogTG9vcCBvdmVyIG5vZGVzIHRoYXQgaGF2ZSBib3RoIG1lbW9yeSBhbmQgYXJlIG9ubGluZS4gU2tpcAotCSAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS4KJiM0MzsJICogbWVtb3J5bGVzcyBub2RlcywgYXMgd2UgY2FuIG5vdCBhbGxvY2F0ZSBib290bWVtIGFyZWFzIHRoZXJlLgogCSAqLwogCWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgewotCQlzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTsKLQkJYWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywKJiM0MzsJCXNpemUgPSBib290bWVtX3NpemVfbm9kZShuaWQpOwomIzQzOwkJYWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywKIAkJCQkJCTAsIE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsCiAJCQkJCQluaWQsIHRydWUpOwogCQlpZiAoIWFkZHIpIHsKLQkJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIG5pZCAlZCBzY3JhdGNoIGJ1ZmZlclxuJiMzNDssIG5pZCk7Ci0JCQlnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgbmlkICVkIGJvb3RtZW1cbiYjMzQ7LCBuaWQpOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhczsKIAkJfQogCi0JCWtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyOwotCQlraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTsKJiM0MzsJCWtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyOwomIzQzOwkJa2hvX2Jvb3RtZW1baV0uc2l6ZSA9IHNpemU7CiAJCWkmIzQzOyYjNDM7OwogCX0KIAogCXJldHVybjsKIAotZXJyX2ZyZWVfc2NyYXRjaF9hcmVhczoKJiM0MztlcnJfZnJlZV9ib290bWVtX2FyZWFzOgogCWZvciAoaS0tOyBpICZndDs9IDA7IGktLSkKLQkJbWVtYmxvY2tfcGh5c19mcmVlKGtob19zY3JhdGNoW2ldLmFkZHIsIGtob19zY3JhdGNoW2ldLnNpemUpOwotZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOgotCW1lbWJsb2NrX2ZyZWUoa2hvX3NjcmF0Y2gsIGtob19zY3JhdGNoX2NudCAqIHNpemVvZigqa2hvX3NjcmF0Y2gpKTsKJiM0MzsJCW1lbWJsb2NrX3BoeXNfZnJlZShraG9fYm9vdG1lbVtpXS5hZGRyLCBraG9fYm9vdG1lbVtpXS5zaXplKTsKJiM0MztlcnJfZnJlZV9ib290bWVtX2Rlc2M6CiYjNDM7CW1lbWJsb2NrX2ZyZWUoa2hvX2Jvb3RtZW0sIGtob19ib290bWVtX2NudCAqIHNpemVvZigqa2hvX2Jvb3RtZW0pKTsKIGVycl9kaXNhYmxlX2tobzoKLQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcmVhLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcbiYjMzQ7KTsKJiM0MzsJcHJfd2FybigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGJvb3RtZW0sIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxuJiMzNDspOwogCWtob19lbmFibGUgPSBmYWxzZTsKIH0KIApAQCAtOTExLDExICYjNDM7OTExLDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpCiAgKiBvbiBzbWFsbGVyIHN5c3RlbXMuIFRoZSBhbGdvcml0aG0gaXRzZWxmIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHZhbHVlLAogICogc28gaXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBkaWZmZXJlbnQgaGV1cmlzdGljIGxhdGVyIGlmIG5lZWRlZC4KICAqLwotI2RlZmluZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRQkJU1pfMUcKLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUCWNvbnN0X2lsb2cyKEtIT19TQ1JBVENIX0VYVF9CTEtTSVpFKQomIzQzOyNkZWZpbmUgS0hPX0RJU0NPVkVSX0JMS1NJWkUJCVNaXzFHCiYjNDM7I2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0hJRlQJY29uc3RfaWxvZzIoS0hPX0RJU0NPVkVSX0JMS1NJWkUpCiAKIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovCi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSkKJiM0MztzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBraG9fcmFkaXhfdHJlZSAqYnVzeV9ibG9ja3MgPSBkYXRhOwogCXBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7CkBAIC05MzAsNTQgJiM0Mzs5MzAsNTcgQEAgc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX2xlYWYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpCiAJZW5kID0gc3RhcnQgJiM0MzsgKDFVTCAmbHQ7Jmx0OyAob3JkZXIgJiM0MzsgUEFHRV9TSElGVCkpOwogCiAJd2hpbGUgKHN0YXJ0ICZsdDsgZW5kKSB7Ci0JCWVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCAmZ3Q7Jmd0OyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQpOwomIzQzOwkJZXJyID0ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHN0YXJ0ICZndDsmZ3Q7IEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCXN0YXJ0ICYjNDM7PSAoMVVMICZsdDsmbHQ7IEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7CiYjNDM7CQlzdGFydCAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBLSE9fRElTQ09WRVJfQkxLU0hJRlQpOwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKiBDYWxsZWQgZm9yIHRoZSBLSE8gcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlLiAqLwotc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSkKJiM0MztzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfd2Fsa19ub2RlKHBoeXNfYWRkcl90IHBoeXMsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGtob19yYWRpeF90cmVlICpidXN5X2Jsb2NrcyA9IGRhdGE7CiAKLQlyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHBoeXMgJmd0OyZndDsgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTsKJiM0MzsJcmV0dXJuIGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBwaHlzICZndDsmZ3Q7IEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7CiB9CiAKIC8qIENhbGxlZCBmb3IgdGhlIGJ1c3kgYmxvY2sgcmFkaXggdHJlZS4gKi8KLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKQomIzQzO3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl9tYXJrX25vcHJzcnYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpCiB7CiAJcGh5c19hZGRyX3QgKnByZXZfZW5kID0gZGF0YTsKLQlwaHlzX2FkZHJfdCBzdGFydCA9IGtleSAmbHQ7Jmx0OyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQ7CiYjNDM7CXBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5ICZsdDsmbHQ7IEtIT19ESVNDT1ZFUl9CTEtTSElGVDsKIAlpbnQgZXJyOwogCiAJaWYgKHN0YXJ0ICZndDsgKnByZXZfZW5kKSB7Ci0JCWVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7CiYjNDM7CQllcnIgPSBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQkqcHJldl9lbmQgPSBzdGFydCAmIzQzOyAoMVVMICZsdDsmbHQ7IEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7CiYjNDM7CSpwcmV2X2VuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgJmx0OyZsdDsgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIGtob19leHRlbmRfc2NyYXRjaCAtIEV4dGVuZCB0aGUgc2NyYXRjaCByZWdpb25zCiYjNDM7ICoga2hvX2Rpc2NvdmVyX25vcHJzcnYgLSBEaXNjb3ZlciBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zCiYjNDM7ICoKJiM0MzsgKiBEaXNjb3ZlcnMgbWVtb3J5IHJhbmdlcyB3aXRoIG5vIHByZXNlcnZlZCBtZW1vcnkgYW5kIG1hcmtzIGl0IGFzIE5PUFJTUlYuCiYjNDM7ICogVGhpcyBsZXRzIG1lbWJsb2NrIGFsbG9jYXRlIG1lbW9yeSBmcm9tIGFyZWFzIG91dHNpZGUgS0hPIGJvb3RtZW0uCiAgKgogICogVGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUgbWl4ZXMgYm90aCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlcgogICogaW50byBhIHNpbmdsZSBrZXkuIFRoaXMgbWFrZXMgaXQgaGFyZCB0byBsb29rIGZvciBmcmVlIHJhbmdlcyBkaXJlY3RseS4gVGhpcwogICogZnVuY3Rpb24gZmlyc3Qgd2Fsa3MgdGhlIHJhZGl4IHRyZWUgYW5kIGRpZ2VzdHMgaXQgZG93biBpbnRvIGFub3RoZXIgcmFkaXgKLSAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkUgd2hpY2gKLSAqIGNvbnRhaW4gcHJlc2VydmVkIG1lbW9yeS4KJiM0MzsgKiB0cmVlLCB3aG9zZSBrZXlzIGlkZW50aWZ5IGJsb2NrcyBvZiBzaXplIEtIT19ESVNDT1ZFUl9CTEtTSVpFIHdoaWNoIGNvbnRhaW4KJiM0MzsgKiBwcmVzZXJ2ZWQgbWVtb3J5LgogICoKICAqIFRoZW4gaXQgd2Fsa3MgdGhlIGRpZ2VzdGVkIHJhZGl4IHRyZWUgYW5kIG1hcmtzIGV2ZXJ5dGhpbmcgdGhhdCBkb2VzbiYjMzk7dCBoYXZlCi0gKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIHNjcmF0Y2guCiYjNDM7ICogcHJlc2VydmVkIG1lbW9yeSBhcyBOT1BSU1JWLgogICoKLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gc2NyYXRjaCBoYXMKJiM0MzsgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGJvb3RtZW0gaGFzCiAgKiBhdmFpbGFibGUgc3BhY2UuCiAgKgogICogTk9URTogVGhlIHBhZ2VzIG9mIHRoZSBLSE8gcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlIHRhYmxlcyBhcmUgbm90IG1hcmtlZApAQCAtOTg2LDE4ICYjNDM7OTg5LDE4IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKQogICogdGhlbSB0byBiZSAmIzM0O3ByZXNlcnZlZCBtZW1vcnkmIzM0OyBhbmQgbWFya3MgdGhlaXIgYmxvY2tzIGFzIGJ1c3kuCiAgKgogICogTk9URTogZWZpX2luaXQoKTo6cmVzZXJ2ZV9yZWdpb25zKCkgcmVtb3ZlcyBhbGwgcmVnaW9ucyBleGNlcHQKLSAqIE1FTUJMT0NLX0tIT19TQ1JBVENILiBUaGlzIGZ1bmN0aW9uIGFkZHMgc3VjaCByZWdpb25zIGJ1dCB0aGV5IGFyZSBub3QgS0hPCi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZQomIzQzOyAqIE1FTUJMT0NLX0tIT19OT1BSU1JWLiBUaGlzIGZ1bmN0aW9uIGFkZHMgc3VjaCByZWdpb25zIGJ1dCB0aGV5IGFyZSBub3QgS0hPCiYjNDM7ICogYm9vdCBtZW1vcnksIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKICAqIGNhbGxlZCBhZnRlciByZXNlcnZlX3JlZ2lvbnMoKS4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKQogewogCWNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7Ci0JCS5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsCi0JCS5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsCiYjNDM7CQkubGVhZiA9IGtob19kaXNjb3Zlcl93YWxrX2xlYWYsCiYjNDM7CQkubm9kZSA9IGtob19kaXNjb3Zlcl93YWxrX25vZGUsCiAJfTsKIAljb25zdCBzdHJ1Y3Qga2hvX3JhZGl4X3dhbGtfY2IgZXh0X2NiID0gewotCQkubGVhZiA9IGtob19leHRfbWFya19zY3JhdGNoLAomIzQzOwkJLmxlYWYgPSBraG9fZGlzY292ZXJfbWFya19ub3Byc3J2LAogCX07CiAJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidXN5X3JhZGl4X2NsYXNzOwogCXN0cnVjdCBraG9fcmFkaXhfdHJlZSBidXN5X2Jsb2NrczsKQEAgLTEwMjIsMjEgJiM0MzsxMDI1LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fZXh0ZW5kX3NjcmF0Y2godm9pZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCS8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIHNjcmF0Y2guICovCiYjNDM7CS8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIG5vcHJzcnYuICovCiAJZXJyID0ga2hvX3JhZGl4X3dhbGtfdHJlZSgmYW1wO2J1c3lfYmxvY2tzLCAmYW1wO2V4dF9jYiwgJmFtcDtwcmV2X2VuZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAkvKiBNYXJrIGV2ZXJ5dGhpbmcgZnJvbSBsYXN0IGJ1c3kgYmxvY2sgdG8gZW5kIG9mIERSQU0uICovCiAJaWYgKHByZXZfZW5kICZsdDsgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSkKLQkJZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTsKJiM0MzsJCWVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7CiAKIAkvKiBmYWxsdGhyb3VnaCAqLwogb3V0OgogCWtob19yYWRpeF9kZXN0cm95X3RyZWUoJmFtcDtidXN5X2Jsb2Nrcyk7CiBwcmludDoKIAlpZiAoZXJyKQotCQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gZXh0ZW5kIHNjcmF0Y2g6ICVwZVxuJiMzNDssIEVSUl9QVFIoZXJyKSk7CiYjNDM7CQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gZGlzY292ZXIgZXh0cmEgYWxsb2NhdGFibGUgbWVtb3J5OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKGVycikpOwogfQogCiAvKioKQEAgLTExNTAsNyAmIzQzOzExNTMsNyBAQCBpbnQga2hvX3ByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJY29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSAmYW1wOyZhbXA7Ci0JICAgIFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCwgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKSkpCiYjNDM7CSAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBraG9fcmFkaXhfYWRkX2tleSh0cmVlLCBraG9fZW5jb2RlX3JhZGl4X2tleShQRk5fUEhZUyhwZm4pLApAQCAtMTIyOCw3ICYjNDM7MTIzMSw3IEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAJaW50IGVyciA9IDA7CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpICZhbXA7JmFtcDsKLQkgICAgV0FSTl9PTihraG9fc2NyYXRjaF9vdmVybGFwKHN0YXJ0X3BmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkgICAgV0FSTl9PTihraG9fYm9vdG1lbV9vdmVybGFwKHN0YXJ0X3BmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULAogCQkJCQlucl9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTgyNSw3ICYjNDM7MTgyOCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpCiAKIAllcnIgPSBraG9fcmFkaXhfaW5pdF90cmVlKHRyZWUsIE5VTEwpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfc2NyYXRjaDsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfYm9vdG1lbTsKIAogCWtob19vdXQuZmR0ID0ga2hvX2FsbG9jX3ByZXNlcnZlKFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihraG9fb3V0LmZkdCkpIHsKQEAgLTE4NTQsOSAmIzQzOzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlX3BmbiA9IFBIWVNfUEZOKGtob19zY3JhdGNoW2ldLmFkZHIpOwotCQl1bnNpZ25lZCBsb25nIGNvdW50ID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fYm9vdG1lbVtpXS5hZGRyKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fYm9vdG1lbVtpXS5zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXVuc2lnbmVkIGxvbmcgcGZuOwogCiAJCS8qCkBAIC0xODY0LDEwICYjNDM7MTg2NywxMCBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKQogCQkgKiBjb3JyZXNwb25kaW5nIFBSRVNFTlQgYml0IGluIHRoZSBrZXJuZWwgcGFnZSB0YWJsZS4KIAkJICogU3Vic2VxdWVudCBrbWVtbGVhayBzY2FucyBvZiB0aGVzZSBwYWdlcyBjYXVzZSB0aGUKIAkJICogbm9uLVBSRVNFTlQgcGFnZSBmYXVsdHMuCi0JCSAqIE1hcmsgc2NyYXRjaCBhcmVhcyB3aXRoIGttZW1sZWFrX2lnbm9yZV9waHlzKCkgdG8gZXhjbHVkZQomIzQzOwkJICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlCiAJCSAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy4KIAkJICovCi0JCWttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpOwomIzQzOwkJa21lbWxlYWtfaWdub3JlX3BoeXMoa2hvX2Jvb3RtZW1baV0uYWRkcik7CiAJCWZvciAocGZuID0gYmFzZV9wZm47IHBmbiAmbHQ7IGJhc2VfcGZuICYjNDM7IGNvdW50OwogCQkgICAgIHBmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKQogCQkJaW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHBmbl90b19wYWdlKHBmbikpOwpAQCAtMTg4MywxMSAmIzQzOzE4ODYsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZCkKIAlraG9fdW5wcmVzZXJ2ZV9mcmVlKGtob19vdXQuZmR0KTsKIGVycl9mcmVlX2tob19yYWRpeF90cmVlOgogCWtob19yYWRpeF9kZXN0cm95X3RyZWUodHJlZSk7Ci1lcnJfZnJlZV9zY3JhdGNoOgomIzQzO2Vycl9mcmVlX2Jvb3RtZW06CiAJa2hvX291dC5mZHQgPSBOVUxMOwotCWZvciAoaW50IGkgPSAwOyBpICZsdDsga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykgewotCQl2b2lkICpzdGFydCA9IF9fdmEoa2hvX3NjcmF0Y2hbaV0uYWRkcik7Ci0JCXZvaWQgKmVuZCA9IHN0YXJ0ICYjNDM7IGtob19zY3JhdGNoW2ldLnNpemU7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpOwomIzQzOwkJdm9pZCAqZW5kID0gc3RhcnQgJiM0Mzsga2hvX2Jvb3RtZW1baV0uc2l6ZTsKIAogCQlmcmVlX3Jlc2VydmVkX2FyZWEoc3RhcnQsIGVuZCwgLTEsICYjMzQ7JiMzNDspOwogCX0KQEAgLTE5MDYsNyAmIzQzOzE5MDksNyBAQCB2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkKIAogCS8qCiAJICoga2hvX2dldF9tZW1fbWFwKCkgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBJZiBpdCBmYWlscywga2hvX3BvcHVsYXRlKCkKLQkgKiBjYXRjaGVzIHRoYXQgYW5kIG5ldmVyIHNldHMga2hvX2luLnNjcmF0Y2hfcGh5cywgd2hpY2ggc3RvcHMgbWVtb3J5CiYjNDM7CSAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uYm9vdG1lbV9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnkKIAkgKiByZXRyaWV2YWwuCiAJICovCiAJbWVtX21hcCA9IGtob19nZXRfbWVtX21hcChmZHQpOwpAQCAtMTkxNCw0MSAmIzQzOzE5MTcsNDAgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpCiAJCWdvdG8gZXJyOwogCiAJLyoKLQkgKiBraG9fc2NyYXRjaF9vdmVybGFwKCkgbmVlZHMga2hvX3NjcmF0Y2ggdG8gYmUgaW5pdGlhbGl6ZWQuIEl0Ci0JICogaXMgdXNlZCBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdAotCSAqIGVhcmx5LgomIzQzOwkgKiBraG9fYm9vdG1lbV9vdmVybGFwKCkgbmVlZHMga2hvX2Jvb3RtZW0gdG8gYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIHVzZWQKJiM0MzsJICogYnkgZnJlZV9hcmVhX2luaXQoKSBvbiBLSE8gYm9vdHMsIHNvIGluaXRpYWxpemUgaXQgZWFybHkuCiAJICovCi0Ja2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7CiYjNDM7CWtob19ib290bWVtID0gcGh5c190b192aXJ0KGtob19pbi5ib290bWVtX3BoeXMpOwogCiAJaWYgKGtob19yYWRpeF9pbml0X3RyZWUoJmFtcDtraG9faW4ucmFkaXhfdHJlZSwgbWVtX21hcCkpCiAJCWdvdG8gZXJyOwogCi0Ja2hvX2V4dGVuZF9zY3JhdGNoKCk7CiYjNDM7CWtob19kaXNjb3Zlcl9ub3Byc3J2KCk7CiAKIAlyZXR1cm47CiAKIGVycjoKIAkvKgogCSAqIEZhaWxlZCB0byBpbml0aWFsaXplIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gQ2xlYXIgRkRUCi0JICogYW5kIHNjcmF0Y2ggc28gS0hPIHVzZXJzIGRvbiYjMzk7dCB0cmVhdCBpdCBhcyBhIEtITyBib290LgomIzQzOwkgKiBhbmQgYm9vdG1lbSBzbyBLSE8gdXNlcnMgZG9uJiMzOTt0IHRyZWF0IGl0IGFzIGEgS0hPIGJvb3QuCiAJICovCiAJa2hvX2luLmZkdF9waHlzID0gMDsKLQlraG9faW4uc2NyYXRjaF9waHlzID0gMDsKJiM0MzsJa2hvX2luLmJvb3RtZW1fcGh5cyA9IDA7CiB9CiAKIHZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdCh2b2lkKQogewotCWlmIChraG9faW4uc2NyYXRjaF9waHlzKQomIzQzOwlpZiAoa2hvX2luLmJvb3RtZW1fcGh5cykKIAkJa2hvX21lbV9yZXRyaWV2ZSgpOwogCWVsc2UKLQkJa2hvX3Jlc2VydmVfc2NyYXRjaCgpOwomIzQzOwkJa2hvX3Jlc2VydmVfYm9vdG1lbSgpOwogfQogCiB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLAotCQkJIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cywgdTY0IHNjcmF0Y2hfbGVuKQomIzQzOwkJCSBwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbikKIHsKLQl1bnNpZ25lZCBpbnQgc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2xlbiAvIHNpemVvZigqa2hvX3NjcmF0Y2gpOwotCXN0cnVjdCBraG9fc2NyYXRjaCAqc2NyYXRjaCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGludCBib290bWVtX2NudCA9IGJvb3RtZW1fbGVuIC8gc2l6ZW9mKCpraG9fYm9vdG1lbSk7CiYjNDM7CXN0cnVjdCBraG9fYm9vdG1lbSAqYm9vdG1lbSA9IE5VTEw7CiAJcGh5c19hZGRyX3QgbWVtX21hcF9waHlzOwogCXZvaWQgKmZkdCA9IE5VTEw7CiAJYm9vbCBwb3B1bGF0ZWQgPSBmYWxzZTsKQEAgLTE5NzcsNTIgJiM0MzsxOTc5LDUyIEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sCiAJaWYgKCFtZW1fbWFwX3BoeXMpCiAJCWdvdG8gdW5tYXBfZmR0OwogCi0Jc2NyYXRjaCA9IGVhcmx5X21lbXJlbWFwKHNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pOwotCWlmICghc2NyYXRjaCkgewotCQlwcl93YXJuKCYjMzQ7c2V0dXA6IGZhaWxlZCB0byBtZW1yZW1hcCBzY3JhdGNoIChwaHlzPTB4JWxseCwgbGVuPSVsbGQpXG4mIzM0OywKLQkJCXNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pOwomIzQzOwlib290bWVtID0gZWFybHlfbWVtcmVtYXAoYm9vdG1lbV9waHlzLCBib290bWVtX2xlbik7CiYjNDM7CWlmICghYm9vdG1lbSkgewomIzQzOwkJcHJfd2FybigmIzM0O3NldHVwOiBmYWlsZWQgdG8gbWVtcmVtYXAgYm9vdG1lbSAocGh5cz0weCVsbHgsIGxlbj0lbGxkKVxuJiMzNDssCiYjNDM7CQkJYm9vdG1lbV9waHlzLCBib290bWVtX2xlbik7CiAJCWdvdG8gdW5tYXBfZmR0OwogCX0KIAogCS8qCi0JICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHRvIHVzZSBmb3IgZWFybHkgYm9vdAotCSAqIHB1cnBvcnNlcyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgc28gdGhhdCB3ZSBjYW4gcmVzaXplIHRoZQotCSAqIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC4KJiM0MzsJICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyB0bwomIzQzOwkgKiB1c2UgZm9yIGVhcmx5IGJvb3QgcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhbgomIzQzOwkgKiByZXNpemUgdGhlIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC4KIAkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmFyZWEgPSAmYW1wO3NjcmF0Y2hbaV07CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSAmYW1wO2Jvb3RtZW1baV07CiAJCXU2NCBzaXplID0gYXJlYS0mZ3Q7c2l6ZTsKIAogCQltZW1ibG9ja19hZGQoYXJlYS0mZ3Q7YWRkciwgc2l6ZSk7Ci0JCWVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS0mZ3Q7YWRkciwgc2l6ZSk7CiYjNDM7CQllcnIgPSBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KGFyZWEtJmd0O2FkZHIsIHNpemUpOwogCQlpZiAoZXJyKSB7Ci0JCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIG1hcmsgdGhlIHNjcmF0Y2ggcmVnaW9uIDB4JXBhJiM0MzsweCVwYTogJXBlJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O2ZhaWxlZCB0byBtYXJrIHRoZSBib290bWVtIHJlZ2lvbiAweCVwYSYjNDM7MHglcGE6ICVwZSYjMzQ7LAogCQkJCSZhbXA7YXJlYS0mZ3Q7YWRkciwgJmFtcDtzaXplLCBFUlJfUFRSKGVycikpOwotCQkJZ290byB1bm1hcF9zY3JhdGNoOwomIzQzOwkJCWdvdG8gdW5tYXBfYm9vdG1lbTsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgc2NyYXRjaCYjMzQ7LCAmYW1wO2FyZWEtJmd0O2FkZHIsICZhbXA7c2l6ZSk7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgYm9vdG1lbSYjMzQ7LCAmYW1wO2FyZWEtJmd0O2FkZHIsICZhbXA7c2l6ZSk7CiAJfQogCi0JbWVtYmxvY2tfcmVzZXJ2ZShzY3JhdGNoX3BoeXMsIHNjcmF0Y2hfbGVuKTsKJiM0MzsJbWVtYmxvY2tfcmVzZXJ2ZShib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTsKIAogCS8qCi0JICogTm93IHRoYXQgd2UgaGF2ZSBhIHZpYWJsZSByZWdpb24gb2Ygc2NyYXRjaCBtZW1vcnksIGxldCYjMzk7cyB0ZWxsCiYjNDM7CSAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIGJvb3QgbWVtb3J5LCBsZXQmIzM5O3MgdGVsbAogCSAqIHRoZSBtZW1ibG9ja3MgYWxsb2NhdG9yIHRvIG9ubHkgdXNlIHRoYXQgZm9yIGFueSBhbGxvY2F0aW9ucy4KIAkgKiBUaGF0IHdheSB3ZSBlbnN1cmUgdGhhdCBub3RoaW5nIHNjcmliYmxlcyBvdmVyIGluIHVzZSBkYXRhIHdoaWxlCiAJICogd2UgaW5pdGlhbGl6ZSB0aGUgcGFnZSB0YWJsZXMgd2hpY2ggd2Ugd2lsbCBuZWVkIHRvIGluZ2VzdCBhbGwKIAkgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC4KIAkgKi8KLQltZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSgpOwomIzQzOwltZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSgpOwogCiAJa2hvX2luLmZkdF9waHlzID0gZmR0X3BoeXM7Ci0Ja2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5czsKLQlraG9fc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2NudDsKJiM0MzsJa2hvX2luLmJvb3RtZW1fcGh5cyA9IGJvb3RtZW1fcGh5czsKJiM0MzsJa2hvX2Jvb3RtZW1fY250ID0gYm9vdG1lbV9jbnQ7CiAKIAlwb3B1bGF0ZWQgPSB0cnVlOwogCXByX2luZm8oJiMzNDtmb3VuZCBrZXhlYyBoYW5kb3ZlciBkYXRhLlxuJiMzNDspOwogCi11bm1hcF9zY3JhdGNoOgotCWVhcmx5X21lbXVubWFwKHNjcmF0Y2gsIHNjcmF0Y2hfbGVuKTsKJiM0Mzt1bm1hcF9ib290bWVtOgomIzQzOwllYXJseV9tZW11bm1hcChib290bWVtLCBib290bWVtX2xlbik7CiB1bm1hcF9mZHQ6CiAJZWFybHlfbWVtdW5tYXAoZmR0LCBmZHRfbGVuKTsKIHJlcG9ydDoKQEAgLTIwMzQsNDcgJiM0MzsyMDM2LDQ3IEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sCiAKIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiB7Ci0Jc3NpemVfdCBzY3JhdGNoX3NpemU7CiYjNDM7CXNzaXplX3QgYm9vdG1lbV9zaXplOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBrZXhlY19idWYgc2NyYXRjaDsKJiM0MzsJc3RydWN0IGtleGVjX2J1ZiBib290bWVtOwogCiAJaWYgKCFraG9fZW5hYmxlIHx8IGltYWdlLSZndDt0eXBlID09IEtFWEVDX1RZUEVfQ1JBU0gpCiAJCXJldHVybiAwOwogCiAJaW1hZ2UtJmd0O2toby5mZHQgPSB2aXJ0X3RvX3BoeXMoa2hvX291dC5mZHQpOwogCi0Jc2NyYXRjaF9zaXplID0gc2l6ZW9mKCpraG9fc2NyYXRjaCkgKiBraG9fc2NyYXRjaF9jbnQ7Ci0Jc2NyYXRjaCA9IChzdHJ1Y3Qga2V4ZWNfYnVmKXsKJiM0MzsJYm9vdG1lbV9zaXplID0gc2l6ZW9mKCpraG9fYm9vdG1lbSkgKiBraG9fYm9vdG1lbV9jbnQ7CiYjNDM7CWJvb3RtZW0gPSAoc3RydWN0IGtleGVjX2J1Zil7CiAJCS5pbWFnZSA9IGltYWdlLAotCQkuYnVmZmVyID0ga2hvX3NjcmF0Y2gsCi0JCS5idWZzeiA9IHNjcmF0Y2hfc2l6ZSwKJiM0MzsJCS5idWZmZXIgPSBraG9fYm9vdG1lbSwKJiM0MzsJCS5idWZzeiA9IGJvb3RtZW1fc2l6ZSwKIAkJLm1lbSA9IEtFWEVDX0JVRl9NRU1fVU5LTk9XTiwKLQkJLm1lbXN6ID0gc2NyYXRjaF9zaXplLAomIzQzOwkJLm1lbXN6ID0gYm9vdG1lbV9zaXplLAogCQkuYnVmX2FsaWduID0gU1pfNjRLLCAvKiBNYWtlcyBpdCBlYXNpZXIgdG8gbWFwICovCiAJCS5idWZfbWF4ID0gVUxPTkdfTUFYLAogCQkudG9wX2Rvd24gPSB0cnVlLAogCX07Ci0JZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcigmYW1wO3NjcmF0Y2gpOwomIzQzOwllcnIgPSBrZXhlY19hZGRfYnVmZmVyKCZhbXA7Ym9vdG1lbSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQlpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2ggPSAmYW1wO2ltYWdlLSZndDtzZWdtZW50W2ltYWdlLSZndDtucl9zZWdtZW50cyAtIDFdOwomIzQzOwlpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0gPSAmYW1wO2ltYWdlLSZndDtzZWdtZW50W2ltYWdlLSZndDtucl9zZWdtZW50cyAtIDFdOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga2hvX3dhbGtfc2NyYXRjaChzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAomIzQzO3N0YXRpYyBpbnQga2hvX3dhbGtfYm9vdG1lbShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogCQkJICAgIGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKQogewogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHJlc291cmNlIHJlcyA9IHsKLQkJCS5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsCi0JCQkuZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciAmIzQzOyBraG9fc2NyYXRjaFtpXS5zaXplIC0gMSwKJiM0MzsJCQkuc3RhcnQgPSBraG9fYm9vdG1lbVtpXS5hZGRyLAomIzQzOwkJCS5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICYjNDM7IGtob19ib290bWVtW2ldLnNpemUgLSAxLAogCQl9OwogCi0JCS8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gc2NyYXRjaCByZWdpb24gKi8KJiM0MzsJCS8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gYm9vdG1lbSByZWdpb24gKi8KIAkJcmV0ID0gZnVuYygmYW1wO3Jlcywga2J1Zik7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTIwOTEsNyAmIzQzOzIwOTMsNyBAQCBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogCWlmICgha2hvX2VuYWJsZSB8fCBrYnVmLSZndDtpbWFnZS0mZ3Q7dHlwZSA9PSBLRVhFQ19UWVBFX0NSQVNIKQogCQlyZXR1cm4gMTsKIAotCXJldCA9IGtob193YWxrX3NjcmF0Y2goa2J1ZiwgZnVuYyk7CiYjNDM7CXJldCA9IGtob193YWxrX2Jvb3RtZW0oa2J1ZiwgZnVuYyk7CiAKIAlyZXR1cm4gcmV0ID09IDEgPyAwIDogLUVBRERSTk9UQVZBSUw7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMKaW5kZXggMjU3ZWU4YTUyYmU2Ni4uN2Q3NDQ3N2RhMGI3OSAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYwpAQCAtNzcsMjMgJiM0Mzs3NywyMyBAQCB2b2lkIGtob19kZWJ1Z2ZzX2Jsb2JfcmVtb3ZlKHN0cnVjdCBraG9fZGVidWdmcyAqZGJnLCB2b2lkICpibG9iKQogCX0KIH0KIAotc3RhdGljIGludCBzY3JhdGNoX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiYjNDM7c3RhdGljIGludCBib290bWVtX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KQotCQlzZXFfcHJpbnRmKG0sICYjMzQ7MHglbGx4XG4mIzM0Oywga2hvX3NjcmF0Y2hbaV0uYWRkcik7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykKJiM0MzsJCXNlcV9wcmludGYobSwgJiMzNDsweCVsbHhcbiYjMzQ7LCBraG9fYm9vdG1lbVtpXS5hZGRyKTsKIAogCXJldHVybiAwOwogfQotREVGSU5FX1NIT1dfQVRUUklCVVRFKHNjcmF0Y2hfcGh5cyk7CiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGJvb3RtZW1fcGh5cyk7CiAKLXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiYjNDM7c3RhdGljIGludCBib290bWVtX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspCi0JCXNlcV9wcmludGYobSwgJiMzNDsweCVsbHhcbiYjMzQ7LCBraG9fc2NyYXRjaFtpXS5zaXplKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBraG9fYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJc2VxX3ByaW50ZihtLCAmIzM0OzB4JWxseFxuJiMzNDssIGtob19ib290bWVtW2ldLnNpemUpOwogCiAJcmV0dXJuIDA7CiB9Ci1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9sZW4pOwomIzQzO0RFRklORV9TSE9XX0FUVFJJQlVURShib290bWVtX2xlbik7CiAKIF9faW5pdCB2b2lkIGtob19pbl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcsIGNvbnN0IHZvaWQgKmZkdCkKIHsKQEAgLTE4NiwxMyAmIzQzOzE4NiwxMyBAQCBfX2luaXQgaW50IGtob19vdXRfZGVidWdmc19pbml0KHN0cnVjdCBraG9fZGVidWdmcyAqZGJnKQogCWlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKQogCQlnb3RvIGVycl9ybWRpcjsKIAotCWYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2NyYXRjaF9waHlzJiMzNDssIDA0MDAsIGRpciwgTlVMTCwKLQkJCQkmYW1wO3NjcmF0Y2hfcGh5c19mb3BzKTsKJiM0MzsJZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtib290bWVtX3BoeXMmIzM0OywgMDQwMCwgZGlyLCBOVUxMLAomIzQzOwkJCQkmYW1wO2Jvb3RtZW1fcGh5c19mb3BzKTsKIAlpZiAoSVNfRVJSKGYpKQogCQlnb3RvIGVycl9ybWRpcjsKIAotCWYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2NyYXRjaF9sZW4mIzM0OywgMDQwMCwgZGlyLCBOVUxMLAotCQkJCSZhbXA7c2NyYXRjaF9sZW5fZm9wcyk7CiYjNDM7CWYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7Ym9vdG1lbV9sZW4mIzM0OywgMDQwMCwgZGlyLCBOVUxMLAomIzQzOwkJCQkmYW1wO2Jvb3RtZW1fbGVuX2ZvcHMpOwogCWlmIChJU19FUlIoZikpCiAJCWdvdG8gZXJyX3JtZGlyOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaAppbmRleCA4MDVkMmE3NmMzODgxLi5lOTY4NWUxZWY2ZDc4IDEwMDY0NAotLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgKQEAgLTE5LDggJiM0MzsxOSw4IEBAIHN0cnVjdCBraG9fZGVidWdmcyB7CiBzdHJ1Y3Qga2hvX2RlYnVnZnMge307CiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7Ci1leHRlcm4gdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDsKJiM0MztleHRlcm4gc3RydWN0IGtob19ib290bWVtICpraG9fYm9vdG1lbTsKJiM0MztleHRlcm4gdW5zaWduZWQgaW50IGtob19ib290bWVtX2NudDsKIAogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTCiBpbnQga2hvX2RlYnVnZnNfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTQuLjU0MTVlMGIzOGI1ZDUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtNDg1LDEwICYjNDM7NDg1LDYgQEAgY29uZmlnIEhBVkVfR1VQX0ZBU1QKIAlkZXBlbmRzIG9uIE1NVQogCWJvb2wKIAotIyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3ZlcgotY29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENICi0JYm9vbAotCiAjIERvbiYjMzk7dCBkaXNjYXJkIGFsbG9jYXRlZCBtZW1vcnkgdXNlZCB0byB0cmFjayAmIzM0O21lbW9yeSYjMzQ7IGFuZCAmIzM0O3Jlc2VydmVkJiMzNDsgbWVtYmxvY2tzCiAjIGFmdGVyIGVhcmx5IGJvb3QsIHNvIGl0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIHRlc3QgZm9yIHZhbGlkaXR5IG9mIG1lbW9yeS4KICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLgpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggMzdlMDZlNzBjMWQwMC4uMDM1MTkxM2NlNzliMCAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1ibG9jay5jCkBAIC0xMTIsMTEgJiM0MzsxMTIsMTEgQEAgdW5zaWduZWQgbG9uZyBtaW5fbG93X3BmbjsKIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuOwogCi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENICi0vKiBXaGVuIHNldCB0byB0cnVlLCBvbmx5IGFsbG9jYXRlIGZyb20gTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggcmFuZ2VzICovCi1zdGF0aWMgYm9vbCBraG9fc2NyYXRjaF9vbmx5OwomIzQzOyNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIKJiM0MzsvKiBXaGVuIHNldCB0byB0cnVlLCBvbmx5IGFsbG9jYXRlIGZyb20gTUVNQkxPQ0tfS0hPX05PUFJTUlYgcmFuZ2VzICovCiYjNDM7c3RhdGljIGJvb2wga2hvX25vcHJzcnZfb25seTsKICNlbHNlCi0jZGVmaW5lIGtob19zY3JhdGNoX29ubHkgZmFsc2UKJiM0MzsjZGVmaW5lIGtob19ub3Byc3J2X29ubHkgZmFsc2UKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiBtZW1ibG9ja19tZW1vcnlfaW5pdF9yZWdpb25zW0lOSVRfTUVNQkxPQ0tfTUVNT1JZX1JFR0lPTlNdIF9faW5pdGRhdGFfbWVtYmxvY2s7CkBAIC0xNzgsOSAmIzQzOzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZCkKIAogc3RhdGljIGVudW0gbWVtYmxvY2tfZmxhZ3MgX19pbml0X21lbWJsb2NrIGNob29zZV9tZW1ibG9ja19mbGFncyh2b2lkKQogewotCS8qIHNraXAgbm9uLXNjcmF0Y2ggbWVtb3J5IGZvciBraG8gZWFybHkgYm9vdCBhbGxvY2F0aW9ucyAqLwotCWlmIChraG9fc2NyYXRjaF9vbmx5KQotCQlyZXR1cm4gTUVNQkxPQ0tfS0hPX1NDUkFUQ0g7CiYjNDM7CS8qIG9ubHkgdXNlIEtIT19OT1BSU1JWIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi8KJiM0MzsJaWYgKGtob19ub3Byc3J2X29ubHkpCiYjNDM7CQlyZXR1cm4gTUVNQkxPQ0tfS0hPX05PUFJTUlY7CiAKIAlyZXR1cm4gc3lzdGVtX2hhc19zb21lX21pcnJvciA/IE1FTUJMT0NLX01JUlJPUiA6IE1FTUJMT0NLX05PTkU7CiB9CkBAIC0xMTc0LDMzICYjNDM7MTE3NCwzMyBAQCBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaQogfQogCiAvKioKLSAqIG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2ggLSBNYXJrIGEgbWVtb3J5IHJlZ2lvbiBhcyBNRU1CTE9DS19LSE9fU0NSQVRDSC4KJiM0MzsgKiBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2IC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX05PUFJTUlYuCiAgKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb24KICAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCiAgKgotICogT25seSBtZW1vcnkgcmVnaW9ucyBtYXJrZWQgd2l0aCAlTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggd2lsbCBiZSBjb25zaWRlcmVkCiYjNDM7ICogT25seSBtZW1vcnkgcmVnaW9ucyBtYXJrZWQgd2l0aCAlTUVNQkxPQ0tfS0hPX05PUFJTUlYgd2lsbCBiZSBjb25zaWRlcmVkCiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KLV9faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQomIzQzO19faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewogCXJldHVybiBtZW1ibG9ja19zZXRjbHJfZmxhZygmYW1wO21lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwgMSwKLQkJCQkgICAgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpOwomIzQzOwkJCQkgICAgTUVNQkxPQ0tfS0hPX05PUFJTUlYpOwogfQogCiAvKioKLSAqIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoIC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggZmxhZyBmb3IgYQomIzQzOyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYQogICogc3BlY2lmaWVkIHJlZ2lvbi4KICAqIEBiYXNlOiB0aGUgYmFzZSBwaHlzIGFkZHIgb2YgdGhlIHJlZ2lvbgogICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb24KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KLV9faW5pdCBpbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKJiM0MztfX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiB7CiAJcmV0dXJuIG1lbWJsb2NrX3NldGNscl9mbGFnKCZhbXA7bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAwLAotCQkJCSAgICBNRU1CTE9DS19LSE9fU0NSQVRDSCk7CiYjNDM7CQkJCSAgICBNRU1CTE9DS19LSE9fTk9QUlNSVik7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKQEAgLTEyMzYsOSAmIzQzOzEyMzYsOSBAQCBzdGF0aWMgYm9vbCBzaG91bGRfc2tpcF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAKIAkvKgogCSAqIEluIGVhcmx5IGFsbG9jIGR1cmluZyBrZXhlYyBoYW5kb3Zlciwgd2UgY2FuIG9ubHkgY29uc2lkZXIKLQkgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnMKJiM0MzsJICogTUVNQkxPQ0tfS0hPX05PUFJTUlYgcmVnaW9ucyBmb3IgdGhlIGFsbG9jYXRpb25zCiAJICovCi0JaWYgKChmbGFncyAmYW1wOyBNRU1CTE9DS19LSE9fU0NSQVRDSCkgJmFtcDsmYW1wOyAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpCiYjNDM7CWlmICgoZmxhZ3MgJmFtcDsgTUVNQkxPQ0tfS0hPX05PUFJTUlYpICZhbXA7JmFtcDsgIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KG0pKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTE3OTMsNyAmIzQzOzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpCiAJaWYgKG51bWFfdmFsaWRfbm9kZShuaWQpICZhbXA7JmFtcDsgIWV4YWN0X25pZCkgewogCQluaWQgPSBOVU1BX05PX05PREU7CiAJCS8qCi0JCSAqIElmIGEgcHJldmlvdXMgY2FuZGlkYXRlIG92ZXJsYXBwZWQgd2l0aCBLSE8gc2NyYXRjaCwgaXQgd291bGQKJiM0MzsJCSAqIElmIGEgcHJldmlvdXMgY2FuZGlkYXRlIG92ZXJsYXBwZWQgd2l0aCBLSE8gYm9vdG1lbSwgaXQgd291bGQKIAkJICogdXBkYXRlIHN0YXJ0IG9yIGVuZC4gTm93IHRoYXQgdGhlIHNlYXJjaCBpcyBvcGVuaW5nIHRvIGFsbAogCQkgKiBub2RlcywgcmVzZXQgdGhlbS4KIAkJICovCkBAIC0xODA5LDEyICYjNDM7MTgwOSwxMiBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpCiBmb3VuZDoKIAkvKgogCSAqIEh1Z2VUTEIgcGFnZXMgY2FuIGJlIHByZXNlcnZlZCB3aXRoIEtITyBhbmQgbm8gcHJlc2VydmVkIG1lbW9yeSBjYW4KLQkgKiBiZSBpbiBzY3JhdGNoLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggc2NyYXRjaC4KJiM0MzsJICogYmUgaW4gYm9vdG1lbS4gU28gcmV0cnkgaWYgZm91bmQgYWRkcmVzcyBvdmVybGFwcyB3aXRoIGJvb3RtZW0uCiAJICoKLQkgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJiMzOTt0IHRha2UgdG9vCiYjNDM7CSAqIEJvb3RtZW0gYXJlYXMgYXJlIG5vcm1hbGx5IG5vdCB2ZXJ5IGxhcmdlLCBzbyB0aGlzIHNob3VsZG4mIzM5O3QgdGFrZSB0b28KIAkgKiBtYW55IHJldHJpZXMuCiAJICovCi0JaWYgKGtob19zY3JhdGNoX292ZXJsYXAoYWRkciwgc2l6ZSkpIHsKJiM0MzsJaWYgKGtob19ib290bWVtX292ZXJsYXAoYWRkciwgc2l6ZSkpIHsKIAkJaWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKQogCQkJc3RhcnQgPSBhZGRyICYjNDM7IHNpemU7CiAJCWVsc2UKQEAgLTI0OTksNyAmIzQzOzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKQogCWZyZWVfdW51c2VkX21lbW1hcCgpOwogCXJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKCk7CiAKLQltZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KCk7CiYjNDM7CW1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkoKTsKIAlwYWdlcyA9IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KCk7CiAJdG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTsKIH0KQEAgLTI1OTcsMTUgJiM0MzsyNTk3LDE1IEBAIGludCByZXNlcnZlX21lbV9yZWxlYXNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKIAlyZXR1cm4gMTsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSAotX19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZCkKJiM0MzsjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSCiYjNDM7X19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCkKIHsKLQlraG9fc2NyYXRjaF9vbmx5ID0gdHJ1ZTsKJiM0MzsJa2hvX25vcHJzcnZfb25seSA9IHRydWU7CiB9CiAKLV9faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkKJiM0MztfX2luaXQgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydl9vbmx5KHZvaWQpCiB7Ci0Ja2hvX3NjcmF0Y2hfb25seSA9IGZhbHNlOwomIzQzOwlraG9fbm9wcnNydl9vbmx5ID0gZmFsc2U7CiB9CiAjZW5kaWYKIApAQCAtMjg2MSw3ICYjNDM7Mjg2MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVfbWVtKGNoYXIgKnApCiAJaWYgKHJlc2VydmVfbWVtX2tob19yZXZpdmUobmFtZSwgc2l6ZSwgYWxpZ24pKQogCQlyZXR1cm4gMTsKIAotCS8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIHNjcmF0Y2ggcmVnaW9uICovCiYjNDM7CS8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqLwogCXN0YXJ0ID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBhbGlnbik7CiAJaWYgKCFzdGFydCkgewogCQlwcl9lcnIoJiMzNDtyZXNlcnZlX21lbTogbWVtYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKQEAgLTI4ODYsNyAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7CiAJW2lsb2cyKE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEKV0gPSAmIzM0O0RSVl9NTkcmIzM0OywKIAlbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9ICYjMzQ7UlNWX05JVCYjMzQ7LAogCVtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9ICYjMzQ7UlNWX0tFUk4mIzM0OywKLQlbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9ICYjMzQ7S0hPX1NDUkFUQ0gmIzM0OywKJiM0MzsJW2lsb2cyKE1FTUJMT0NLX0tIT19OT1BSU1JWKV0gPSAmIzM0O0tIT19OT1BSU1JWJiMzNDssCiB9OwogCiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKQpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDc4ZDYzNzg5YTk2OTAuLmQwMzE1NmJlMGUxMDQgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTY4MSw3ICYjNDM7NjgxLDcgQEAgc3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gcGZuICYjNDM7IG5yX3BhZ2VzOwogCiAJZm9yIChwZm4gPSBwYWdlYmxvY2tfYWxpZ24ocGZuKTsgcGZuICZsdDsgZW5kOyBwZm4gJiM0Mzs9IHBhZ2VibG9ja19ucl9wYWdlcykgewotCQllbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7CiYjNDM7CQllbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7CiAKIAkJaW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGZuX3RvX3BhZ2UocGZuKSwgbXQsIGZhbHNlKTsKIAkJaWYgKCFhdG9taWMgJmFtcDsmYW1wOyBJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKQpAQCAtNzY0LDcgJiM0Mzs3NjQsNyBAQCBzdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAKIAlpZiAocGFnZWJsb2NrX2FsaWduZWQocGZuKSkgewogCQllbnVtIG1pZ3JhdGV0eXBlIG10ID0KLQkJCWtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgTUlHUkFURV9NT1ZBQkxFKTsKJiM0MzsJCQlraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIE1JR1JBVEVfTU9WQUJMRSk7CiAJCWluaXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBmbl90b19wYWdlKHBmbiksIG10LCBmYWxzZSk7CiAJfQogfQpAQCAtOTI0LDcgJiM0Mzs5MjQsNyBAQCB2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZQogCQkgKiBvdmVyIHRoZSBwbGFjZSBkdXJpbmcgc3lzdGVtIGJvb3QuCiAJCSAqLwogCQlpZiAocGFnZWJsb2NrX2FsaWduZWQocGZuKSkgewotCQkJZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpOwomIzQzOwkJCWVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTsKIAogCQkJaW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgbXQsIGlzb2xhdGVfcGFnZWJsb2NrKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oCmluZGV4IGU4NmJiOTAwMGIyMmYuLjQ2YzVhMTU2ZmNlNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgKQEAgLTY2LDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAKICNkZWZpbmUgX19TZXRQYWdlUmVzZXJ2ZWQocCkJKCh2b2lkKShwKSkKIAotc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE3MwoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiAxNTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktITyBTY3JhdGNoIHRvIEJvb3RtZW0vTk9QUlNWOiBBIFJlbmFtZSBhbmQgUmVmYWN0b3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBlc3NlbnRpYWxseSByZW5hbWluZyB0aGUgJiMzNDtraG9fc2NyYXRjaCYjMzQ7IGNvbmNlcHQgdG8gJiMzNDtraG9fYm9vdG1lbSYjMzQ7IG9yICYjMzQ7a2hvX25vcHJzcnYmIzM0OyB3aXRoaW4gdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIGZlYXR1cmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBzdHJhaWdodGZvcndhcmQgcmVuYW1lLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNvdWxkIGJlIGx1cmtpbmcuCgpGaXJzdCBwYXNzOiB0aGlzIHNlZW1zIGxpa2UgYSBjb21wbGV0ZSBzd2VlcCBvZiByZW5hbWluZyB2YXJpYWJsZXMsIHN0cnVjdCBtZW1iZXJzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1lbWJsb2NrIGZsYWdzLCBhbmQgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMuIFdlIGhhdmUgY2hhbmdlcyBhY3Jvc3MgZG9jdW1lbnRhdGlvbiwgeDg2IHNldHVwLCBFRkkgaW5pdGlhbGl6YXRpb24sIE9GIGtleGVjLCBLSE8gY29yZSBsb2dpYywgbWVtYmxvY2ssIGFuZCBtbV9pbml0LmMuIFRoZSBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIGBraG9fc2NyYXRjaD1gIGJlY29tZXMgYGtob19ib290bWVtPWAsIGBzdHJ1Y3Qga2hvX3NjcmF0Y2hgIGJlY29tZXMgYHN0cnVjdCBraG9fYm9vdG1lbWAsIGBNRU1CTE9DS19LSE9fU0NSQVRDSGAgaXMgbm93IGBNRU1CTE9DS19LSE9fTk9QUlNSVmAsIGFuZCBmdW5jdGlvbnMgbGlrZSBga2hvX2V4dGVuZF9zY3JhdGNoYCBhcmUgbm93IGBraG9fZGlzY292ZXJfbm9wcnNydmAsIGFuZCBzbyBvbi4gRXZlbiBkZWJ1Z2ZzIGVudHJpZXMgYXJlIHJlbmFtZWQsIGBzY3JhdGNoX3BoeXNgIHRvIGBib290bWVtX3BoeXNgLCB5b3UgZ2V0IHRoZSBpZGVhLiBBbHNvIHRoZSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzICYjMzQ7bGludXgsa2hvLXNjcmF0Y2gmIzM0OyB0byAmIzM0O2xpbnV4LGtoby1ib290bWVtJiMzNDsuIEFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuCgpPa2F5LCBpcyB0aGVyZSBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCYjMzk7cyBhbGwgYSByZW5hbWUgc28gZmFyLiBObyBsb2dpYyBpcyBhbHRlcmVkLCBqdXN0IG5hbWUgY2hhbmdlcy4gVGhlIG9ubHkgdGhpbmcgcmVtb3RlbHkgaW50ZXJlc3RpbmcgaXMgdGhhdCB0aGUgYE1FTUJMT0NLX0tIT19TQ1JBVENIYCBjb25maWcgb3B0aW9uIHNlZW1zIHRvIGJlIGdvbmUuIEJ1dCwgaXQmIzM5O3MgcmVwbGFjZWQgYnkgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAsIHNvLCB0aGlzIGlzIG1vcmUgb2YgYSBzaW1wbGlmaWNhdGlvbiB0aGFuIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGEgZmV3IG9mIHRoZSBhZmZlY3RlZCBmaWxlcyB0byBjb25maXJtOiBJbiBga2hvX2V4dGVuZF9zY3JhdGNoYCAobm93IGBraG9fZGlzY292ZXJfbm9wcnNydmApIHRoZSBpbnRlcm5hbCBjb25zdGFudHMgcmVtYWluIHVuY2hhbmdlZCwganVzdCBhIHJlbmFtZS4gR29pbmcgdGhyb3VnaCBgYXJjaC94ODYva2VybmVsL2U4MjAuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jYCwgYGRyaXZlcnMvb2Yva2V4ZWMuY2AsIGFuZCBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AsIGl0JiMzOTtzIGp1c3QgYSByZW5hbWUsIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBJIHdhcyBhIGJpdCB3b3JyaWVkIHdoZW4gSSBzYXcgdGhhdCB0aGUgb2xkIGZ1bmN0aW9uIG5hbWVzIHdlcmUgcHJlc2VudC4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgYmUgZnV6emVkIGhlcmUhIEkmIzM5O20gcHJldHR5IHN1cmUgd2UmIzM5O3JlIGdvb2QuIEl0JiMzOTtzIGEgcHVyZSByZW5hbWUvcmVmYWN0b3JpbmcgcGF0Y2guIFRoZSBleGVjdXRpb24gZmxvdyByZW1haW5zIGlkZW50aWNhbCwgYW5kIHRoZXJlJiMzOTtzIG5vIG5ldyBsb2dpYy4gVGhlcmUgYXJlIG5vIHNpZGUtZWZmZWN0cyBJIGNhbiBpZGVudGlmeSBhdCBhbGwuCgpKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O20gZG9pbmcgYSBmaW5hbCBzd2VlcCwgYnV0LCBpdCYjMzk7cyBqdXN0IG1vcmUgcmVuYW1lcy4gTm90aGluZyBvZiBpbnRlcmVzdCBoZXJlLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBzYWZlLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcuIEkmIzM5O2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAmIzM5O3NjcmF0Y2gmIzM5OyBtZW1vcnkgY29uY2VwdCBpbiB0aGUgS2V4ZWMgSGFuZE92ZXIgKEtITykgZmVhdHVyZSB0byAmIzM5O2Jvb3RtZW0mIzM5OyBhbmQgJiMzOTtub3Byc3J2JiMzOTsuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgdGhlICYjMzk7c2NyYXRjaCYjMzk7IG1lbW9yeSBjb25jZXB0IGluIHRoZSBLZXhlYyBIYW5kT3ZlciAoS0hPKSBmZWF0dXJlIHRvICYjMzk7Ym9vdG1lbSYjMzk7IGFuZCAmIzM5O25vcHJzcnYmIzM5Oy4gSXQgcmVuYW1lcyBjb21tYW5kLWxpbmUgcGFyYW1ldGVycywgZGV2aWNlIHRyZWUgcHJvcGVydGllcywgZGVidWdmcyBmaWxlcywgc3RydWN0IG5hbWVzLCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgYW5kIGEgS2NvbmZpZyBvcHRpb24sIGJ1dCBkb2VzIG5vdCBhbHRlciBhbnkgZXhlY3V0aW9uIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDk6MTkuMTM2MTYzMzYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3ODQ0ODAwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAnc2NyYXRjaCcgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJ2Jvb3RtZW0nIGFuZCAnbm9wcnNydicuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ5OjE5LjEzNjE3MDkzMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1MjU5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODViZjU3NjZlZGNmY2ZkNTMyN2U0ZmNkOWVjYjc0Njg0ZDRlNDI3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0OToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTAzOTI3ZmZiODVkMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTI5ODksMTEgKzI5ODksMTIgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFx0XFx0XFx0XFxcIjBcXFwiIHwgXFxcIm9mZlxcXCIgfCBcXFwiblxcXCIgLSBrZXhlYyBoYW5kb3ZlciBpcyBkaXNhYmxlZFxcbiBcXHRcXHRcXHRcXFwiMVxcXCIgfCBcXFwib25cXFwiIHwgXFxcInlcXFwiIC0ga2V4ZWMgaGFuZG92ZXIgaXMgZW5hYmxlZFxcbiBcXG4tXFx0a2hvX3NjcmF0Y2g9XFx0W0tFWEVDLEVBUkxZXVxcbitcXHRraG9fYm9vdG1lbT1cXHRbS0VYRUMsRUFSTFldXFxuIFxcdFxcdFxcdEZvcm1hdDogbGxbS01HXSxtbVtLTUddLG5uW0tNR10gfCBubiVcXG4tXFx0XFx0XFx0RGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgS0hPIHNjcmF0Y2ggcmVnaW9uLiBUaGUgS0hPXFxuLVxcdFxcdFxcdHNjcmF0Y2ggcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeVxcbi1cXHRcXHRcXHRyYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXFxuK1xcbitcXHRcXHRcXHREZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBLSE8gYm9vdCBtZW1vcnkgcmVnaW9uLiBUaGVcXG4rXFx0XFx0XFx0S0hPIGJvb3QgbWVtb3J5IHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xcbitcXHRcXHRcXHRtZW1vcnkgcmFuZ2VzIHRoYXQgY2FuIG9ubHkgYmUgdXNlZCBmb3Igbm9uLWtlcm5lbFxcbiBcXHRcXHRcXHRhbGxvY2F0aW9ucy4gVGhhdCB3YXksIGV2ZW4gd2hlbiBtZW1vcnkgaXMgaGVhdmlseVxcbiBcXHRcXHRcXHRmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZFxcbiBcXHRcXHRcXHRrZXJuZWwgd2lsbCBhbHdheXMgaGF2ZSBlbm91Z2ggY29udGlndW91cyByYW5nZXMgdG9cXG5AQCAtMzAwMiwxMCArMzAwMywxMCBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRcXHRcXHRJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBleGFjdCBhbW91bnQgb2ZcXG4gXFx0XFx0XFx0bWVtb3J5IGluIHRoZSBmb3JtIG9mIFxcXCJsbFtLTUddLG1tW0tNR10sbm5bS01HXVxcXCJcXG4gXFx0XFx0XFx0d2hlcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBkZWZpbmVzIHRoZSBzaXplIG9mIGEgbG93XFxuLVxcdFxcdFxcdG1lbW9yeSBzY3JhdGNoIGFyZWEsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRlZmluZXNcXG4tXFx0XFx0XFx0dGhlIHNpemUgb2YgYSBnbG9iYWwgc2NyYXRjaCBhcmVhIGFuZCB0aGUgdGhpcmRcXG4rXFx0XFx0XFx0bWVtb3J5IGJvb3RtZW0gYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xcbitcXHRcXHRcXHR0aGUgc2l6ZSBvZiBhIGdsb2JhbCBib290bWVtIGFyZWEgYW5kIHRoZSB0aGlyZFxcbiBcXHRcXHRcXHRwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhZGRpdGlvbmFsIHBlci1ub2RlXFxuLVxcdFxcdFxcdHNjcmF0Y2ggYXJlYXMuICBUaGUgZm9ybSBcXFwibm4lXFxcIiBkZWZpbmVzIHNjYWxlIGZhY3RvclxcbitcXHRcXHRcXHRib290bWVtIGFyZWFzLiAgVGhlIGZvcm0gXFxcIm5uJVxcXCIgZGVmaW5lcyBzY2FsZSBmYWN0b3JcXG4gXFx0XFx0XFx0KGluIHBlcmNlbnRzKSBvZiBtZW1vcnkgdGhhdCB3YXMgdXNlZCBkdXJpbmcgYm9vdC5cXG4gXFxuIFxcdGttYWM9XFx0XFx0W01JUFNdIEtvcmluYSBldGhlcm5ldCBNQUMgYWRkcmVzcy5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0XFxuaW5kZXggMmMyNmU1NjBiZDc4YS4uZjE0YzhkOWFkNmE0NSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcXG5AQCAtMjAsMTAgKzIwLDEwIEBAIG5lZWQgdG8gZW5hYmxlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHByZXNlcnZlIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgYWNyb3NzXFxuIGtleGVjLlxcbiBcXG4gVG8gdXNlIEtITywgcGxlYXNlIGJvb3QgdGhlIGtlcm5lbCB3aXRoIHRoZSBgYGtobz1vbmBgIGNvbW1hbmQgbGluZVxcbi1wYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX3NjcmF0Y2hgYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXFxuLXNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcXG4tMTYgTWlCIGxvdyBtZW1vcnkgc2NyYXRjaCBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIHNjcmF0Y2ggcmVnaW9uLCBhbmQgMjU2IE1pQlxcbi1wZXIgTlVNQSBub2RlIHNjcmF0Y2ggcmVnaW9ucyBvbiBib290LlxcbitwYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX2Jvb3RtZW1gYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXFxuK2Jvb3QgbWVtb3J5IHJlZ2lvbnMuIEZvciBleGFtcGxlIGBga2hvX2Jvb3RtZW09MTZNLDUxMk0sMjU2TWBgIHdpbGwgcmVzZXJ2ZSBhXFxuKzE2IE1pQiBsb3cgbWVtb3J5IGJvb3RtZW0gYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBib290bWVtIHJlZ2lvbiwgYW5kIDI1NiBNaUJcXG4rcGVyIE5VTUEgbm9kZSBib290bWVtIHJlZ2lvbnMgb24gYm9vdC5cXG4gXFxuIFBlcmZvcm0gYSBLSE8ga2V4ZWNcXG4gPT09PT09PT09PT09PT09PT09PVxcbkBAIC05NiwxNSArOTYsMTUgQEAgc3RhYmlsaXplZC5cXG4gICAgIGN1cnJlbnQgS0hPIHN0YXRlIGluIHRoaXMgZmlsZS4gS2V4ZWMgdXNlciBzcGFjZSB0b29saW5nIGNhbiB1c2UgdGhpc1xcbiAgICAgYXMgaW5wdXQgZmlsZSBmb3IgdGhlIEtITyBwYXlsb2FkIGltYWdlLlxcbiBcXG4tYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3NjcmF0Y2hfbGVuYGBcXG4tICAgIExlbmd0aHMgb2YgS0hPIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xcbitgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvYm9vdG1lbV9sZW5gYFxcbisgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXFxuICAgICBtZW1vcnkgcmVnaW9ucyB0aGF0IHdpbGwgYWx3YXlzIHN0YXkgYXZhaWxhYmxlIGZvciBmdXR1cmUga2V4ZWNcXG4gICAgIGFsbG9jYXRpb25zLiBLZXhlYyB1c2VyIHNwYWNlIHRvb2xzIGNhbiB1c2UgdGhpcyBmaWxlIHRvIGRldGVybWluZVxcbiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cXG4gXFxuLWBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zY3JhdGNoX3BoeXNgYFxcbi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHNcXG4tICAgIGNhbiB1c2UgdGhpcyBmaWxlIGluIGNvbmp1bmN0aW9uIHRvIHNjcmF0Y2hfcGh5cyB0byBkZXRlcm1pbmUgd2hlcmVcXG4rYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fcGh5c2BgXFxuKyAgICBQaHlzaWNhbCBsb2NhdGlvbnMgb2YgS0hPIGJvb3RtZW0gcmVnaW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29sc1xcbisgICAgY2FuIHVzZSB0aGlzIGZpbGUgaW4gY29uanVuY3Rpb24gdG8gYm9vdG1lbV9waHlzIHRvIGRldGVybWluZSB3aGVyZVxcbiAgICAgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cXG4gXFxuIGBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zdWJfZmR0cy9gYFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3RcXG5pbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdFxcbkBAIC0xMyw4ICsxMyw4IEBAIEtleGVjIEhhbmRPdmVyIChLSE8pIGlzIGEgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIExpbnV4IHRvIHByZXNlcnZlIG1lbW9yeVxcbiByZWdpb25zLCB3aGljaCBjb3VsZCBjb250YWluIHNlcmlhbGl6ZWQgc3lzdGVtIHN0YXRlcywgYWNyb3NzIGtleGVjLlxcbiBcXG4gS0hPIHVzZXMgOnJlZjpgZmxhdHRlbmVkIGRldmljZSB0cmVlIChGRFQpIFxcdTAwM2NraG9fZmR0XFx1MDAzZWAgdG8gcGFzcyBpbmZvcm1hdGlvbiBhYm91dFxcbi10aGUgcHJlc2VydmVkIHN0YXRlIGZyb20gcHJlLWV4ZWMga2VybmVsIHRvIHBvc3Qta2V4ZWMga2VybmVsIGFuZCA6cmVmOmBzY3JhdGNoXFxuLW1lbW9yeSByZWdpb25zIFxcdTAwM2NraG9fc2NyYXRjaFxcdTAwM2VgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuXFxuK3RoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YGJvb3RcXG4rbWVtb3J5IHJlZ2lvbnMgXFx1MDAzY2tob19ib290bWVtXFx1MDAzZWAgdG8gZW5zdXJlIGludGVncml0eSBvZiB0aGUgcHJlc2VydmVkIG1lbW9yeS5cXG4gXFxuIC4uIF9raG9fZmR0OlxcbiBcXG5AQCAtNDAsMzEgKzQwLDMxIEBAIGFuZCBwb3N0LWtleGVjIGtlcm5lbHMuIFRoaXMgQUJJIGlzIGRlZmluZWQgYnkgaGVhZGVyIGZpbGVzIGluXFxuIFxcbiAgICBhYmkucnN0XFxuIFxcbi0uLiBfa2hvX3NjcmF0Y2g6XFxuKy4uIF9raG9fYm9vdG1lbTpcXG4gXFxuLVNjcmF0Y2ggUmVnaW9uc1xcbi09PT09PT09PT09PT09PT1cXG4rQm9vdCBNZW1vcnkgUmVnaW9uc1xcbis9PT09PT09PT09PT09PT09PT09XFxuIFxcbiBUbyBib290IGludG8ga2V4ZWMsIHdlIG5lZWQgdG8gaGF2ZSBhIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmFuZ2UgdGhhdFxcbiBjb250YWlucyBubyBoYW5kZWQgb3ZlciBtZW1vcnkuIEtleGVjIHRoZW4gcGxhY2VzIHRoZSB0YXJnZXQga2VybmVsIGFuZCBpbml0cmRcXG4gaW50byB0aGF0IHJlZ2lvbi4gVGhlIG5ldyBrZXJuZWwgZXhjbHVzaXZlbHkgdXNlcyB0aGlzIHJlZ2lvbiBmb3IgbWVtb3J5XFxuIGFsbG9jYXRpb25zIGJlZm9yZSBkdXJpbmcgYm9vdCB1cCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLlxcbiBcXG4tV2UgZ3VhcmFudGVlIHRoYXQgd2UgYWx3YXlzIGhhdmUgc3VjaCByZWdpb25zIHRocm91Z2ggdGhlIHNjcmF0Y2ggcmVnaW9uczogT25cXG4tZmlyc3QgYm9vdCBLSE8gYWxsb2NhdGVzIHNldmVyYWwgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb25zLiBTaW5jZVxcbitXZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uczpcXG4rT24gZmlyc3QgYm9vdCBLSE8gYWxsb2NhdGVzIHNldmVyYWwgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb25zLiBTaW5jZVxcbiBhZnRlciBrZXhlYyB0aGVzZSByZWdpb25zIHdpbGwgYmUgdXNlZCBieSBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbnMsIHRoZXJlIGlzIGFcXG4tc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9uc1xcbi1yZXF1ZXN0cyB0aGF0IGRvIG5vdCByZXF1aXJlIHBhcnRpY3VsYXIgTlVNQSBub2RlIGFzc2lnbm1lbnQuXFxuLUJ5IGRlZmF1bHQsIHNpemUgb2YgdGhlIHNjcmF0Y2ggcmVnaW9uIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYW1vdW50IG9mIG1lbW9yeVxcbi1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXFxuLXVzZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBvZiB0aGUgc2NyYXRjaCByZWdpb25zLlxcbi1UaGUgc2NyYXRjaCByZWdpb25zIGFyZSBkZWNsYXJlZCBhcyBDTUEgd2hlbiBwYWdlIGFsbG9jYXRvciBpcyBpbml0aWFsaXplZCBzb1xcbi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlXFxuLWd1YXJhbnRlZSB0aGF0IG5vIGhhbmRvdmVyIHBhZ2VzIGxhbmQgaW4gdGhhdCByZWdpb24sIGJlY2F1c2UgaGFuZG92ZXIgcGFnZXNcXG4tbXVzdCBiZSBhdCBhIHN0YXRpYyBwaHlzaWNhbCBtZW1vcnkgbG9jYXRpb24gYW5kIENNQSBlbmZvcmNlcyB0aGF0IG9ubHlcXG4tbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuXFxuLVxcbi1BZnRlciBLSE8ga2V4ZWMsIHdlIGlnbm9yZSB0aGUgYGBraG9fc2NyYXRjaGBgIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZFxcbitib290IG1lbW9yeSByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgYm9vdCBtZW1vcnkgcmVnaW9uIHRvIHNhdGlzZnlcXG4rYWxsb2NhdGlvbnMgcmVxdWVzdHMgdGhhdCBkbyBub3QgcmVxdWlyZSBwYXJ0aWN1bGFyIE5VTUEgbm9kZSBhc3NpZ25tZW50LiBCeVxcbitkZWZhdWx0LCBzaXplIG9mIHRoZSBib290IG1lbW9yeSByZWdpb24gaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBhbW91bnQgb2YgbWVtb3J5XFxuK2FsbG9jYXRlZCBkdXJpbmcgYm9vdC4gVGhlIGBga2hvX2Jvb3RtZW1gYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBtYXkgYmVcXG4rdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBib290IG1lbW9yeSByZWdpb25zLiBUaGUgYm9vdCBtZW1vcnlcXG4rcmVnaW9ucyBhcmUgZGVjbGFyZWQgYXMgQ01BIHdoZW4gcGFnZSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQgc28gdGhhdCB0aGVpclxcbittZW1vcnkgY2FuIGJlIHVzZWQgZHVyaW5nIHN5c3RlbSBsaWZldGltZS4gQ01BIGdpdmVzIHVzIHRoZSBndWFyYW50ZWUgdGhhdCBub1xcbitoYW5kb3ZlciBwYWdlcyBsYW5kIGluIHRoYXQgcmVnaW9uLCBiZWNhdXNlIGhhbmRvdmVyIHBhZ2VzIG11c3QgYmUgYXQgYSBzdGF0aWNcXG4rcGh5c2ljYWwgbWVtb3J5IGxvY2F0aW9uIGFuZCBDTUEgZW5mb3JjZXMgdGhhdCBvbmx5IG1vdmFibGUgcGFnZXMgY2FuIGJlIGxvY2F0ZWRcXG4raW5zaWRlLlxcbitcXG4rQWZ0ZXIgS0hPIGtleGVjLCB3ZSBpZ25vcmUgdGhlIGBga2hvX2Jvb3RtZW1gYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmRcXG4gaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXFxuIHVzIHRvIHJlY3Vyc2l2ZWx5IGV4ZWN1dGUgYW55IGFtb3VudCBvZiBLSE8ga2V4ZWNzLiBCZWNhdXNlIHdlIHVzZWQgdGhpcyByZWdpb25cXG4gZm9yIGJvb3QgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBhcyB0YXJnZXQgbWVtb3J5IGZvciBrZXhlYyBibG9icywgc29tZSBwYXJ0c1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXFxuaW5kZXggMjIyNjdhODNlMDY0YS4uMjkwMTUzODE4ZDBmMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuY1xcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXFxuQEAgLTc2NCwxMiArNzY0LDEyIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZTgyMF9lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcXG4gfVxcbiBcXG4gLypcXG4tICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBzY3JhdGNoIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90XFxuKyAqIElmIEtITyBpcyBhY3RpdmUsIG9ubHkgcHJvY2VzcyBpdHMgYm9vdG1lbSBhcmVhcyB0byBlbnN1cmUgd2UgYXJlIG5vdFxcbiAgKiBzdGVwcGluZyBvbnRvIHByZXNlcnZlZCBtZW1vcnkuXFxuICAqL1xcbiBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKVxcbiB7XFxuLVxcdHN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XFxuK1xcdHN0cnVjdCBraG9fYm9vdG1lbSAqa2hvX2Jvb3RtZW07XFxuIFxcdHN0cnVjdCBzZXR1cF9kYXRhICpwdHI7XFxuIFxcdHN0cnVjdCBraG9fZGF0YSAqa2hvO1xcbiBcXHRpbnQgaSwgbnJfYXJlYXMgPSAwO1xcbkBAIC03ODEsOCArNzgxLDggQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcXG4gXFx0d2hpbGUgKHB0cikge1xcbiBcXHRcXHRpZiAocHRyLVxcdTAwM2V0eXBlID09IFNFVFVQX0tFWEVDX0tITykge1xcbiBcXHRcXHRcXHRraG8gPSAoc3RydWN0IGtob19kYXRhICopKHVuc2lnbmVkIGxvbmcpcHRyLVxcdTAwM2VkYXRhO1xcbi1cXHRcXHRcXHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVxcdTAwM2VzY3JhdGNoX2FkZHI7XFxuLVxcdFxcdFxcdG5yX2FyZWFzID0ga2hvLVxcdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcXG4rXFx0XFx0XFx0a2hvX2Jvb3RtZW0gPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWtoby1cXHUwMDNlYm9vdG1lbV9hZGRyO1xcbitcXHRcXHRcXHRucl9hcmVhcyA9IGtoby1cXHUwMDNlYm9vdG1lbV9zaXplIC8gc2l6ZW9mKCpraG9fYm9vdG1lbSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC03OTMsNyArNzkzLDcgQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2FyZWFzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXFx1MDAyNmtob19zY3JhdGNoW2ldO1xcbitcXHRcXHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSBcXHUwMDI2a2hvX2Jvb3RtZW1baV07XFxuIFxcdFxcdHN0cnVjdCBtZW1fdmVjdG9yIHJlZ2lvbiA9IHtcXG4gXFx0XFx0XFx0LnN0YXJ0ID0gYXJlYS1cXHUwMDNlYWRkcixcXG4gXFx0XFx0XFx0LnNpemUgPSBhcmVhLVxcdTAwM2VzaXplLFxcbkBAIC04MjIsNyArODIyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9yYW5kb21fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogRHVyaW5nIGtleGVjIGhhbmRvdmVyIG9ubHkgcHJvY2VzcyBLSE8gc2NyYXRjaCBhcmVhcyB0aGF0IGFyZSBrbm93blxcbitcXHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duXFxuIFxcdCAqIG5vdCB0byBjb250YWluIGFueSBkYXRhIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxcbmluZGV4IDI2NzFjNGUxYjNhMGIuLjYxMDkwZGI1MDY1YzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxcbkBAIC04NSw4ICs4NSw4IEBAIHN0cnVjdCBpbWFfc2V0dXBfZGF0YSB7XFxuIHN0cnVjdCBraG9fZGF0YSB7XFxuIFxcdF9fdTY0IGZkdF9hZGRyO1xcbiBcXHRfX3U2NCBmZHRfc2l6ZTtcXG4tXFx0X191NjQgc2NyYXRjaF9hZGRyO1xcbi1cXHRfX3U2NCBzY3JhdGNoX3NpemU7XFxuK1xcdF9fdTY0IGJvb3RtZW1fYWRkcjtcXG4rXFx0X191NjQgYm9vdG1lbV9zaXplO1xcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xcbiBcXG4gI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcXG5pbmRleCBlYjcyNTM3YmMwYjE5Li4yYTZlMTlmOTUyNTE3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXFxuQEAgLTEzNjMsNyArMTM2Myw3IEBAIF9faW5pdCB2b2lkIGU4MjBfX21lbWJsb2NrX3NldHVwKHZvaWQpXFxuIFxcdCAqIEFmdGVyIHJlYWwgbW9kZSB0cmFtcG9saW5lIGlzIGFsbG9jYXRlZCwgd2UgY2xlYXIgdGhhdCBzY3JhdGNoXFxuIFxcdCAqIG1hcmtpbmcuXFxuIFxcdCAqL1xcbi1cXHRtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcXG4rXFx0bWVtYmxvY2tfbWFya19raG9fbm9wcnNydigwLCBTWl8xTSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiAzMi1iaXQgc3lzdGVtcyBhcmUgbGltaXRlZCB0byA0Qkcgb2YgbWVtb3J5IGV2ZW4gd2l0aCBISUdITUVNIGFuZFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcXG5pbmRleCA3ZTk4MGVhNDlkOGQ2Li4zYWE3NzAwNmFkYWIyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuY1xcbkBAIC0yODUsMTQgKzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLFxcbiBcXHRzZC1cXHUwMDNlbGVuID0gc2l6ZW9mKHN0cnVjdCBraG9fZGF0YSk7XFxuIFxcbiBcXHQvKiBPbmx5IGFkZCBpZiB3ZSBoYXZlIGFsbCBLSE8gaW1hZ2VzIGluIHBsYWNlICovXFxuLVxcdGlmICghaW1hZ2UtXFx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVxcdTAwM2VraG8uc2NyYXRjaClcXG4rXFx0aWYgKCFpbWFnZS1cXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXFx1MDAzZWtoby5ib290bWVtKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBBZGQgc2V0dXAgZGF0YSAqL1xcbiBcXHRraG8tXFx1MDAzZWZkdF9hZGRyID0gaW1hZ2UtXFx1MDAzZWtoby5mZHQ7XFxuIFxcdGtoby1cXHUwMDNlZmR0X3NpemUgPSBQQUdFX1NJWkU7XFxuLVxcdGtoby1cXHUwMDNlc2NyYXRjaF9hZGRyID0gaW1hZ2UtXFx1MDAzZWtoby5zY3JhdGNoLVxcdTAwM2VtZW07XFxuLVxcdGtoby1cXHUwMDNlc2NyYXRjaF9zaXplID0gaW1hZ2UtXFx1MDAzZWtoby5zY3JhdGNoLVxcdTAwM2VidWZzejtcXG4rXFx0a2hvLVxcdTAwM2Vib290bWVtX2FkZHIgPSBpbWFnZS1cXHUwMDNla2hvLmJvb3RtZW0tXFx1MDAzZW1lbTtcXG4rXFx0a2hvLVxcdTAwM2Vib290bWVtX3NpemUgPSBpbWFnZS1cXHUwMDNla2hvLmJvb3RtZW0tXFx1MDAzZWJ1ZnN6O1xcbiBcXHRzZC1cXHUwMDNlbmV4dCA9IHBhcmFtcy1cXHUwMDNlaGRyLnNldHVwX2RhdGE7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaGRyLnNldHVwX2RhdGEgPSBwYXJhbXNfbG9hZF9hZGRyICsgc2V0dXBfZGF0YV9vZmZzZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xcbmluZGV4IDVlYmI1MjFlMTM2ZDcuLmQxNjE4YzRjZjdmYmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGtob19wb3B1bGF0ZShraG8tXFx1MDAzZWZkdF9hZGRyLCBraG8tXFx1MDAzZWZkdF9zaXplLCBraG8tXFx1MDAzZXNjcmF0Y2hfYWRkciwga2hvLVxcdTAwM2VzY3JhdGNoX3NpemUpO1xcbitcXHRraG9fcG9wdWxhdGUoa2hvLVxcdTAwM2VmZHRfYWRkciwga2hvLVxcdTAwM2VmZHRfc2l6ZSwga2hvLVxcdTAwM2Vib290bWVtX2FkZHIsIGtoby1cXHUwMDNlYm9vdG1lbV9zaXplKTtcXG4gXFxuIFxcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jIGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jXFxuaW5kZXggNjk0ZDgwYTVjNjhlMS4uNjUxMTBiMmVlMWExZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmNcXG4rKysgYi9hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmNcXG5AQCAtNjYsNyArNjYsNyBAQCB2b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl8xTSk7XFxuIFxcbi1cXHRtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaCgwLCBTWl8xTSk7XFxuK1xcdG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KDAsIFNaXzFNKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IHNtZV9zZXZfc2V0dXBfcmVhbF9tb2RlKHN0cnVjdCB0cmFtcG9saW5lX2hlYWRlciAqdGgpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXFxuaW5kZXggNjEwM2IxYTA4MmQyNC4uOWYwOWIwZDJkYWEwYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuY1xcbkBAIC0xNjUsMTAgKzE2NSwxMCBAQCBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpXFxuIFxcdFxcdHByX2luZm8oXFxcIlByb2Nlc3NpbmcgRUZJIG1lbW9yeSBtYXA6XFxcXG5cXFwiKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIERpc2NhcmQgbWVtYmxvY2tzIGRpc2NvdmVyZWQgc28gZmFyIGV4Y2VwdCBmb3IgS0hPIHNjcmF0Y2hcXG4rXFx0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gYm9vdG1lbVxcbiBcXHQgKiByZWdpb25zLiBNb3N0IG1lbWJsb2NrcyBhdCB0aGlzIHBvaW50IG9yaWdpbmF0ZSBmcm9tIG1lbW9yeSBub2Rlc1xcbiBcXHQgKiBpbiB0aGUgRFQgYW5kIFVFRkkgdXNlcyBpdHMgb3duIG1lbW9yeSBtYXAgaW5zdGVhZC4gSG93ZXZlciwgaWZcXG4tXFx0ICogS0hPIGlzIGVuYWJsZWQsIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XFxuK1xcdCAqIEtITyBpcyBlbmFibGVkLCBib290bWVtIHJlZ2lvbnMsIHdoaWNoIGFyZSBnb29kIGtub3duIG1lbW9yeVxcbiBcXHQgKiBtdXN0IGJlIHByZXNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdG1lbWJsb2NrX2R1bXBfYWxsKCk7XFxuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpXFxuIFxcbiBcXHRcXHQvKiBSZW1vdmUgYWxsIG5vbi1LSE8gcmVnaW9ucyAqL1xcbiBcXHRcXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHtcXG4tXFx0XFx0XFx0aWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkge1xcbitcXHRcXHRcXHRpZiAoIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHIpKSB7XFxuIFxcdFxcdFxcdFxcdG1lbWJsb2NrX3JlbW92ZShyLVxcdTAwM2ViYXNlLCByLVxcdTAwM2VzaXplKTtcXG4gXFx0XFx0XFx0XFx0ci0tO1xcbiBcXHRcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yva2V4ZWMuYyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xcbmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jXFxuKysrIGIvZHJpdmVycy9vZi9rZXhlYy5jXFxuQEAgLTI2MSwyMyArMjYxLDIzIEBAIHN0YXRpYyBpbnQga2hvX2FkZF9jaG9zZW4oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmZkdCwgaW50IGNob3Nlbl9ub2RlXFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG4gXFx0cGh5c19hZGRyX3QgZmR0X21lbSA9IDA7XFxuIFxcdHBoeXNfYWRkcl90IGZkdF9sZW4gPSAwO1xcbi1cXHRwaHlzX2FkZHJfdCBzY3JhdGNoX21lbSA9IDA7XFxuLVxcdHBoeXNfYWRkcl90IHNjcmF0Y2hfbGVuID0gMDtcXG4rXFx0cGh5c19hZGRyX3QgYm9vdG1lbV9hcnIgPSAwO1xcbitcXHRwaHlzX2FkZHJfdCBib290bWVtX2xlbiA9IDA7XFxuIFxcbiBcXHRyZXQgPSBmZHRfZGVscHJvcChmZHQsIGNob3Nlbl9ub2RlLCBcXFwibGludXgsa2hvLWZkdFxcXCIpO1xcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0cmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgXFxcImxpbnV4LGtoby1zY3JhdGNoXFxcIik7XFxuK1xcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFxcXCJsaW51eCxraG8tYm9vdG1lbVxcXCIpO1xcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmICghaW1hZ2UtXFx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVxcdTAwM2VraG8uc2NyYXRjaClcXG4rXFx0aWYgKCFpbWFnZS1cXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXFx1MDAzZWtoby5ib290bWVtKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZkdF9tZW0gPSBpbWFnZS1cXHUwMDNla2hvLmZkdDtcXG4gXFx0ZmR0X2xlbiA9IFBBR0VfU0laRTtcXG4tXFx0c2NyYXRjaF9tZW0gPSBpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gtXFx1MDAzZW1lbTtcXG4tXFx0c2NyYXRjaF9sZW4gPSBpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gtXFx1MDAzZWJ1ZnN6O1xcbitcXHRib290bWVtX2FyciA9IGltYWdlLVxcdTAwM2VraG8uYm9vdG1lbS1cXHUwMDNlbWVtO1xcbitcXHRib290bWVtX2xlbiA9IGltYWdlLVxcdTAwM2VraG8uYm9vdG1lbS1cXHUwMDNlYnVmc3o7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiQWRkaW5nIGtobyBtZXRhZGF0YSB0byBEVFxcXCIpO1xcbiBcXG5AQCAtMjg1LDggKzI4NSw4IEBAIHN0YXRpYyBpbnQga2hvX2FkZF9jaG9zZW4oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmZkdCwgaW50IGNob3Nlbl9ub2RlXFxuIFxcdFxcdFxcdFxcdCAgICAgICBmZHRfbWVtLCBmZHRfbGVuKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0cmV0ID0gZmR0X2FwcGVuZHByb3BfYWRkcnJhbmdlKGZkdCwgMCwgY2hvc2VuX25vZGUsIFxcXCJsaW51eCxraG8tc2NyYXRjaFxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzY3JhdGNoX21lbSwgc2NyYXRjaF9sZW4pO1xcbitcXHRyZXQgPSBmZHRfYXBwZW5kcHJvcF9hZGRycmFuZ2UoZmR0LCAwLCBjaG9zZW5fbm9kZSwgXFxcImxpbnV4LGtoby1ib290bWVtXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb3RtZW1fYXJyLCBib290bWVtX2xlbik7XFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxcbmluZGV4IDUwODM5ZmI1ZWU4ZWQuLmNmNzNkOWIzNGMzYzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oXFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oXFxuQEAgLTQsNyArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuLXN0cnVjdCBraG9fc2NyYXRjaCB7XFxuK3N0cnVjdCBraG9fYm9vdG1lbSB7XFxuIFxcdHBoeXNfYWRkcl90IGFkZHI7XFxuIFxcdHBoeXNfYWRkcl90IHNpemU7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V4ZWMuaCBiL2luY2x1ZGUvbGludXgva2V4ZWMuaFxcbmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oXFxuQEAgLTQxOCw3ICs0MTgsNyBAQCBzdHJ1Y3Qga2ltYWdlIHtcXG4gI2VuZGlmXFxuIFxcbiBcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRzdHJ1Y3Qga2V4ZWNfc2VnbWVudCAqc2NyYXRjaDtcXG4rXFx0XFx0c3RydWN0IGtleGVjX3NlZ21lbnQgKmJvb3RtZW07XFxuIFxcdFxcdHBoeXNfYWRkcl90IGZkdDtcXG4gXFx0fSBraG87XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXG5pbmRleCA0NmRlODZkYzM0M2U5Li5lZjJiMTg4YzhlZDA5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbkBAIC0zNiwxNSArMzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xcbiB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKTtcXG4gdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCk7XFxuIFxcbi12b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cyxcXG4tXFx0XFx0ICB1NjQgc2NyYXRjaF9sZW4pO1xcbit2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cyxcXG4rXFx0XFx0ICB1NjQgYm9vdG1lbV9sZW4pO1xcbiBcXG4tYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG4rYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcXG4rc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZW51bSBtaWdyYXRldHlwZSBtdClcXG4ge1xcbi1cXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpXFxuK1xcdGlmIChraG9fYm9vdG1lbV9vdmVybGFwKFBGTl9QSFlTKHBmbiksIHBhZ2VibG9ja19ucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSlcXG4gXFx0XFx0cmV0dXJuIE1JR1JBVEVfQ01BO1xcbiBcXHRyZXR1cm4gbXQ7XFxuIH1cXG5AQCAtMTIzLDE2ICsxMjMsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKSB7IH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxcbi1cXHRcXHRcXHRcXHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcXG4rXFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYm9vdG1lbV9waHlzLCB1NjQgYm9vdG1lbV9sZW4pXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxcbitzdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxcbiB7XFxuIFxcdHJldHVybiBtdDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXFxuaW5kZXggZDYyZGI5ZTc3NmNmOS4uMTg2Yjk2NWNmYzg5NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcXG5AQCAtNDYsMTEgKzQ2LDExIEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcXG4gICogQE1FTUJMT0NLX1JTUlZfS0VSTjogbWVtb3J5IHJlZ2lvbiB0aGF0IGlzIHJlc2VydmVkIGZvciBrZXJuZWwgdXNlLFxcbiAgKiBlaXRoZXIgZXhwbGljdGl0bHkgd2l0aCBtZW1ibG9ja19yZXNlcnZlX2tlcm4oKSBvciB2aWEgbWVtYmxvY2tcXG4gICogYWxsb2NhdGlvbiBBUElzLiBBbGwgbWVtYmxvY2sgYWxsb2NhdGlvbnMgc2V0IHRoaXMgZmxhZy5cXG4tICogQE1FTUJMT0NLX0tIT19TQ1JBVENIOiBtZW1vcnkgcmVnaW9uIHRoYXQga2V4ZWMgY2FuIHBhc3MgdG8gdGhlIG5leHRcXG4tICoga2VybmVsIGluIGhhbmRvdmVyIG1vZGUuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGxcXG4tICogbWVtb3J5IHJlc2VydmF0aW9ucyB5ZXQsIHNvIHdlIGdldCBzY3JhdGNoIG1lbW9yeSBmcm9tIHRoZSBwcmV2aW91c1xcbi0gKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdFxcbi0gKiBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20gaW4gdGhpcyBwaGFzZS5cXG4rICogQE1FTUJMT0NLX0tIT19OT1BSU1JWOiBtZW1vcnkgcmVnaW9uIHdpdGggbm8gcHJlc2VydmF0aW9uIGZyb20ga2V4ZWNcXG4rICogaGFuZG92ZXIuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGwgbWVtb3J5IHByZXNlcnZhdGlvbnNcXG4rICogeWV0LCBzbyB3ZSBnZXQgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgdGhhdCB3ZVxcbisgKiBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdCBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb21cXG4rICogaW4gdGhpcyBwaGFzZS5cXG4gICogQE1FTUJMT0NLX1JTUlZfSFVHRVRMQjogbWVtb3J5IGlzIHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzXFxuICAqL1xcbiBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcXG5AQCAtNjEsNyArNjEsNyBAQCBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcXG4gXFx0TUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQgPSAweDgsXFx0LyogYWx3YXlzIGRldGVjdGVkIHZpYSBhIGRyaXZlciAqL1xcbiBcXHRNRU1CTE9DS19SU1JWX05PSU5JVFxcdD0gMHgxMCxcXHQvKiBkb24ndCBpbml0aWFsaXplIHN0cnVjdCBwYWdlcyAqL1xcbiBcXHRNRU1CTE9DS19SU1JWX0tFUk5cXHQ9IDB4MjAsXFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXFxuLVxcdE1FTUJMT0NLX0tIT19TQ1JBVENIXFx0PSAweDQwLFxcdC8qIHNjcmF0Y2ggbWVtb3J5IGZvciBrZXhlYyBoYW5kb3ZlciAqL1xcbitcXHRNRU1CTE9DS19LSE9fTk9QUlNSVlxcdD0gMHg0MCxcXHQvKiBtZW1vcnkgd2l0aCBubyBLSE8gcHJlc2VydmF0aW9ucyAqL1xcbiBcXHRNRU1CTE9DS19SU1JWX0hVR0VUTEJcXHQ9IDB4ODAsIC8qIG1lbW9yeSByZXNlcnZlZCBmb3IgaHVnZXRsYiBwYWdlcyAqL1xcbiB9O1xcbiBcXG5AQCAtMTU4LDggKzE1OCw4IEBAIGludCBtZW1ibG9ja19tYXJrX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbiBpbnQgbWVtYmxvY2tfY2xlYXJfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuIGludCBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4gaW50IG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4taW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuLWludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4raW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuK2ludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4gXFxuIHZvaWQgbWVtYmxvY2tfZnJlZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcXG4gdm9pZCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKTtcXG5AQCAtMzAxLDkgKzMwMSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19kcml2ZXJfbWFuYWdlZChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxcbiBcXHRyZXR1cm4gbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRU1CTE9DS19EUklWRVJfTUFOQUdFRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2tob19zY3JhdGNoKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fbm9wcnNydihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxcbiB7XFxuLVxcdHJldHVybiBtLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1FTUJMT0NLX0tIT19TQ1JBVENIO1xcbitcXHRyZXR1cm4gbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcXG4gfVxcbiBcXG4gaW50IG1lbWJsb2NrX3NlYXJjaF9wZm5fbmlkKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXFxuQEAgLTYxNCwxMiArNjE0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9tZW10ZXN0KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtdGVzdF9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pIHsgfVxcbiAjZW5kaWZcXG4gXFxuLSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4tdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTtcXG4tdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpO1xcbisjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuK3ZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCk7XFxuK3ZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNldl9vbmx5KHZvaWQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKSB7IH1cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX0xJTlVYX01FTUJMT0NLX0ggKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcXG5pbmRleCBjMTNhZjM4YmEyM2FiLi5mNTBkYWVlOGVmZjA3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnXFxuQEAgLTUsNyArNSw2IEBAIG1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG4gY29uZmlnIEtFWEVDX0hBTkRPVkVSXFxuIFxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyXFxcIlxcbiBcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVIgXFx1MDAyNlxcdTAwMjYgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXFxuLVxcdHNlbGVjdCBNRU1CTE9DS19LSE9fU0NSQVRDSFxcbiBcXHRzZWxlY3QgS0VYRUNfRklMRVxcbiBcXHRzZWxlY3QgTElCRkRUXFxuIFxcdHNlbGVjdCBDTUFcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5pbmRleCBmZTZmMmFjN2U0NTgzLi5kYThkNWVjYjkxNWI1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuQEAgLTQxLDEyICs0MSwxMiBAQFxcbiAvKlxcbiAgKiBUaGlzIGlzIHRoZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBkZWZlcnJlZCBzdHJ1Y3QgcGFnZSBpbml0LlxcbiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3NcXG4tICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS5cXG4tICogSWYgS0hPIHNjcmF0Y2ggaXMgbm90IGFsaWduZWQgdG8gdGhhdCB2YWx1ZSwgYnVkZHkgY2FuIGFjY2VzcyB1bmluaXRpYWxpemVkXFxuLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXFxuKyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uIElmIEtITyBib290bWVtXFxuKyAqIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFnZXMsXFxuKyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxcbiAgKi9cXG4tI2RlZmluZSBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxcbi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFxcdTAwM2U9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rI2RlZmluZSBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxcbitzdGF0aWNfYXNzZXJ0KEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIFxcdTAwM2U9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4gXFxuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXFxuICNkZWZpbmUgS0hPX1BBR0VfTUFHSUMgMHg0YjQ4NGY1MFUgLyogQVNDSUkgZm9yICdLSE9QJyAqL1xcbkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xcbiBcXG4gc3RydWN0IGtob19pbiB7XFxuIFxcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xcbi1cXHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXM7XFxuK1xcdHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cztcXG4gXFx0Y2hhciBwcmV2aW91c19yZWxlYXNlW19fTkVXX1VUU19MRU4gKyAxXTtcXG4gXFx0dTMyIGtleGVjX2NvdW50O1xcbiBcXHRzdHJ1Y3Qga2hvX2RlYnVnZnMgZGJnO1xcbkBAIC02NTYsMzQgKzY1NiwzNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgKmtob19nZXRfbWVtX21hcChjb25zdCB2b2lkICpmZHQpXFxuIFxcbiAvKlxcbiAgKiBXaXRoIEtITyBlbmFibGVkLCBtZW1vcnkgY2FuIGJlY29tZSBmcmFnbWVudGVkIGJlY2F1c2UgS0hPIHJlZ2lvbnMgbWF5XFxuLSAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBzY3JhdGNoIHJlZ2lvbnMgZ2l2ZSB1cyBhXFxuKyAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBib290bWVtIHJlZ2lvbnMgZ2l2ZSB1cyBhXFxuICAqIHNhZmUgem9uZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIHNlZSBLSE8gYWxsb2NhdGlvbnMgZnJvbS4gVGhpcyBpcyB3aGVyZSB3ZVxcbi0gKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIHNjcmF0Y2hcXG4rICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBib290bWVtXFxuICAqIGFyZWEgZm9yIGVhcmx5IGFsbG9jYXRpb25zIHRoYXQgaGFwcGVuIGJlZm9yZSBwYWdlIGFsbG9jYXRvciBpc1xcbiAgKiBpbml0aWFsaXplZC5cXG4gICovXFxuLXN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XFxuLXVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XFxuK3N0cnVjdCBraG9fYm9vdG1lbSAqa2hvX2Jvb3RtZW07XFxuK3Vuc2lnbmVkIGludCBraG9fYm9vdG1lbV9jbnQ7XFxuIFxcbiAvKlxcbi0gKiBUaGUgc2NyYXRjaCBhcmVhcyBhcmUgc2NhbGVkIGJ5IGRlZmF1bHQgYXMgcGVyY2VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb21cXG4rICogVGhlIGJvb3RtZW0gYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXFxuICAqIG1lbWJsb2NrLiBBIHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBzY2FsZSB3aXRoIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXI6XFxuICAqXFxuLSAqIGtob19zY3JhdGNoPU4lXFxuKyAqIGtob19ib290bWVtPU4lXFxuICAqXFxuICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBmb3IgYSBsb3dtZW0sIGEgZ2xvYmFsIGFuZFxcbi0gKiBwZXItbm9kZSBzY3JhdGNoIGFyZWFzOlxcbisgKiBwZXItbm9kZSBib290bWVtIGFyZWFzOlxcbiAgKlxcbi0gKiBraG9fc2NyYXRjaD1sW0tNR10sbltLTUddLG1bS01HXVxcbisgKiBraG9fYm9vdG1lbT1sW0tNR10sbltLTUddLG1bS01HXVxcbiAgKlxcbiAgKiBUaGUgZXhwbGljaXQgc2l6ZSBkZWZpbml0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzY2FsZSBkZWZpbml0aW9uLlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBzY3JhdGNoX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7XFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfcGVybm9kZSBfX2luaXRkYXRhO1xcbi1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX2xvd21lbSBfX2luaXRkYXRhO1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGJvb3RtZW1fc2NhbGUgX19pbml0ZGF0YSA9IDIwMDtcXG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9nbG9iYWwgX19pbml0ZGF0YTtcXG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9wZXJub2RlIF9faW5pdGRhdGE7XFxuK3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfbG93bWVtIF9faW5pdGRhdGE7XFxuIFxcbi1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXFxuK3N0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9ib290bWVtX3NpemUoY2hhciAqcClcXG4ge1xcbiBcXHRzaXplX3QgbGVuO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemVzWzNdO1xcbkBAIC03MDcsOSArNzA3LDkgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdG1lbWNweShzX3NjYWxlLCBwLCBsZW4gLSAxKTtcXG4tXFx0XFx0cmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgXFx1MDAyNnNjcmF0Y2hfc2NhbGUpO1xcbitcXHRcXHRyZXQgPSBrc3RydG91aW50KHNfc2NhbGUsIDEwLCBcXHUwMDI2Ym9vdG1lbV9zY2FsZSk7XFxuIFxcdFxcdGlmICghcmV0KVxcbi1cXHRcXHRcXHRwcl9ub3RpY2UoXFxcInNjcmF0Y2ggc2NhbGUgaXMgJWQlJVxcXFxuXFxcIiwgc2NyYXRjaF9zY2FsZSk7XFxuK1xcdFxcdFxcdHByX25vdGljZShcXFwiYm9vdG1lbSBzY2FsZSBpcyAlZCUlXFxcXG5cXFwiLCBib290bWVtX3NjYWxlKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtNzM3LDgxICs3MzcsODEgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxcbiBcXHRpZiAoKnApXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHNpemVzWzBdO1xcbi1cXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07XFxuLVxcdHNjcmF0Y2hfc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07XFxuLVxcdHNjcmF0Y2hfc2NhbGUgPSAwO1xcbitcXHRib290bWVtX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XFxuK1xcdGJvb3RtZW1fc2l6ZV9nbG9iYWwgPSBzaXplc1sxXTtcXG4rXFx0Ym9vdG1lbV9zaXplX3Blcm5vZGUgPSBzaXplc1syXTtcXG4rXFx0Ym9vdG1lbV9zY2FsZSA9IDA7XFxuIFxcbi1cXHRwcl9ub3RpY2UoXFxcInNjcmF0Y2ggYXJlYXM6IGxvd21lbTogJWxsdU1pQiBnbG9iYWw6ICVsbHVNaUIgcGVybm9kZTogJWxsZE1pQlxcXFxuXFxcIixcXG4tXFx0XFx0ICAodTY0KShzY3JhdGNoX3NpemVfbG93bWVtIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4tXFx0XFx0ICAodTY0KShzY3JhdGNoX3NpemVfZ2xvYmFsIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4tXFx0XFx0ICAodTY0KShzY3JhdGNoX3NpemVfcGVybm9kZSBcXHUwMDNlXFx1MDAzZSAyMCkpO1xcbitcXHRwcl9ub3RpY2UoXFxcImJvb3RtZW0gYXJlYXM6IGxvd21lbTogJWxsdU1pQiBnbG9iYWw6ICVsbHVNaUIgcGVybm9kZTogJWxsZE1pQlxcXFxuXFxcIixcXG4rXFx0XFx0ICAodTY0KShib290bWVtX3NpemVfbG93bWVtIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4rXFx0XFx0ICAodTY0KShib290bWVtX3NpemVfZ2xvYmFsIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4rXFx0XFx0ICAodTY0KShib290bWVtX3NpemVfcGVybm9kZSBcXHUwMDNlXFx1MDAzZSAyMCkpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tZWFybHlfcGFyYW0oXFxcImtob19zY3JhdGNoXFxcIiwga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZSk7XFxuK2Vhcmx5X3BhcmFtKFxcXCJraG9fYm9vdG1lbVxcXCIsIGtob19wYXJzZV9ib290bWVtX3NpemUpO1xcbiBcXG4tc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcXG4rc3RhdGljIHZvaWQgX19pbml0IGJvb3RtZW1fc2l6ZV91cGRhdGUodm9pZClcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBJZiBmaXhlZCBzaXplcyBhcmUgbm90IHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUsIGNhbGN1bGF0ZSB0aGVtIG5vdy5cXG4gXFx0ICogUmVtb3ZlIEh1Z2VUTEIgYWxsb2NhdGlvbnMgZnJvbSBpdCBiZWNhdXNlIHRoZXkgbmV2ZXIgZ2V0IGFsbG9jYXRlZFxcbi1cXHQgKiBmcm9tIHNjcmF0Y2guXFxuK1xcdCAqIGZyb20gYm9vdG1lbS5cXG4gXFx0ICovXFxuLVxcdGlmIChzY3JhdGNoX3NjYWxlKSB7XFxuK1xcdGlmIChib290bWVtX3NjYWxlKSB7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHNpemU7XFxuIFxcbiBcXHRcXHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIE5VTUFfTk9fTk9ERSk7XFxuIFxcdFxcdHNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOVU1BX05PX05PREUpO1xcbi1cXHRcXHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7XFxuLVxcdFxcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplO1xcbitcXHRcXHRzaXplID0gc2l6ZSAqIGJvb3RtZW1fc2NhbGUgLyAxMDA7XFxuK1xcdFxcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSBzaXplO1xcbiBcXG4gXFx0XFx0c2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgTlVNQV9OT19OT0RFKTtcXG4gXFx0XFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOVU1BX05PX05PREUpO1xcbi1cXHRcXHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDAgLSBzY3JhdGNoX3NpemVfbG93bWVtO1xcbi1cXHRcXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZTtcXG4rXFx0XFx0c2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwIC0gYm9vdG1lbV9zaXplX2xvd21lbTtcXG4rXFx0XFx0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHNpemU7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodFxcbitcXHQgKiBib290bWVtIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcXG4gXFx0ICogc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuLVxcdHNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSByb3VuZF91cChzY3JhdGNoX3NpemVfZ2xvYmFsLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSByb3VuZF91cChib290bWVtX3NpemVfbG93bWVtLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdGJvb3RtZW1fc2l6ZV9nbG9iYWwgPSByb3VuZF91cChib290bWVtX3NpemVfZ2xvYmFsLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZClcXG4rc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBib290bWVtX3NpemVfbm9kZShpbnQgbmlkKVxcbiB7XFxuIFxcdHBoeXNfYWRkcl90IHNpemU7XFxuIFxcbi1cXHRpZiAoc2NyYXRjaF9zY2FsZSkge1xcbitcXHRpZiAoYm9vdG1lbV9zY2FsZSkge1xcbiBcXHRcXHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBuaWQpO1xcbiBcXHRcXHQvKiBEbyBub3QgY291bnQgSHVnZVRMQiBwYWdlcy4gKi9cXG4gXFx0XFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBuaWQpO1xcbi1cXHRcXHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7XFxuK1xcdFxcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9wZXJub2RlO1xcbitcXHRcXHRzaXplID0gYm9vdG1lbV9zaXplX3Blcm5vZGU7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdHJldHVybiByb3VuZF91cChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuIH1cXG4gXFxuLWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4rYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiB7XFxuLVxcdHBoeXNfYWRkcl90IHNjcmF0Y2hfc3RhcnQsIHNjcmF0Y2hfZW5kO1xcbitcXHRwaHlzX2FkZHJfdCBib290bWVtX3N0YXJ0LCBib290bWVtX2VuZDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG4tXFx0XFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XFxuLVxcdFxcdHNjcmF0Y2hfZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciArIGtob19zY3JhdGNoW2ldLnNpemU7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBraG9fYm9vdG1lbV9jbnQ7IGkrKykge1xcbitcXHRcXHRib290bWVtX3N0YXJ0ID0ga2hvX2Jvb3RtZW1baV0uYWRkcjtcXG4rXFx0XFx0Ym9vdG1lbV9lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICsga2hvX2Jvb3RtZW1baV0uc2l6ZTtcXG4gXFxuLVxcdFxcdGlmIChwaHlzIFxcdTAwM2Mgc2NyYXRjaF9lbmQgXFx1MDAyNlxcdTAwMjYgKHBoeXMgKyBzaXplKSBcXHUwMDNlIHNjcmF0Y2hfc3RhcnQpXFxuK1xcdFxcdGlmIChwaHlzIFxcdTAwM2MgYm9vdG1lbV9lbmQgXFx1MDAyNlxcdTAwMjYgKHBoeXMgKyBzaXplKSBcXHUwMDNlIGJvb3RtZW1fc3RhcnQpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC04MTksNyArODE5LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiB9XFxuIFxcbiAvKipcXG4tICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG4rICoga2hvX3Jlc2VydmVfYm9vdG1lbSAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG4gICpcXG4gICogV2l0aCBLSE8gd2UgY2FuIHByZXNlcnZlIGFyYml0cmFyeSBwYWdlcyBpbiB0aGUgc3lzdGVtLiBUbyBlbnN1cmUgd2Ugc3RpbGxcXG4gICogaGF2ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSB3aGVuIHdlIHNlYXJjaCB0aGUgcGh5c2ljYWwgYWRkcmVzc1xcbkBAIC04MjcsNyArODI3LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiAgKiBhY3RpdmUuIFRoaXMgQ01BIHJlZ2lvbiB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgbW92YWJsZSBwYWdlcyB3aGljaCBhcmUgbm90IGFcXG4gICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9ib290bWVtKHZvaWQpXFxuIHtcXG4gXFx0cGh5c19hZGRyX3QgYWRkciwgc2l6ZTtcXG4gXFx0aW50IG5pZCwgaSA9IDA7XFxuQEAgLTgzNSw3MyArODM1LDczIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuIFxcdGlmICgha2hvX2VuYWJsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0c2NyYXRjaF9zaXplX3VwZGF0ZSgpO1xcbitcXHRib290bWVtX3NpemVfdXBkYXRlKCk7XFxuIFxcbiBcXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXFxuLVxcdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcXG4tXFx0c2l6ZSA9IGtob19zY3JhdGNoX2NudCAqIHNpemVvZigqa2hvX3NjcmF0Y2gpO1xcbi1cXHRraG9fc2NyYXRjaCA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XFxuLVxcdGlmICgha2hvX3NjcmF0Y2gpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFycmF5XFxcXG5cXFwiKTtcXG4rXFx0a2hvX2Jvb3RtZW1fY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgKyAyO1xcbitcXHRzaXplID0ga2hvX2Jvb3RtZW1fY250ICogc2l6ZW9mKCpraG9fYm9vdG1lbSk7XFxuK1xcdGtob19ib290bWVtID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcXG4rXFx0aWYgKCFraG9fYm9vdG1lbSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byByZXNlcnZlIGJvb3RtZW0gYXJyYXlcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2tobztcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxcbitcXHQgKiByZXNlcnZlIGJvb3RtZW0gYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlXFxuIFxcdCAqIG5leHQga2VybmVsXFxuIFxcdCAqL1xcbi1cXHRzaXplID0gc2NyYXRjaF9zaXplX2xvd21lbTtcXG4tXFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXFxuK1xcdHNpemUgPSBib290bWVtX3NpemVfbG93bWVtO1xcbitcXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywgMCxcXG4gXFx0XFx0XFx0XFx0XFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xcbiBcXHRpZiAoIWFkZHIpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXFxcblxcXCIpO1xcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfZGVzYztcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9kZXNjO1xcbiBcXHR9XFxuIFxcbi1cXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4tXFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XFxuK1xcdGtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyO1xcbitcXHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcXG4gXFx0aSsrO1xcbiBcXG4gXFx0LyogcmVzZXJ2ZSBsYXJnZSBjb250aWd1b3VzIGFyZWEgZm9yIGFsbG9jYXRpb25zIHdpdGhvdXQgbmlkICovXFxuLVxcdHNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsO1xcbi1cXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdHNpemUgPSBib290bWVtX3NpemVfZ2xvYmFsO1xcbitcXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuIFxcdGlmICghYWRkcikge1xcbi1cXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgYm9vdG1lbVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcXG4gXFx0fVxcbiBcXG4tXFx0a2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7XFxuLVxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbitcXHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcXG4rXFx0a2hvX2Jvb3RtZW1baV0uc2l6ZSA9IHNpemU7XFxuIFxcdGkrKztcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIExvb3Agb3ZlciBub2RlcyB0aGF0IGhhdmUgYm90aCBtZW1vcnkgYW5kIGFyZSBvbmxpbmUuIFNraXBcXG4tXFx0ICogbWVtb3J5bGVzcyBub2RlcywgYXMgd2UgY2FuIG5vdCBhbGxvY2F0ZSBzY3JhdGNoIGFyZWFzIHRoZXJlLlxcbitcXHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIGJvb3RtZW0gYXJlYXMgdGhlcmUuXFxuIFxcdCAqL1xcbiBcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG4tXFx0XFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XFxuLVxcdFxcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsXFxuK1xcdFxcdHNpemUgPSBib290bWVtX3NpemVfbm9kZShuaWQpO1xcbitcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRuaWQsIHRydWUpO1xcbiBcXHRcXHRpZiAoIWFkZHIpIHtcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgc2NyYXRjaCBidWZmZXJcXFxcblxcXCIsIG5pZCk7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgYm9vdG1lbVxcXFxuXFxcIiwgbmlkKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9ib290bWVtX2FyZWFzO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4tXFx0XFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XFxuK1xcdFxcdGtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyO1xcbitcXHRcXHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcXG4gXFx0XFx0aSsrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm47XFxuIFxcbi1lcnJfZnJlZV9zY3JhdGNoX2FyZWFzOlxcbitlcnJfZnJlZV9ib290bWVtX2FyZWFzOlxcbiBcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLVxcdFxcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fc2NyYXRjaFtpXS5hZGRyLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcXG4tZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOlxcbi1cXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XFxuK1xcdFxcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fYm9vdG1lbVtpXS5hZGRyLCBraG9fYm9vdG1lbVtpXS5zaXplKTtcXG4rZXJyX2ZyZWVfYm9vdG1lbV9kZXNjOlxcbitcXHRtZW1ibG9ja19mcmVlKGtob19ib290bWVtLCBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKSk7XFxuIGVycl9kaXNhYmxlX2tobzpcXG4tXFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcmVhLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXFxcblxcXCIpO1xcbitcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBib290bWVtLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXFxcblxcXCIpO1xcbiBcXHRraG9fZW5hYmxlID0gZmFsc2U7XFxuIH1cXG4gXFxuQEAgLTkxMSwxMSArOTExLDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuICAqIG9uIHNtYWxsZXIgc3lzdGVtcy4gVGhlIGFsZ29yaXRobSBpdHNlbGYgZG9lc24ndCBkZXBlbmQgb24gdGhlIGFjdHVhbCB2YWx1ZSxcXG4gICogc28gaXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBkaWZmZXJlbnQgaGV1cmlzdGljIGxhdGVyIGlmIG5lZWRlZC5cXG4gICovXFxuLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkVcXHRcXHRTWl8xR1xcbi0jZGVmaW5lIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVFxcdGNvbnN0X2lsb2cyKEtIT19TQ1JBVENIX0VYVF9CTEtTSVpFKVxcbisjZGVmaW5lIEtIT19ESVNDT1ZFUl9CTEtTSVpFXFx0XFx0U1pfMUdcXG4rI2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0hJRlRcXHRjb25zdF9pbG9nMihLSE9fRElTQ09WRVJfQkxLU0laRSlcXG4gXFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXFxuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxcbitzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqYnVzeV9ibG9ja3MgPSBkYXRhO1xcbiBcXHRwaHlzX2FkZHJfdCBzdGFydCwgZW5kO1xcbkBAIC05MzAsNTQgKzkzMCw1NyBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4gXFx0ZW5kID0gc3RhcnQgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChvcmRlciArIFBBR0VfU0hJRlQpKTtcXG4gXFxuIFxcdHdoaWxlIChzdGFydCBcXHUwMDNjIGVuZCkge1xcbi1cXHRcXHRlcnIgPSBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2Nrcywgc3RhcnQgXFx1MDAzZVxcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcXG4rXFx0XFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHN0YXJ0IFxcdTAwM2VcXHUwMDNlIEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRcXHRzdGFydCArPSAoMVVMIFxcdTAwM2NcXHUwMDNjIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7XFxuK1xcdFxcdHN0YXJ0ICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXFxuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfd2Fsa19ub2RlKHBoeXNfYWRkcl90IHBoeXMsIHZvaWQgKmRhdGEpXFxuK3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcXG4gXFxuLVxcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcXHUwMDNlXFx1MDAzZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQpO1xcbitcXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHBoeXMgXFx1MDAzZVxcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcXG4gfVxcbiBcXG4gLyogQ2FsbGVkIGZvciB0aGUgYnVzeSBibG9jayByYWRpeCB0cmVlLiAqL1xcbi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X21hcmtfc2NyYXRjaCh1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4rc3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX21hcmtfbm9wcnNydih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRwaHlzX2FkZHJfdCAqcHJldl9lbmQgPSBkYXRhO1xcbi1cXHRwaHlzX2FkZHJfdCBzdGFydCA9IGtleSBcXHUwMDNjXFx1MDAzYyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQ7XFxuK1xcdHBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5IFxcdTAwM2NcXHUwMDNjIEtIT19ESVNDT1ZFUl9CTEtTSElGVDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmIChzdGFydCBcXHUwMDNlICpwcmV2X2VuZCkge1xcbi1cXHRcXHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xcbitcXHRcXHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHQqcHJldl9lbmQgPSBzdGFydCArICgxVUwgXFx1MDAzY1xcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcXG4rXFx0KnByZXZfZW5kID0gc3RhcnQgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbi0gKiBraG9fZXh0ZW5kX3NjcmF0Y2ggLSBFeHRlbmQgdGhlIHNjcmF0Y2ggcmVnaW9uc1xcbisgKiBraG9fZGlzY292ZXJfbm9wcnNydiAtIERpc2NvdmVyIG1lbW9yeSB3aXRoIG5vIHByZXNlcnZhdGlvbnNcXG4rICpcXG4rICogRGlzY292ZXJzIG1lbW9yeSByYW5nZXMgd2l0aCBubyBwcmVzZXJ2ZWQgbWVtb3J5IGFuZCBtYXJrcyBpdCBhcyBOT1BSU1JWLlxcbisgKiBUaGlzIGxldHMgbWVtYmxvY2sgYWxsb2NhdGUgbWVtb3J5IGZyb20gYXJlYXMgb3V0c2lkZSBLSE8gYm9vdG1lbS5cXG4gICpcXG4gICogVGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUgbWl4ZXMgYm90aCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlclxcbiAgKiBpbnRvIGEgc2luZ2xlIGtleS4gVGhpcyBtYWtlcyBpdCBoYXJkIHRvIGxvb2sgZm9yIGZyZWUgcmFuZ2VzIGRpcmVjdGx5LiBUaGlzXFxuICAqIGZ1bmN0aW9uIGZpcnN0IHdhbGtzIHRoZSByYWRpeCB0cmVlIGFuZCBkaWdlc3RzIGl0IGRvd24gaW50byBhbm90aGVyIHJhZGl4XFxuLSAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkUgd2hpY2hcXG4tICogY29udGFpbiBwcmVzZXJ2ZWQgbWVtb3J5LlxcbisgKiB0cmVlLCB3aG9zZSBrZXlzIGlkZW50aWZ5IGJsb2NrcyBvZiBzaXplIEtIT19ESVNDT1ZFUl9CTEtTSVpFIHdoaWNoIGNvbnRhaW5cXG4rICogcHJlc2VydmVkIG1lbW9yeS5cXG4gICpcXG4gICogVGhlbiBpdCB3YWxrcyB0aGUgZGlnZXN0ZWQgcmFkaXggdHJlZSBhbmQgbWFya3MgZXZlcnl0aGluZyB0aGF0IGRvZXNuJ3QgaGF2ZVxcbi0gKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIHNjcmF0Y2guXFxuKyAqIHByZXNlcnZlZCBtZW1vcnkgYXMgTk9QUlNSVi5cXG4gICpcXG4tICogTk9URTogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBzY3JhdGNoIGhhc1xcbisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGJvb3RtZW0gaGFzXFxuICAqIGF2YWlsYWJsZSBzcGFjZS5cXG4gICpcXG4gICogTk9URTogVGhlIHBhZ2VzIG9mIHRoZSBLSE8gcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlIHRhYmxlcyBhcmUgbm90IG1hcmtlZFxcbkBAIC05ODYsMTggKzk4OSwxOCBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X21hcmtfc2NyYXRjaCh1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4gICogdGhlbSB0byBiZSBcXFwicHJlc2VydmVkIG1lbW9yeVxcXCIgYW5kIG1hcmtzIHRoZWlyIGJsb2NrcyBhcyBidXN5LlxcbiAgKlxcbiAgKiBOT1RFOiBlZmlfaW5pdCgpOjpyZXNlcnZlX3JlZ2lvbnMoKSByZW1vdmVzIGFsbCByZWdpb25zIGV4Y2VwdFxcbi0gKiBNRU1CTE9DS19LSE9fU0NSQVRDSC4gVGhpcyBmdW5jdGlvbiBhZGRzIHN1Y2ggcmVnaW9ucyBidXQgdGhleSBhcmUgbm90IEtIT1xcbi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxcbisgKiBNRU1CTE9DS19LSE9fTk9QUlNSVi4gVGhpcyBmdW5jdGlvbiBhZGRzIHN1Y2ggcmVnaW9ucyBidXQgdGhleSBhcmUgbm90IEtIT1xcbisgKiBib290IG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxcbiAgKiBjYWxsZWQgYWZ0ZXIgcmVzZXJ2ZV9yZWdpb25zKCkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2V4dGVuZF9zY3JhdGNoKHZvaWQpXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7XFxuLVxcdFxcdC5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsXFxuLVxcdFxcdC5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsXFxuK1xcdFxcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZixcXG4rXFx0XFx0Lm5vZGUgPSBraG9fZGlzY292ZXJfd2Fsa19ub2RlLFxcbiBcXHR9O1xcbiBcXHRjb25zdCBzdHJ1Y3Qga2hvX3JhZGl4X3dhbGtfY2IgZXh0X2NiID0ge1xcbi1cXHRcXHQubGVhZiA9IGtob19leHRfbWFya19zY3JhdGNoLFxcbitcXHRcXHQubGVhZiA9IGtob19kaXNjb3Zlcl9tYXJrX25vcHJzcnYsXFxuIFxcdH07XFxuIFxcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnVzeV9yYWRpeF9jbGFzcztcXG4gXFx0c3RydWN0IGtob19yYWRpeF90cmVlIGJ1c3lfYmxvY2tzO1xcbkBAIC0xMDIyLDIxICsxMDI1LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fZXh0ZW5kX3NjcmF0Y2godm9pZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBzY3JhdGNoLiAqL1xcbitcXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBub3Byc3J2LiAqL1xcbiBcXHRlcnIgPSBraG9fcmFkaXhfd2Fsa190cmVlKFxcdTAwMjZidXN5X2Jsb2NrcywgXFx1MDAyNmV4dF9jYiwgXFx1MDAyNnByZXZfZW5kKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiBNYXJrIGV2ZXJ5dGhpbmcgZnJvbSBsYXN0IGJ1c3kgYmxvY2sgdG8gZW5kIG9mIERSQU0uICovXFxuIFxcdGlmIChwcmV2X2VuZCBcXHUwMDNjIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpXFxuLVxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XFxuK1xcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XFxuIFxcbiBcXHQvKiBmYWxsdGhyb3VnaCAqL1xcbiBvdXQ6XFxuIFxcdGtob19yYWRpeF9kZXN0cm95X3RyZWUoXFx1MDAyNmJ1c3lfYmxvY2tzKTtcXG4gcHJpbnQ6XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGV4dGVuZCBzY3JhdGNoOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIoZXJyKSk7XFxuK1xcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGRpc2NvdmVyIGV4dHJhIGFsbG9jYXRhYmxlIG1lbW9yeTogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKGVycikpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTE1MCw3ICsxMTUzLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpKVxcbitcXHQgICAgV0FSTl9PTihraG9fYm9vdG1lbV9vdmVybGFwKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkodHJlZSwga2hvX2VuY29kZV9yYWRpeF9rZXkoUEZOX1BIWVMocGZuKSxcXG5AQCAtMTIyOCw3ICsxMjMxLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAoc3RhcnRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuK1xcdCAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAoc3RhcnRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSkge1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC0xODI1LDcgKzE4MjgsNyBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxcbiBcXG4gXFx0ZXJyID0ga2hvX3JhZGl4X2luaXRfdHJlZSh0cmVlLCBOVUxMKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX2Jvb3RtZW07XFxuIFxcbiBcXHRraG9fb3V0LmZkdCA9IGtob19hbGxvY19wcmVzZXJ2ZShQQUdFX1NJWkUpO1xcbiBcXHRpZiAoSVNfRVJSKGtob19vdXQuZmR0KSkge1xcbkBAIC0xODU0LDkgKzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGJhc2VfcGZuID0gUEhZU19QRk4oa2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fc2NyYXRjaFtpXS5zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBiYXNlX3BmbiA9IFBIWVNfUEZOKGtob19ib290bWVtW2ldLmFkZHIpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0ga2hvX2Jvb3RtZW1baV0uc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE4NjQsMTAgKzE4NjcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcXG4gXFx0XFx0ICogY29ycmVzcG9uZGluZyBQUkVTRU5UIGJpdCBpbiB0aGUga2VybmVsIHBhZ2UgdGFibGUuXFxuIFxcdFxcdCAqIFN1YnNlcXVlbnQga21lbWxlYWsgc2NhbnMgb2YgdGhlc2UgcGFnZXMgY2F1c2UgdGhlXFxuIFxcdFxcdCAqIG5vbi1QUkVTRU5UIHBhZ2UgZmF1bHRzLlxcbi1cXHRcXHQgKiBNYXJrIHNjcmF0Y2ggYXJlYXMgd2l0aCBrbWVtbGVha19pZ25vcmVfcGh5cygpIHRvIGV4Y2x1ZGVcXG4rXFx0XFx0ICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlXFxuIFxcdFxcdCAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpO1xcbitcXHRcXHRrbWVtbGVha19pZ25vcmVfcGh5cyhraG9fYm9vdG1lbVtpXS5hZGRyKTtcXG4gXFx0XFx0Zm9yIChwZm4gPSBiYXNlX3BmbjsgcGZuIFxcdTAwM2MgYmFzZV9wZm4gKyBjb3VudDtcXG4gXFx0XFx0ICAgICBwZm4gKz0gcGFnZWJsb2NrX25yX3BhZ2VzKVxcbiBcXHRcXHRcXHRpbml0X2NtYV9yZXNlcnZlZF9wYWdlYmxvY2socGZuX3RvX3BhZ2UocGZuKSk7XFxuQEAgLTE4ODMsMTEgKzE4ODYsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcXG4gXFx0a2hvX3VucHJlc2VydmVfZnJlZShraG9fb3V0LmZkdCk7XFxuIGVycl9mcmVlX2tob19yYWRpeF90cmVlOlxcbiBcXHRraG9fcmFkaXhfZGVzdHJveV90cmVlKHRyZWUpO1xcbi1lcnJfZnJlZV9zY3JhdGNoOlxcbitlcnJfZnJlZV9ib290bWVtOlxcbiBcXHRraG9fb3V0LmZkdCA9IE5VTEw7XFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG4tXFx0XFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xcbi1cXHRcXHR2b2lkICplbmQgPSBzdGFydCArIGtob19zY3JhdGNoW2ldLnNpemU7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcXG4rXFx0XFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpO1xcbitcXHRcXHR2b2lkICplbmQgPSBzdGFydCArIGtob19ib290bWVtW2ldLnNpemU7XFxuIFxcbiBcXHRcXHRmcmVlX3Jlc2VydmVkX2FyZWEoc3RhcnQsIGVuZCwgLTEsIFxcXCJcXFwiKTtcXG4gXFx0fVxcbkBAIC0xOTA2LDcgKzE5MDksNyBAQCB2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZClcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGtob19nZXRfbWVtX21hcCgpIHNob3VsZCBhbHdheXMgc3VjY2VlZC4gSWYgaXQgZmFpbHMsIGtob19wb3B1bGF0ZSgpXFxuLVxcdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uc2NyYXRjaF9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcXG4rXFx0ICogY2F0Y2hlcyB0aGF0IGFuZCBuZXZlciBzZXRzIGtob19pbi5ib290bWVtX3BoeXMsIHdoaWNoIHN0b3BzIG1lbW9yeVxcbiBcXHQgKiByZXRyaWV2YWwuXFxuIFxcdCAqL1xcbiBcXHRtZW1fbWFwID0ga2hvX2dldF9tZW1fbWFwKGZkdCk7XFxuQEAgLTE5MTQsNDEgKzE5MTcsNDAgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0LypcXG4tXFx0ICoga2hvX3NjcmF0Y2hfb3ZlcmxhcCgpIG5lZWRzIGtob19zY3JhdGNoIHRvIGJlIGluaXRpYWxpemVkLiBJdFxcbi1cXHQgKiBpcyB1c2VkIGJ5IGZyZWVfYXJlYV9pbml0KCkgb24gS0hPIGJvb3RzLCBzbyBpbml0aWFsaXplIGl0XFxuLVxcdCAqIGVhcmx5LlxcbitcXHQgKiBraG9fYm9vdG1lbV9vdmVybGFwKCkgbmVlZHMga2hvX2Jvb3RtZW0gdG8gYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIHVzZWRcXG4rXFx0ICogYnkgZnJlZV9hcmVhX2luaXQoKSBvbiBLSE8gYm9vdHMsIHNvIGluaXRpYWxpemUgaXQgZWFybHkuXFxuIFxcdCAqL1xcbi1cXHRraG9fc2NyYXRjaCA9IHBoeXNfdG9fdmlydChraG9faW4uc2NyYXRjaF9waHlzKTtcXG4rXFx0a2hvX2Jvb3RtZW0gPSBwaHlzX3RvX3ZpcnQoa2hvX2luLmJvb3RtZW1fcGh5cyk7XFxuIFxcbiBcXHRpZiAoa2hvX3JhZGl4X2luaXRfdHJlZShcXHUwMDI2a2hvX2luLnJhZGl4X3RyZWUsIG1lbV9tYXApKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuLVxcdGtob19leHRlbmRfc2NyYXRjaCgpO1xcbitcXHRraG9fZGlzY292ZXJfbm9wcnNydigpO1xcbiBcXG4gXFx0cmV0dXJuO1xcbiBcXG4gZXJyOlxcbiBcXHQvKlxcbiBcXHQgKiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuIENsZWFyIEZEVFxcbi1cXHQgKiBhbmQgc2NyYXRjaCBzbyBLSE8gdXNlcnMgZG9uJ3QgdHJlYXQgaXQgYXMgYSBLSE8gYm9vdC5cXG4rXFx0ICogYW5kIGJvb3RtZW0gc28gS0hPIHVzZXJzIGRvbid0IHRyZWF0IGl0IGFzIGEgS0hPIGJvb3QuXFxuIFxcdCAqL1xcbiBcXHRraG9faW4uZmR0X3BoeXMgPSAwO1xcbi1cXHRraG9faW4uc2NyYXRjaF9waHlzID0gMDtcXG4rXFx0a2hvX2luLmJvb3RtZW1fcGh5cyA9IDA7XFxuIH1cXG4gXFxuIHZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGlmIChraG9faW4uc2NyYXRjaF9waHlzKVxcbitcXHRpZiAoa2hvX2luLmJvb3RtZW1fcGh5cylcXG4gXFx0XFx0a2hvX21lbV9yZXRyaWV2ZSgpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGtob19yZXNlcnZlX3NjcmF0Y2goKTtcXG4rXFx0XFx0a2hvX3Jlc2VydmVfYm9vdG1lbSgpO1xcbiB9XFxuIFxcbiB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxcbi1cXHRcXHRcXHQgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLCB1NjQgc2NyYXRjaF9sZW4pXFxuK1xcdFxcdFxcdCBwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2xlbiAvIHNpemVvZigqa2hvX3NjcmF0Y2gpO1xcbi1cXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBpbnQgYm9vdG1lbV9jbnQgPSBib290bWVtX2xlbiAvIHNpemVvZigqa2hvX2Jvb3RtZW0pO1xcbitcXHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmJvb3RtZW0gPSBOVUxMO1xcbiBcXHRwaHlzX2FkZHJfdCBtZW1fbWFwX3BoeXM7XFxuIFxcdHZvaWQgKmZkdCA9IE5VTEw7XFxuIFxcdGJvb2wgcG9wdWxhdGVkID0gZmFsc2U7XFxuQEAgLTE5NzcsNTIgKzE5NzksNTIgQEAgdm9pZCBfX2luaXQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcXG4gXFx0aWYgKCFtZW1fbWFwX3BoeXMpXFxuIFxcdFxcdGdvdG8gdW5tYXBfZmR0O1xcbiBcXG4tXFx0c2NyYXRjaCA9IGVhcmx5X21lbXJlbWFwKHNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pO1xcbi1cXHRpZiAoIXNjcmF0Y2gpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwic2V0dXA6IGZhaWxlZCB0byBtZW1yZW1hcCBzY3JhdGNoIChwaHlzPTB4JWxseCwgbGVuPSVsbGQpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRzY3JhdGNoX3BoeXMsIHNjcmF0Y2hfbGVuKTtcXG4rXFx0Ym9vdG1lbSA9IGVhcmx5X21lbXJlbWFwKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xcbitcXHRpZiAoIWJvb3RtZW0pIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic2V0dXA6IGZhaWxlZCB0byBtZW1yZW1hcCBib290bWVtIChwaHlzPTB4JWxseCwgbGVuPSVsbGQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcXG4gXFx0XFx0Z290byB1bm1hcF9mZHQ7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFdlIHBhc3MgYSBzYWZlIGNvbnRpZ3VvdXMgYmxvY2tzIG9mIG1lbW9yeSB0byB1c2UgZm9yIGVhcmx5IGJvb3RcXG4tXFx0ICogcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhbiByZXNpemUgdGhlXFxuLVxcdCAqIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cXG4rXFx0ICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyB0b1xcbitcXHQgKiB1c2UgZm9yIGVhcmx5IGJvb3QgcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhblxcbitcXHQgKiByZXNpemUgdGhlIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cXG4gXFx0ICovXFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2NyYXRjaF9jbnQ7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmFyZWEgPSBcXHUwMDI2c2NyYXRjaFtpXTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBib290bWVtX2NudDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBraG9fYm9vdG1lbSAqYXJlYSA9IFxcdTAwMjZib290bWVtW2ldO1xcbiBcXHRcXHR1NjQgc2l6ZSA9IGFyZWEtXFx1MDAzZXNpemU7XFxuIFxcbiBcXHRcXHRtZW1ibG9ja19hZGQoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxuLVxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxuK1xcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIG1hcmsgdGhlIHNjcmF0Y2ggcmVnaW9uIDB4JXBhKzB4JXBhOiAlcGVcXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gbWFyayB0aGUgYm9vdG1lbSByZWdpb24gMHglcGErMHglcGE6ICVwZVxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjZhcmVhLVxcdTAwM2VhZGRyLCBcXHUwMDI2c2l6ZSwgRVJSX1BUUihlcnIpKTtcXG4tXFx0XFx0XFx0Z290byB1bm1hcF9zY3JhdGNoO1xcbitcXHRcXHRcXHRnb3RvIHVubWFwX2Jvb3RtZW07XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHJfZGVidWcoXFxcIk1hcmtlZCAweCVwYSsweCVwYSBhcyBzY3JhdGNoXFxcIiwgXFx1MDAyNmFyZWEtXFx1MDAzZWFkZHIsIFxcdTAwMjZzaXplKTtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIk1hcmtlZCAweCVwYSsweCVwYSBhcyBib290bWVtXFxcIiwgXFx1MDAyNmFyZWEtXFx1MDAzZWFkZHIsIFxcdTAwMjZzaXplKTtcXG4gXFx0fVxcbiBcXG4tXFx0bWVtYmxvY2tfcmVzZXJ2ZShzY3JhdGNoX3BoeXMsIHNjcmF0Y2hfbGVuKTtcXG4rXFx0bWVtYmxvY2tfcmVzZXJ2ZShib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIHNjcmF0Y2ggbWVtb3J5LCBsZXQncyB0ZWxsXFxuK1xcdCAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIGJvb3QgbWVtb3J5LCBsZXQncyB0ZWxsXFxuIFxcdCAqIHRoZSBtZW1ibG9ja3MgYWxsb2NhdG9yIHRvIG9ubHkgdXNlIHRoYXQgZm9yIGFueSBhbGxvY2F0aW9ucy5cXG4gXFx0ICogVGhhdCB3YXkgd2UgZW5zdXJlIHRoYXQgbm90aGluZyBzY3JpYmJsZXMgb3ZlciBpbiB1c2UgZGF0YSB3aGlsZVxcbiBcXHQgKiB3ZSBpbml0aWFsaXplIHRoZSBwYWdlIHRhYmxlcyB3aGljaCB3ZSB3aWxsIG5lZWQgdG8gaW5nZXN0IGFsbFxcbiBcXHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC5cXG4gXFx0ICovXFxuLVxcdG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KCk7XFxuK1xcdG1lbWJsb2NrX3NldF9raG9fbm9wcnNydl9vbmx5KCk7XFxuIFxcbiBcXHRraG9faW4uZmR0X3BoeXMgPSBmZHRfcGh5cztcXG4tXFx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5cztcXG4tXFx0a2hvX3NjcmF0Y2hfY250ID0gc2NyYXRjaF9jbnQ7XFxuK1xcdGtob19pbi5ib290bWVtX3BoeXMgPSBib290bWVtX3BoeXM7XFxuK1xcdGtob19ib290bWVtX2NudCA9IGJvb3RtZW1fY250O1xcbiBcXG4gXFx0cG9wdWxhdGVkID0gdHJ1ZTtcXG4gXFx0cHJfaW5mbyhcXFwiZm91bmQga2V4ZWMgaGFuZG92ZXIgZGF0YS5cXFxcblxcXCIpO1xcbiBcXG4tdW5tYXBfc2NyYXRjaDpcXG4tXFx0ZWFybHlfbWVtdW5tYXAoc2NyYXRjaCwgc2NyYXRjaF9sZW4pO1xcbit1bm1hcF9ib290bWVtOlxcbitcXHRlYXJseV9tZW11bm1hcChib290bWVtLCBib290bWVtX2xlbik7XFxuIHVubWFwX2ZkdDpcXG4gXFx0ZWFybHlfbWVtdW5tYXAoZmR0LCBmZHRfbGVuKTtcXG4gcmVwb3J0OlxcbkBAIC0yMDM0LDQ3ICsyMDM2LDQ3IEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXFxuIFxcbiBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbiB7XFxuLVxcdHNzaXplX3Qgc2NyYXRjaF9zaXplO1xcbitcXHRzc2l6ZV90IGJvb3RtZW1fc2l6ZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuLVxcdHN0cnVjdCBrZXhlY19idWYgc2NyYXRjaDtcXG4rXFx0c3RydWN0IGtleGVjX2J1ZiBib290bWVtO1xcbiBcXG4gXFx0aWYgKCFraG9fZW5hYmxlIHx8IGltYWdlLVxcdTAwM2V0eXBlID09IEtFWEVDX1RZUEVfQ1JBU0gpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aW1hZ2UtXFx1MDAzZWtoby5mZHQgPSB2aXJ0X3RvX3BoeXMoa2hvX291dC5mZHQpO1xcbiBcXG4tXFx0c2NyYXRjaF9zaXplID0gc2l6ZW9mKCpraG9fc2NyYXRjaCkgKiBraG9fc2NyYXRjaF9jbnQ7XFxuLVxcdHNjcmF0Y2ggPSAoc3RydWN0IGtleGVjX2J1Zil7XFxuK1xcdGJvb3RtZW1fc2l6ZSA9IHNpemVvZigqa2hvX2Jvb3RtZW0pICoga2hvX2Jvb3RtZW1fY250O1xcbitcXHRib290bWVtID0gKHN0cnVjdCBrZXhlY19idWYpe1xcbiBcXHRcXHQuaW1hZ2UgPSBpbWFnZSxcXG4tXFx0XFx0LmJ1ZmZlciA9IGtob19zY3JhdGNoLFxcbi1cXHRcXHQuYnVmc3ogPSBzY3JhdGNoX3NpemUsXFxuK1xcdFxcdC5idWZmZXIgPSBraG9fYm9vdG1lbSxcXG4rXFx0XFx0LmJ1ZnN6ID0gYm9vdG1lbV9zaXplLFxcbiBcXHRcXHQubWVtID0gS0VYRUNfQlVGX01FTV9VTktOT1dOLFxcbi1cXHRcXHQubWVtc3ogPSBzY3JhdGNoX3NpemUsXFxuK1xcdFxcdC5tZW1zeiA9IGJvb3RtZW1fc2l6ZSxcXG4gXFx0XFx0LmJ1Zl9hbGlnbiA9IFNaXzY0SywgLyogTWFrZXMgaXQgZWFzaWVyIHRvIG1hcCAqL1xcbiBcXHRcXHQuYnVmX21heCA9IFVMT05HX01BWCxcXG4gXFx0XFx0LnRvcF9kb3duID0gdHJ1ZSxcXG4gXFx0fTtcXG4tXFx0ZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcihcXHUwMDI2c2NyYXRjaCk7XFxuK1xcdGVyciA9IGtleGVjX2FkZF9idWZmZXIoXFx1MDAyNmJvb3RtZW0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2ggPSBcXHUwMDI2aW1hZ2UtXFx1MDAzZXNlZ21lbnRbaW1hZ2UtXFx1MDAzZW5yX3NlZ21lbnRzIC0gMV07XFxuK1xcdGltYWdlLVxcdTAwM2VraG8uYm9vdG1lbSA9IFxcdTAwMjZpbWFnZS1cXHUwMDNlc2VnbWVudFtpbWFnZS1cXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4rc3RhdGljIGludCBraG9fd2Fsa19ib290bWVtKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuIFxcdFxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcXG4ge1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtob19ib290bWVtX2NudDsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXMgPSB7XFxuLVxcdFxcdFxcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXFxuLVxcdFxcdFxcdC5lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICsga2hvX3NjcmF0Y2hbaV0uc2l6ZSAtIDEsXFxuK1xcdFxcdFxcdC5zdGFydCA9IGtob19ib290bWVtW2ldLmFkZHIsXFxuK1xcdFxcdFxcdC5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICsga2hvX2Jvb3RtZW1baV0uc2l6ZSAtIDEsXFxuIFxcdFxcdH07XFxuIFxcbi1cXHRcXHQvKiBUcnkgdG8gZml0IHRoZSBraW1hZ2UgaW50byBvdXIgS0hPIHNjcmF0Y2ggcmVnaW9uICovXFxuK1xcdFxcdC8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gYm9vdG1lbSByZWdpb24gKi9cXG4gXFx0XFx0cmV0ID0gZnVuYyhcXHUwMDI2cmVzLCBrYnVmKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIwOTEsNyArMjA5Myw3IEBAIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuIFxcdGlmICgha2hvX2VuYWJsZSB8fCBrYnVmLVxcdTAwM2VpbWFnZS1cXHUwMDNldHlwZSA9PSBLRVhFQ19UWVBFX0NSQVNIKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdHJldCA9IGtob193YWxrX3NjcmF0Y2goa2J1ZiwgZnVuYyk7XFxuK1xcdHJldCA9IGtob193YWxrX2Jvb3RtZW0oa2J1ZiwgZnVuYyk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID09IDEgPyAwIDogLUVBRERSTk9UQVZBSUw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXFxuaW5kZXggMjU3ZWU4YTUyYmU2Ni4uN2Q3NDQ3N2RhMGI3OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmNcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmNcXG5AQCAtNzcsMjMgKzc3LDIzIEBAIHZvaWQga2hvX2RlYnVnZnNfYmxvYl9yZW1vdmUoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcsIHZvaWQgKmJsb2IpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGludCBzY3JhdGNoX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuK3N0YXRpYyBpbnQgYm9vdG1lbV9waHlzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiB7XFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXFxuLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspXFxuK1xcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX2Jvb3RtZW1baV0uYWRkcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9waHlzKTtcXG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGJvb3RtZW1fcGh5cyk7XFxuIFxcbi1zdGF0aWMgaW50IHNjcmF0Y2hfbGVuX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbitzdGF0aWMgaW50IGJvb3RtZW1fbGVuX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiB7XFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXFxuLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspXFxuK1xcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9sZW4pO1xcbitERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9vdG1lbV9sZW4pO1xcbiBcXG4gX19pbml0IHZvaWQga2hvX2luX2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZywgY29uc3Qgdm9pZCAqZmR0KVxcbiB7XFxuQEAgLTE4NiwxMyArMTg2LDEzIEBAIF9faW5pdCBpbnQga2hvX291dF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcpXFxuIFxcdGlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKVxcbiBcXHRcXHRnb3RvIGVycl9ybWRpcjtcXG4gXFxuLVxcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzY3JhdGNoX3BoeXNcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZzY3JhdGNoX3BoeXNfZm9wcyk7XFxuK1xcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJib290bWVtX3BoeXNcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZib290bWVtX3BoeXNfZm9wcyk7XFxuIFxcdGlmIChJU19FUlIoZikpXFxuIFxcdFxcdGdvdG8gZXJyX3JtZGlyO1xcbiBcXG4tXFx0ZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNjcmF0Y2hfbGVuXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2c2NyYXRjaF9sZW5fZm9wcyk7XFxuK1xcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJib290bWVtX2xlblxcXCIsIDA0MDAsIGRpciwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmJvb3RtZW1fbGVuX2ZvcHMpO1xcbiBcXHRpZiAoSVNfRVJSKGYpKVxcbiBcXHRcXHRnb3RvIGVycl9ybWRpcjtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmggYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oXFxuaW5kZXggODA1ZDJhNzZjMzg4MS4uZTk2ODVlMWVmNmQ3OCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFxcbkBAIC0xOSw4ICsxOSw4IEBAIHN0cnVjdCBraG9fZGVidWdmcyB7XFxuIHN0cnVjdCBraG9fZGVidWdmcyB7fTtcXG4gI2VuZGlmXFxuIFxcbi1leHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcXG4tZXh0ZXJuIHVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XFxuK2V4dGVybiBzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xcbitleHRlcm4gdW5zaWduZWQgaW50IGtob19ib290bWVtX2NudDtcXG4gXFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbiBpbnQga2hvX2RlYnVnZnNfaW5pdCh2b2lkKTtcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li41NDE1ZTBiMzhiNWQ1IDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTQ4NSwxMCArNDg1LDYgQEAgY29uZmlnIEhBVkVfR1VQX0ZBU1RcXG4gXFx0ZGVwZW5kcyBvbiBNTVVcXG4gXFx0Ym9vbFxcbiBcXG4tIyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3Zlclxcbi1jb25maWcgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4tXFx0Ym9vbFxcbi1cXG4gIyBEb24ndCBkaXNjYXJkIGFsbG9jYXRlZCBtZW1vcnkgdXNlZCB0byB0cmFjayBcXFwibWVtb3J5XFxcIiBhbmQgXFxcInJlc2VydmVkXFxcIiBtZW1ibG9ja3NcXG4gIyBhZnRlciBlYXJseSBib290LCBzbyBpdCBjYW4gc3RpbGwgYmUgdXNlZCB0byB0ZXN0IGZvciB2YWxpZGl0eSBvZiBtZW1vcnkuXFxuICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxcbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xcbmluZGV4IDM3ZTA2ZTcwYzFkMDAuLjAzNTE5MTNjZTc5YjAgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtYmxvY2suY1xcbisrKyBiL21tL21lbWJsb2NrLmNcXG5AQCAtMTEyLDExICsxMTIsMTEgQEAgdW5zaWduZWQgbG9uZyBtaW5fbG93X3BmbjtcXG4gdW5zaWduZWQgbG9uZyBtYXhfcGZuO1xcbiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcXG4gXFxuLSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4tLyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19TQ1JBVENIIHJhbmdlcyAqL1xcbi1zdGF0aWMgYm9vbCBraG9fc2NyYXRjaF9vbmx5O1xcbisjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuKy8qIFdoZW4gc2V0IHRvIHRydWUsIG9ubHkgYWxsb2NhdGUgZnJvbSBNRU1CTE9DS19LSE9fTk9QUlNSViByYW5nZXMgKi9cXG4rc3RhdGljIGJvb2wga2hvX25vcHJzcnZfb25seTtcXG4gI2Vsc2VcXG4tI2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXFxuKyNkZWZpbmUga2hvX25vcHJzcnZfb25seSBmYWxzZVxcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIG1lbWJsb2NrX21lbW9yeV9pbml0X3JlZ2lvbnNbSU5JVF9NRU1CTE9DS19NRU1PUllfUkVHSU9OU10gX19pbml0ZGF0YV9tZW1ibG9jaztcXG5AQCAtMTc4LDkgKzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZClcXG4gXFxuIHN0YXRpYyBlbnVtIG1lbWJsb2NrX2ZsYWdzIF9faW5pdF9tZW1ibG9jayBjaG9vc2VfbWVtYmxvY2tfZmxhZ3Modm9pZClcXG4ge1xcbi1cXHQvKiBza2lwIG5vbi1zY3JhdGNoIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cXG4tXFx0aWYgKGtob19zY3JhdGNoX29ubHkpXFxuLVxcdFxcdHJldHVybiBNRU1CTE9DS19LSE9fU0NSQVRDSDtcXG4rXFx0Lyogb25seSB1c2UgS0hPX05PUFJTUlYgbWVtb3J5IGZvciBraG8gZWFybHkgYm9vdCBhbGxvY2F0aW9ucyAqL1xcbitcXHRpZiAoa2hvX25vcHJzcnZfb25seSlcXG4rXFx0XFx0cmV0dXJuIE1FTUJMT0NLX0tIT19OT1BSU1JWO1xcbiBcXG4gXFx0cmV0dXJuIHN5c3RlbV9oYXNfc29tZV9taXJyb3IgPyBNRU1CTE9DS19NSVJST1IgOiBNRU1CTE9DS19OT05FO1xcbiB9XFxuQEAgLTExNzQsMzMgKzExNzQsMzMgQEAgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2lcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2ggLSBNYXJrIGEgbWVtb3J5IHJlZ2lvbiBhcyBNRU1CTE9DS19LSE9fU0NSQVRDSC5cXG4rICogbWVtYmxvY2tfbWFya19raG9fbm9wcnNydiAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19OT1BSU1JWLlxcbiAgKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb25cXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cXG4gICpcXG4tICogT25seSBtZW1vcnkgcmVnaW9ucyBtYXJrZWQgd2l0aCAlTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggd2lsbCBiZSBjb25zaWRlcmVkXFxuKyAqIE9ubHkgbWVtb3J5IHJlZ2lvbnMgbWFya2VkIHdpdGggJU1FTUJMT0NLX0tIT19OT1BSU1JWIHdpbGwgYmUgY29uc2lkZXJlZFxcbiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiAgKi9cXG4tX19pbml0IGludCBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuK19faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbiB7XFxuIFxcdHJldHVybiBtZW1ibG9ja19zZXRjbHJfZmxhZyhcXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAxLFxcbi1cXHRcXHRcXHRcXHQgICAgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpO1xcbitcXHRcXHRcXHRcXHQgICAgTUVNQkxPQ0tfS0hPX05PUFJTUlYpO1xcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXFxuKyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYVxcbiAgKiBzcGVjaWZpZWQgcmVnaW9uLlxcbiAgKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb25cXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiAgKi9cXG4tX19pbml0IGludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbitfX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIG1lbWJsb2NrX3NldGNscl9mbGFnKFxcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIDAsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1CTE9DS19LSE9fU0NSQVRDSCk7XFxuK1xcdFxcdFxcdFxcdCAgICBNRU1CTE9DS19LSE9fTk9QUlNSVik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG5AQCAtMTIzNiw5ICsxMjM2LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX3NraXBfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogSW4gZWFybHkgYWxsb2MgZHVyaW5nIGtleGVjIGhhbmRvdmVyLCB3ZSBjYW4gb25seSBjb25zaWRlclxcbi1cXHQgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcXG4rXFx0ICogTUVNQkxPQ0tfS0hPX05PUFJTUlYgcmVnaW9ucyBmb3IgdGhlIGFsbG9jYXRpb25zXFxuIFxcdCAqL1xcbi1cXHRpZiAoKGZsYWdzIFxcdTAwMjYgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpIFxcdTAwMjZcXHUwMDI2ICFtZW1ibG9ja19pc19raG9fc2NyYXRjaChtKSlcXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IE1FTUJMT0NLX0tIT19OT1BSU1JWKSBcXHUwMDI2XFx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX25vcHJzcnYobSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXFxuIFxcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSBcXHUwMDI2XFx1MDAyNiAhZXhhY3RfbmlkKSB7XFxuIFxcdFxcdG5pZCA9IE5VTUFfTk9fTk9ERTtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgYSBwcmV2aW91cyBjYW5kaWRhdGUgb3ZlcmxhcHBlZCB3aXRoIEtITyBzY3JhdGNoLCBpdCB3b3VsZFxcbitcXHRcXHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIGJvb3RtZW0sIGl0IHdvdWxkXFxuIFxcdFxcdCAqIHVwZGF0ZSBzdGFydCBvciBlbmQuIE5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgb3BlbmluZyB0byBhbGxcXG4gXFx0XFx0ICogbm9kZXMsIHJlc2V0IHRoZW0uXFxuIFxcdFxcdCAqL1xcbkBAIC0xODA5LDEyICsxODA5LDEyIEBAIHZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcXG4gZm91bmQ6XFxuIFxcdC8qXFxuIFxcdCAqIEh1Z2VUTEIgcGFnZXMgY2FuIGJlIHByZXNlcnZlZCB3aXRoIEtITyBhbmQgbm8gcHJlc2VydmVkIG1lbW9yeSBjYW5cXG4tXFx0ICogYmUgaW4gc2NyYXRjaC4gU28gcmV0cnkgaWYgZm91bmQgYWRkcmVzcyBvdmVybGFwcyB3aXRoIHNjcmF0Y2guXFxuK1xcdCAqIGJlIGluIGJvb3RtZW0uIFNvIHJldHJ5IGlmIGZvdW5kIGFkZHJlc3Mgb3ZlcmxhcHMgd2l0aCBib290bWVtLlxcbiBcXHQgKlxcbi1cXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJ3QgdGFrZSB0b29cXG4rXFx0ICogQm9vdG1lbSBhcmVhcyBhcmUgbm9ybWFsbHkgbm90IHZlcnkgbGFyZ2UsIHNvIHRoaXMgc2hvdWxkbid0IHRha2UgdG9vXFxuIFxcdCAqIG1hbnkgcmV0cmllcy5cXG4gXFx0ICovXFxuLVxcdGlmIChraG9fc2NyYXRjaF9vdmVybGFwKGFkZHIsIHNpemUpKSB7XFxuK1xcdGlmIChraG9fYm9vdG1lbV9vdmVybGFwKGFkZHIsIHNpemUpKSB7XFxuIFxcdFxcdGlmIChtZW1ibG9ja19ib3R0b21fdXAoKSlcXG4gXFx0XFx0XFx0c3RhcnQgPSBhZGRyICsgc2l6ZTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0yNDk5LDcgKzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKVxcbiBcXHRmcmVlX3VudXNlZF9tZW1tYXAoKTtcXG4gXFx0cmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKTtcXG4gXFxuLVxcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkoKTtcXG4rXFx0bWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSgpO1xcbiBcXHRwYWdlcyA9IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KCk7XFxuIFxcdHRvdGFscmFtX3BhZ2VzX2FkZChwYWdlcyk7XFxuIH1cXG5AQCAtMjU5NywxNSArMjU5NywxNSBAQCBpbnQgcmVzZXJ2ZV9tZW1fcmVsZWFzZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXFxuLV9faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXFxuKyNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG4rX19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZClcXG4ge1xcbi1cXHRraG9fc2NyYXRjaF9vbmx5ID0gdHJ1ZTtcXG4rXFx0a2hvX25vcHJzcnZfb25seSA9IHRydWU7XFxuIH1cXG4gXFxuLV9faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZClcXG4rX19pbml0IHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKVxcbiB7XFxuLVxcdGtob19zY3JhdGNoX29ubHkgPSBmYWxzZTtcXG4rXFx0a2hvX25vcHJzcnZfb25seSA9IGZhbHNlO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMjg2MSw3ICsyODYxLDcgQEAgc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9tZW0oY2hhciAqcClcXG4gXFx0aWYgKHJlc2VydmVfbWVtX2tob19yZXZpdmUobmFtZSwgc2l6ZSwgYWxpZ24pKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIHNjcmF0Y2ggcmVnaW9uICovXFxuK1xcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqL1xcbiBcXHRzdGFydCA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgYWxpZ24pO1xcbiBcXHRpZiAoIXN0YXJ0KSB7XFxuIFxcdFxcdHByX2VycihcXFwicmVzZXJ2ZV9tZW06IG1lbWJsb2NrIGFsbG9jYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtMjg4Niw3ICsyODg2LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xcbiBcXHRbaWxvZzIoTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQpXSA9IFxcXCJEUlZfTU5HXFxcIixcXG4gXFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSBcXFwiUlNWX05JVFxcXCIsXFxuIFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFxcXCJSU1ZfS0VSTlxcXCIsXFxuLVxcdFtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gXFxcIktIT19TQ1JBVENIXFxcIixcXG4rXFx0W2lsb2cyKE1FTUJMT0NLX0tIT19OT1BSU1JWKV0gPSBcXFwiS0hPX05PUFJTUlZcXFwiLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggNzhkNjM3ODlhOTY5MC4uZDAzMTU2YmUwZTEwNCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtNjgxLDcgKzY4MSw3IEBAIHN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBwZm4gKyBucl9wYWdlcztcXG4gXFxuIFxcdGZvciAocGZuID0gcGFnZWJsb2NrX2FsaWduKHBmbik7IHBmbiBcXHUwMDNjIGVuZDsgcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbi1cXHRcXHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XFxuK1xcdFxcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcXG4gXFxuIFxcdFxcdGluaXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBmbl90b19wYWdlKHBmbiksIG10LCBmYWxzZSk7XFxuIFxcdFxcdGlmICghYXRvbWljIFxcdTAwMjZcXHUwMDI2IElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuQEAgLTc2NCw3ICs3NjQsNyBAQCBzdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuIFxcbiBcXHRpZiAocGFnZWJsb2NrX2FsaWduZWQocGZuKSkge1xcbiBcXHRcXHRlbnVtIG1pZ3JhdGV0eXBlIG10ID1cXG4tXFx0XFx0XFx0a2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xcbitcXHRcXHRcXHRraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIE1JR1JBVEVfTU9WQUJMRSk7XFxuIFxcdFxcdGluaXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBmbl90b19wYWdlKHBmbiksIG10LCBmYWxzZSk7XFxuIFxcdH1cXG4gfVxcbkBAIC05MjQsNyArOTI0LDcgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcXG4gXFx0XFx0ICogb3ZlciB0aGUgcGxhY2UgZHVyaW5nIHN5c3RlbSBib290LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHBhZ2VibG9ja19hbGlnbmVkKHBmbikpIHtcXG4tXFx0XFx0XFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xcbitcXHRcXHRcXHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XFxuIFxcbiBcXHRcXHRcXHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLCBtdCwgaXNvbGF0ZV9wYWdlYmxvY2spO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oXFxuaW5kZXggZTg2YmI5MDAwYjIyZi4uNDZjNWExNTZmY2U0MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxcbiBcXG4gI2RlZmluZSBfX1NldFBhZ2VSZXNlcnZlZChwKVxcdCgodm9pZCkocCkpXFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4rc3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ5OjE5LjYzMjI1NzkxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2Mjg4MTMzMzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAnc2NyYXRjaCcgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJ2Jvb3RtZW0nIGFuZCAnbm9wcnNydicuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1YmY1NzY2ZWRjZmNmZDUzMjdlNGZjZDllY2I3NDY4NGQ0ZTQyNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0OToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjguLmEwMzkyN2ZmYjg1ZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0yOTg5LDExICsyOTg5LDEyIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0XCIwXCIgfCBcIm9mZlwiIHwgXCJuXCIgLSBrZXhlYyBoYW5kb3ZlciBpcyBkaXNhYmxlZFxuIFx0XHRcdFwiMVwiIHwgXCJvblwiIHwgXCJ5XCIgLSBrZXhlYyBoYW5kb3ZlciBpcyBlbmFibGVkXG4gXG4tXHRraG9fc2NyYXRjaD1cdFtLRVhFQyxFQVJMWV1cbitcdGtob19ib290bWVtPVx0W0tFWEVDLEVBUkxZXVxuIFx0XHRcdEZvcm1hdDogbGxbS01HXSxtbVtLTUddLG5uW0tNR10gfCBubiVcbi1cdFx0XHREZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBLSE8gc2NyYXRjaCByZWdpb24uIFRoZSBLSE9cbi1cdFx0XHRzY3JhdGNoIHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnlcbi1cdFx0XHRyYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXG4rXG4rXHRcdFx0RGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgS0hPIGJvb3QgbWVtb3J5IHJlZ2lvbi4gVGhlXG4rXHRcdFx0S0hPIGJvb3QgbWVtb3J5IHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xuK1x0XHRcdG1lbW9yeSByYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXG4gXHRcdFx0YWxsb2NhdGlvbnMuIFRoYXQgd2F5LCBldmVuIHdoZW4gbWVtb3J5IGlzIGhlYXZpbHlcbiBcdFx0XHRmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZFxuIFx0XHRcdGtlcm5lbCB3aWxsIGFsd2F5cyBoYXZlIGVub3VnaCBjb250aWd1b3VzIHJhbmdlcyB0b1xuQEAgLTMwMDIsMTAgKzMwMDMsMTAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBleGFjdCBhbW91bnQgb2ZcbiBcdFx0XHRtZW1vcnkgaW4gdGhlIGZvcm0gb2YgXCJsbFtLTUddLG1tW0tNR10sbm5bS01HXVwiXG4gXHRcdFx0d2hlcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBkZWZpbmVzIHRoZSBzaXplIG9mIGEgbG93XG4tXHRcdFx0bWVtb3J5IHNjcmF0Y2ggYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xuLVx0XHRcdHRoZSBzaXplIG9mIGEgZ2xvYmFsIHNjcmF0Y2ggYXJlYSBhbmQgdGhlIHRoaXJkXG4rXHRcdFx0bWVtb3J5IGJvb3RtZW0gYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xuK1x0XHRcdHRoZSBzaXplIG9mIGEgZ2xvYmFsIGJvb3RtZW0gYXJlYSBhbmQgdGhlIHRoaXJkXG4gXHRcdFx0cGFyYW1ldGVyIGRlZmluZXMgdGhlIHNpemUgb2YgYWRkaXRpb25hbCBwZXItbm9kZVxuLVx0XHRcdHNjcmF0Y2ggYXJlYXMuICBUaGUgZm9ybSBcIm5uJVwiIGRlZmluZXMgc2NhbGUgZmFjdG9yXG4rXHRcdFx0Ym9vdG1lbSBhcmVhcy4gIFRoZSBmb3JtIFwibm4lXCIgZGVmaW5lcyBzY2FsZSBmYWN0b3JcbiBcdFx0XHQoaW4gcGVyY2VudHMpIG9mIG1lbW9yeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBib290LlxuIFxuIFx0a21hYz1cdFx0W01JUFNdIEtvcmluYSBldGhlcm5ldCBNQUMgYWRkcmVzcy5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcbmluZGV4IDJjMjZlNTYwYmQ3OGEuLmYxNGM4ZDlhZDZhNDUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdFxuQEAgLTIwLDEwICsyMCwxMCBAQCBuZWVkIHRvIGVuYWJsZSBpZiB5b3Ugd291bGQgbGlrZSB0byBwcmVzZXJ2ZSB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGFjcm9zc1xuIGtleGVjLlxuIFxuIFRvIHVzZSBLSE8sIHBsZWFzZSBib290IHRoZSBrZXJuZWwgd2l0aCB0aGUgYGBraG89b25gYCBjb21tYW5kIGxpbmVcbi1wYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX3NjcmF0Y2hgYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXG4tc2NyYXRjaCByZWdpb25zLiBGb3IgZXhhbXBsZSBgYGtob19zY3JhdGNoPTE2TSw1MTJNLDI1Nk1gYCB3aWxsIHJlc2VydmUgYVxuLTE2IE1pQiBsb3cgbWVtb3J5IHNjcmF0Y2ggYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBzY3JhdGNoIHJlZ2lvbiwgYW5kIDI1NiBNaUJcbi1wZXIgTlVNQSBub2RlIHNjcmF0Y2ggcmVnaW9ucyBvbiBib290LlxuK3BhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fYm9vdG1lbWBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGVcbitib290IG1lbW9yeSByZWdpb25zLiBGb3IgZXhhbXBsZSBgYGtob19ib290bWVtPTE2TSw1MTJNLDI1Nk1gYCB3aWxsIHJlc2VydmUgYVxuKzE2IE1pQiBsb3cgbWVtb3J5IGJvb3RtZW0gYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBib290bWVtIHJlZ2lvbiwgYW5kIDI1NiBNaUJcbitwZXIgTlVNQSBub2RlIGJvb3RtZW0gcmVnaW9ucyBvbiBib290LlxuIFxuIFBlcmZvcm0gYSBLSE8ga2V4ZWNcbiA9PT09PT09PT09PT09PT09PT09XG5AQCAtOTYsMTUgKzk2LDE1IEBAIHN0YWJpbGl6ZWQuXG4gICAgIGN1cnJlbnQgS0hPIHN0YXRlIGluIHRoaXMgZmlsZS4gS2V4ZWMgdXNlciBzcGFjZSB0b29saW5nIGNhbiB1c2UgdGhpc1xuICAgICBhcyBpbnB1dCBmaWxlIGZvciB0aGUgS0hPIHBheWxvYWQgaW1hZ2UuXG4gXG4tYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3NjcmF0Y2hfbGVuYGBcbi0gICAgTGVuZ3RocyBvZiBLSE8gc2NyYXRjaCByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4rYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fbGVuYGBcbisgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4gICAgIG1lbW9yeSByZWdpb25zIHRoYXQgd2lsbCBhbHdheXMgc3RheSBhdmFpbGFibGUgZm9yIGZ1dHVyZSBrZXhlY1xuICAgICBhbGxvY2F0aW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29scyBjYW4gdXNlIHRoaXMgZmlsZSB0byBkZXRlcm1pbmVcbiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cbiBcbi1gYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc2NyYXRjaF9waHlzYGBcbi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHNcbi0gICAgY2FuIHVzZSB0aGlzIGZpbGUgaW4gY29uanVuY3Rpb24gdG8gc2NyYXRjaF9waHlzIHRvIGRldGVybWluZSB3aGVyZVxuK2BgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9ib290bWVtX3BoeXNgYFxuKyAgICBQaHlzaWNhbCBsb2NhdGlvbnMgb2YgS0hPIGJvb3RtZW0gcmVnaW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29sc1xuKyAgICBjYW4gdXNlIHRoaXMgZmlsZSBpbiBjb25qdW5jdGlvbiB0byBib290bWVtX3BoeXMgdG8gZGV0ZXJtaW5lIHdoZXJlXG4gICAgIGl0IHNob3VsZCBwbGFjZSBpdHMgcGF5bG9hZCBpbWFnZXMuXG4gXG4gYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3N1Yl9mZHRzL2BgXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG5pbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3RcbkBAIC0xMyw4ICsxMyw4IEBAIEtleGVjIEhhbmRPdmVyIChLSE8pIGlzIGEgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIExpbnV4IHRvIHByZXNlcnZlIG1lbW9yeVxuIHJlZ2lvbnMsIHdoaWNoIGNvdWxkIGNvbnRhaW4gc2VyaWFsaXplZCBzeXN0ZW0gc3RhdGVzLCBhY3Jvc3Mga2V4ZWMuXG4gXG4gS0hPIHVzZXMgOnJlZjpgZmxhdHRlbmVkIGRldmljZSB0cmVlIChGRFQpIFx1MDAzY2tob19mZHRcdTAwM2VgIHRvIHBhc3MgaW5mb3JtYXRpb24gYWJvdXRcbi10aGUgcHJlc2VydmVkIHN0YXRlIGZyb20gcHJlLWV4ZWMga2VybmVsIHRvIHBvc3Qta2V4ZWMga2VybmVsIGFuZCA6cmVmOmBzY3JhdGNoXG4tbWVtb3J5IHJlZ2lvbnMgXHUwMDNja2hvX3NjcmF0Y2hcdTAwM2VgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuXG4rdGhlIHByZXNlcnZlZCBzdGF0ZSBmcm9tIHByZS1leGVjIGtlcm5lbCB0byBwb3N0LWtleGVjIGtlcm5lbCBhbmQgOnJlZjpgYm9vdFxuK21lbW9yeSByZWdpb25zIFx1MDAzY2tob19ib290bWVtXHUwMDNlYCB0byBlbnN1cmUgaW50ZWdyaXR5IG9mIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5LlxuIFxuIC4uIF9raG9fZmR0OlxuIFxuQEAgLTQwLDMxICs0MCwzMSBAQCBhbmQgcG9zdC1rZXhlYyBrZXJuZWxzLiBUaGlzIEFCSSBpcyBkZWZpbmVkIGJ5IGhlYWRlciBmaWxlcyBpblxuIFxuICAgIGFiaS5yc3RcbiBcbi0uLiBfa2hvX3NjcmF0Y2g6XG4rLi4gX2tob19ib290bWVtOlxuIFxuLVNjcmF0Y2ggUmVnaW9uc1xuLT09PT09PT09PT09PT09PVxuK0Jvb3QgTWVtb3J5IFJlZ2lvbnNcbis9PT09PT09PT09PT09PT09PT09XG4gXG4gVG8gYm9vdCBpbnRvIGtleGVjLCB3ZSBuZWVkIHRvIGhhdmUgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJhbmdlIHRoYXRcbiBjb250YWlucyBubyBoYW5kZWQgb3ZlciBtZW1vcnkuIEtleGVjIHRoZW4gcGxhY2VzIHRoZSB0YXJnZXQga2VybmVsIGFuZCBpbml0cmRcbiBpbnRvIHRoYXQgcmVnaW9uLiBUaGUgbmV3IGtlcm5lbCBleGNsdXNpdmVseSB1c2VzIHRoaXMgcmVnaW9uIGZvciBtZW1vcnlcbiBhbGxvY2F0aW9ucyBiZWZvcmUgZHVyaW5nIGJvb3QgdXAgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWdlIGFsbG9jYXRvci5cbiBcbi1XZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgc2NyYXRjaCByZWdpb25zOiBPblxuLWZpcnN0IGJvb3QgS0hPIGFsbG9jYXRlcyBzZXZlcmFsIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucy4gU2luY2VcbitXZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uczpcbitPbiBmaXJzdCBib290IEtITyBhbGxvY2F0ZXMgc2V2ZXJhbCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMuIFNpbmNlXG4gYWZ0ZXIga2V4ZWMgdGhlc2UgcmVnaW9ucyB3aWxsIGJlIHVzZWQgYnkgZWFybHkgbWVtb3J5IGFsbG9jYXRpb25zLCB0aGVyZSBpcyBhXG4tc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9uc1xuLXJlcXVlc3RzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFydGljdWxhciBOVU1BIG5vZGUgYXNzaWdubWVudC5cbi1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcbi1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG4tdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbnMuXG4tVGhlIHNjcmF0Y2ggcmVnaW9ucyBhcmUgZGVjbGFyZWQgYXMgQ01BIHdoZW4gcGFnZSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQgc29cbi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlXG4tZ3VhcmFudGVlIHRoYXQgbm8gaGFuZG92ZXIgcGFnZXMgbGFuZCBpbiB0aGF0IHJlZ2lvbiwgYmVjYXVzZSBoYW5kb3ZlciBwYWdlc1xuLW11c3QgYmUgYXQgYSBzdGF0aWMgcGh5c2ljYWwgbWVtb3J5IGxvY2F0aW9uIGFuZCBDTUEgZW5mb3JjZXMgdGhhdCBvbmx5XG4tbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuXG4tXG4tQWZ0ZXIgS0hPIGtleGVjLCB3ZSBpZ25vcmUgdGhlIGBga2hvX3NjcmF0Y2hgYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmRcbitib290IG1lbW9yeSByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgYm9vdCBtZW1vcnkgcmVnaW9uIHRvIHNhdGlzZnlcbithbGxvY2F0aW9ucyByZXF1ZXN0cyB0aGF0IGRvIG5vdCByZXF1aXJlIHBhcnRpY3VsYXIgTlVNQSBub2RlIGFzc2lnbm1lbnQuIEJ5XG4rZGVmYXVsdCwgc2l6ZSBvZiB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYW1vdW50IG9mIG1lbW9yeVxuK2FsbG9jYXRlZCBkdXJpbmcgYm9vdC4gVGhlIGBga2hvX2Jvb3RtZW1gYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBtYXkgYmVcbit1c2VkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIHNpemUgb2YgdGhlIGJvb3QgbWVtb3J5IHJlZ2lvbnMuIFRoZSBib290IG1lbW9yeVxuK3JlZ2lvbnMgYXJlIGRlY2xhcmVkIGFzIENNQSB3aGVuIHBhZ2UgYWxsb2NhdG9yIGlzIGluaXRpYWxpemVkIHNvIHRoYXQgdGhlaXJcbittZW1vcnkgY2FuIGJlIHVzZWQgZHVyaW5nIHN5c3RlbSBsaWZldGltZS4gQ01BIGdpdmVzIHVzIHRoZSBndWFyYW50ZWUgdGhhdCBub1xuK2hhbmRvdmVyIHBhZ2VzIGxhbmQgaW4gdGhhdCByZWdpb24sIGJlY2F1c2UgaGFuZG92ZXIgcGFnZXMgbXVzdCBiZSBhdCBhIHN0YXRpY1xuK3BoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiBhbmQgQ01BIGVuZm9yY2VzIHRoYXQgb25seSBtb3ZhYmxlIHBhZ2VzIGNhbiBiZSBsb2NhdGVkXG4raW5zaWRlLlxuK1xuK0FmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXG4gaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXG4gdXMgdG8gcmVjdXJzaXZlbHkgZXhlY3V0ZSBhbnkgYW1vdW50IG9mIEtITyBrZXhlY3MuIEJlY2F1c2Ugd2UgdXNlZCB0aGlzIHJlZ2lvblxuIGZvciBib290IG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYXMgdGFyZ2V0IG1lbW9yeSBmb3Iga2V4ZWMgYmxvYnMsIHNvbWUgcGFydHNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5pbmRleCAyMjI2N2E4M2UwNjRhLi4yOTAxNTM4MThkMGYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmNcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5AQCAtNzY0LDEyICs3NjQsMTIgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19lODIwX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLFxuIH1cbiBcbiAvKlxuLSAqIElmIEtITyBpcyBhY3RpdmUsIG9ubHkgcHJvY2VzcyBpdHMgc2NyYXRjaCBhcmVhcyB0byBlbnN1cmUgd2UgYXJlIG5vdFxuKyAqIElmIEtITyBpcyBhY3RpdmUsIG9ubHkgcHJvY2VzcyBpdHMgYm9vdG1lbSBhcmVhcyB0byBlbnN1cmUgd2UgYXJlIG5vdFxuICAqIHN0ZXBwaW5nIG9udG8gcHJlc2VydmVkIG1lbW9yeS5cbiAgKi9cbiBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKVxuIHtcbi1cdHN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XG4rXHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuIFx0c3RydWN0IHNldHVwX2RhdGEgKnB0cjtcbiBcdHN0cnVjdCBraG9fZGF0YSAqa2hvO1xuIFx0aW50IGksIG5yX2FyZWFzID0gMDtcbkBAIC03ODEsOCArNzgxLDggQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcbiBcdHdoaWxlIChwdHIpIHtcbiBcdFx0aWYgKHB0ci1cdTAwM2V0eXBlID09IFNFVFVQX0tFWEVDX0tITykge1xuIFx0XHRcdGtobyA9IChzdHJ1Y3Qga2hvX2RhdGEgKikodW5zaWduZWQgbG9uZylwdHItXHUwMDNlZGF0YTtcbi1cdFx0XHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVx1MDAzZXNjcmF0Y2hfYWRkcjtcbi1cdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcbitcdFx0XHRraG9fYm9vdG1lbSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVx1MDAzZWJvb3RtZW1fYWRkcjtcbitcdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2Vib290bWVtX3NpemUgLyBzaXplb2YoKmtob19ib290bWVtKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuQEAgLTc5Myw3ICs3OTMsNyBAQCBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9hcmVhczsgaSsrKSB7XG4tXHRcdHN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9IFx1MDAyNmtob19zY3JhdGNoW2ldO1xuK1x0XHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSBcdTAwMjZraG9fYm9vdG1lbVtpXTtcbiBcdFx0c3RydWN0IG1lbV92ZWN0b3IgcmVnaW9uID0ge1xuIFx0XHRcdC5zdGFydCA9IGFyZWEtXHUwMDNlYWRkcixcbiBcdFx0XHQuc2l6ZSA9IGFyZWEtXHUwMDNlc2l6ZSxcbkBAIC04MjIsNyArODIyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9yYW5kb21fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBzY3JhdGNoIGFyZWFzIHRoYXQgYXJlIGtub3duXG4rXHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duXG4gXHQgKiBub3QgdG8gY29udGFpbiBhbnkgZGF0YSB0aGF0IG11c3QgYmUgcHJlc2VydmVkLlxuIFx0ICovXG4gXHRpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuaW5kZXggMjY3MWM0ZTFiM2EwYi4uNjEwOTBkYjUwNjVjNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc2V0dXBfZGF0YS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuQEAgLTg1LDggKzg1LDggQEAgc3RydWN0IGltYV9zZXR1cF9kYXRhIHtcbiBzdHJ1Y3Qga2hvX2RhdGEge1xuIFx0X191NjQgZmR0X2FkZHI7XG4gXHRfX3U2NCBmZHRfc2l6ZTtcbi1cdF9fdTY0IHNjcmF0Y2hfYWRkcjtcbi1cdF9fdTY0IHNjcmF0Y2hfc2l6ZTtcbitcdF9fdTY0IGJvb3RtZW1fYWRkcjtcbitcdF9fdTY0IGJvb3RtZW1fc2l6ZTtcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuICNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcbmluZGV4IGViNzI1MzdiYzBiMTkuLjJhNmUxOWY5NTI1MTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG5AQCAtMTM2Myw3ICsxMzYzLDcgQEAgX19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcbiBcdCAqIEFmdGVyIHJlYWwgbW9kZSB0cmFtcG9saW5lIGlzIGFsbG9jYXRlZCwgd2UgY2xlYXIgdGhhdCBzY3JhdGNoXG4gXHQgKiBtYXJraW5nLlxuIFx0ICovXG4tXHRtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcbitcdG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoMCwgU1pfMU0pO1xuIFxuIFx0LypcbiBcdCAqIDMyLWJpdCBzeXN0ZW1zIGFyZSBsaW1pdGVkIHRvIDRCRyBvZiBtZW1vcnkgZXZlbiB3aXRoIEhJR0hNRU0gYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jIGIvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jXG5pbmRleCA3ZTk4MGVhNDlkOGQ2Li4zYWE3NzAwNmFkYWIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcbkBAIC0yODUsMTQgKzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLFxuIFx0c2QtXHUwMDNlbGVuID0gc2l6ZW9mKHN0cnVjdCBraG9fZGF0YSk7XG4gXG4gXHQvKiBPbmx5IGFkZCBpZiB3ZSBoYXZlIGFsbCBLSE8gaW1hZ2VzIGluIHBsYWNlICovXG4tXHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKVxuK1x0aWYgKCFpbWFnZS1cdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogQWRkIHNldHVwIGRhdGEgKi9cbiBcdGtoby1cdTAwM2VmZHRfYWRkciA9IGltYWdlLVx1MDAzZWtoby5mZHQ7XG4gXHRraG8tXHUwMDNlZmR0X3NpemUgPSBQQUdFX1NJWkU7XG4tXHRraG8tXHUwMDNlc2NyYXRjaF9hZGRyID0gaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlbWVtO1xuLVx0a2hvLVx1MDAzZXNjcmF0Y2hfc2l6ZSA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZWJ1ZnN6O1xuK1x0a2hvLVx1MDAzZWJvb3RtZW1fYWRkciA9IGltYWdlLVx1MDAzZWtoby5ib290bWVtLVx1MDAzZW1lbTtcbitcdGtoby1cdTAwM2Vib290bWVtX3NpemUgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VidWZzejtcbiBcdHNkLVx1MDAzZW5leHQgPSBwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGE7XG4gXHRwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGEgPSBwYXJhbXNfbG9hZF9hZGRyICsgc2V0dXBfZGF0YV9vZmZzZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDVlYmI1MjFlMTM2ZDcuLmQxNjE4YzRjZjdmYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRraG9fcG9wdWxhdGUoa2hvLVx1MDAzZWZkdF9hZGRyLCBraG8tXHUwMDNlZmR0X3NpemUsIGtoby1cdTAwM2VzY3JhdGNoX2FkZHIsIGtoby1cdTAwM2VzY3JhdGNoX3NpemUpO1xuK1x0a2hvX3BvcHVsYXRlKGtoby1cdTAwM2VmZHRfYWRkciwga2hvLVx1MDAzZWZkdF9zaXplLCBraG8tXHUwMDNlYm9vdG1lbV9hZGRyLCBraG8tXHUwMDNlYm9vdG1lbV9zaXplKTtcbiBcbiBcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYyBiL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuaW5kZXggNjk0ZDgwYTVjNjhlMS4uNjUxMTBiMmVlMWExZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuKysrIGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jXG5AQCAtNjYsNyArNjYsNyBAQCB2b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKVxuIFx0ICovXG4gXHRtZW1ibG9ja19yZXNlcnZlKDAsIFNaXzFNKTtcbiBcbi1cdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcbitcdG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KDAsIFNaXzFNKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHNtZV9zZXZfc2V0dXBfcmVhbF9tb2RlKHN0cnVjdCB0cmFtcG9saW5lX2hlYWRlciAqdGgpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmNcbmluZGV4IDYxMDNiMWEwODJkMjQuLjlmMDliMGQyZGFhMGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXG5AQCAtMTY1LDEwICsxNjUsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxuIFx0XHRwcl9pbmZvKFwiUHJvY2Vzc2luZyBFRkkgbWVtb3J5IG1hcDpcXG5cIik7XG4gXG4gXHQvKlxuLVx0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gc2NyYXRjaFxuK1x0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gYm9vdG1lbVxuIFx0ICogcmVnaW9ucy4gTW9zdCBtZW1ibG9ja3MgYXQgdGhpcyBwb2ludCBvcmlnaW5hdGUgZnJvbSBtZW1vcnkgbm9kZXNcbiBcdCAqIGluIHRoZSBEVCBhbmQgVUVGSSB1c2VzIGl0cyBvd24gbWVtb3J5IG1hcCBpbnN0ZWFkLiBIb3dldmVyLCBpZlxuLVx0ICogS0hPIGlzIGVuYWJsZWQsIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XG4rXHQgKiBLSE8gaXMgZW5hYmxlZCwgYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgZ29vZCBrbm93biBtZW1vcnlcbiBcdCAqIG11c3QgYmUgcHJlc2VydmVkLlxuIFx0ICovXG4gXHRtZW1ibG9ja19kdW1wX2FsbCgpO1xuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpXG4gXG4gXHRcdC8qIFJlbW92ZSBhbGwgbm9uLUtITyByZWdpb25zICovXG4gXHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdGlmICghbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gocikpIHtcbitcdFx0XHRpZiAoIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHIpKSB7XG4gXHRcdFx0XHRtZW1ibG9ja19yZW1vdmUoci1cdTAwM2ViYXNlLCByLVx1MDAzZXNpemUpO1xuIFx0XHRcdFx0ci0tO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2tleGVjLmMgYi9kcml2ZXJzL29mL2tleGVjLmNcbmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL2tleGVjLmNcbisrKyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xuQEAgLTI2MSwyMyArMjYxLDIzIEBAIHN0YXRpYyBpbnQga2hvX2FkZF9jaG9zZW4oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmZkdCwgaW50IGNob3Nlbl9ub2RlXG4gI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuIFx0cGh5c19hZGRyX3QgZmR0X21lbSA9IDA7XG4gXHRwaHlzX2FkZHJfdCBmZHRfbGVuID0gMDtcbi1cdHBoeXNfYWRkcl90IHNjcmF0Y2hfbWVtID0gMDtcbi1cdHBoeXNfYWRkcl90IHNjcmF0Y2hfbGVuID0gMDtcbitcdHBoeXNfYWRkcl90IGJvb3RtZW1fYXJyID0gMDtcbitcdHBoeXNfYWRkcl90IGJvb3RtZW1fbGVuID0gMDtcbiBcbiBcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwibGludXgsa2hvLWZkdFwiKTtcbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwibGludXgsa2hvLXNjcmF0Y2hcIik7XG4rXHRyZXQgPSBmZHRfZGVscHJvcChmZHQsIGNob3Nlbl9ub2RlLCBcImxpbnV4LGtoby1ib290bWVtXCIpO1xuIFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1GRFRfRVJSX05PVEZPVU5EKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKCFpbWFnZS1cdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cdTAwM2VraG8uc2NyYXRjaClcbitcdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLmJvb3RtZW0pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0ZmR0X21lbSA9IGltYWdlLVx1MDAzZWtoby5mZHQ7XG4gXHRmZHRfbGVuID0gUEFHRV9TSVpFO1xuLVx0c2NyYXRjaF9tZW0gPSBpbWFnZS1cdTAwM2VraG8uc2NyYXRjaC1cdTAwM2VtZW07XG4tXHRzY3JhdGNoX2xlbiA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZWJ1ZnN6O1xuK1x0Ym9vdG1lbV9hcnIgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VtZW07XG4rXHRib290bWVtX2xlbiA9IGltYWdlLVx1MDAzZWtoby5ib290bWVtLVx1MDAzZWJ1ZnN6O1xuIFxuIFx0cHJfZGVidWcoXCJBZGRpbmcga2hvIG1ldGFkYXRhIHRvIERUXCIpO1xuIFxuQEAgLTI4NSw4ICsyODUsOCBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZVxuIFx0XHRcdFx0ICAgICAgIGZkdF9tZW0sIGZkdF9sZW4pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCBcImxpbnV4LGtoby1zY3JhdGNoXCIsXG4tXHRcdFx0XHQgICAgICAgc2NyYXRjaF9tZW0sIHNjcmF0Y2hfbGVuKTtcbitcdHJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCBcImxpbnV4LGtoby1ib290bWVtXCIsXG4rXHRcdFx0XHQgICAgICAgYm9vdG1lbV9hcnIsIGJvb3RtZW1fbGVuKTtcbiBcbiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxuaW5kZXggNTA4MzlmYjVlZThlZC4uY2Y3M2Q5YjM0YzNjOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oXG5AQCAtNCw3ICs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4tc3RydWN0IGtob19zY3JhdGNoIHtcbitzdHJ1Y3Qga2hvX2Jvb3RtZW0ge1xuIFx0cGh5c19hZGRyX3QgYWRkcjtcbiBcdHBoeXNfYWRkcl90IHNpemU7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWMuaFxuQEAgLTQxOCw3ICs0MTgsNyBAQCBzdHJ1Y3Qga2ltYWdlIHtcbiAjZW5kaWZcbiBcbiBcdHN0cnVjdCB7XG4tXHRcdHN0cnVjdCBrZXhlY19zZWdtZW50ICpzY3JhdGNoO1xuK1x0XHRzdHJ1Y3Qga2V4ZWNfc2VnbWVudCAqYm9vdG1lbTtcbiBcdFx0cGh5c19hZGRyX3QgZmR0O1xuIFx0fSBraG87XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA0NmRlODZkYzM0M2U5Li5lZjJiMTg4YzhlZDA5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbkBAIC0zNiwxNSArMzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpO1xuIFxuLXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxuLVx0XHQgIHU2NCBzY3JhdGNoX2xlbik7XG4rdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLCBwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsXG4rXHRcdCAgdTY0IGJvb3RtZW1fbGVuKTtcbiBcbi1ib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xuK2Jvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4gXG4tc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuK3N0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fYm9vdG1lbV9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdFx0XHQgICAgICAgZW51bSBtaWdyYXRldHlwZSBtdClcbiB7XG4tXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKVxuK1x0aWYgKGtob19ib290bWVtX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSlcbiBcdFx0cmV0dXJuIE1JR1JBVEVfQ01BO1xuIFx0cmV0dXJuIG10O1xuIH1cbkBAIC0xMjMsMTYgKzEyMywxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4tXHRcdFx0XHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcbitcdFx0XHRcdHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywgdTY0IGJvb3RtZW1fbGVuKVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4rc3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sXG4rc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHRcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxuIHtcbiBcdHJldHVybiBtdDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjE4NmI5NjVjZmM4OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTQ2LDExICs0NiwxMSBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1heF9wb3NzaWJsZV9wZm47XG4gICogQE1FTUJMT0NLX1JTUlZfS0VSTjogbWVtb3J5IHJlZ2lvbiB0aGF0IGlzIHJlc2VydmVkIGZvciBrZXJuZWwgdXNlLFxuICAqIGVpdGhlciBleHBsaWN0aXRseSB3aXRoIG1lbWJsb2NrX3Jlc2VydmVfa2VybigpIG9yIHZpYSBtZW1ibG9ja1xuICAqIGFsbG9jYXRpb24gQVBJcy4gQWxsIG1lbWJsb2NrIGFsbG9jYXRpb25zIHNldCB0aGlzIGZsYWcuXG4tICogQE1FTUJMT0NLX0tIT19TQ1JBVENIOiBtZW1vcnkgcmVnaW9uIHRoYXQga2V4ZWMgY2FuIHBhc3MgdG8gdGhlIG5leHRcbi0gKiBrZXJuZWwgaW4gaGFuZG92ZXIgbW9kZS4gRHVyaW5nIGVhcmx5IGJvb3QsIHdlIGRvIG5vdCBrbm93IGFib3V0IGFsbFxuLSAqIG1lbW9yeSByZXNlcnZhdGlvbnMgeWV0LCBzbyB3ZSBnZXQgc2NyYXRjaCBtZW1vcnkgZnJvbSB0aGUgcHJldmlvdXNcbi0gKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdFxuLSAqIGFsbG9jYXRpb25zIG1heSBoYXBwZW4gZnJvbSBpbiB0aGlzIHBoYXNlLlxuKyAqIEBNRU1CTE9DS19LSE9fTk9QUlNSVjogbWVtb3J5IHJlZ2lvbiB3aXRoIG5vIHByZXNlcnZhdGlvbiBmcm9tIGtleGVjXG4rICogaGFuZG92ZXIuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGwgbWVtb3J5IHByZXNlcnZhdGlvbnNcbisgKiB5ZXQsIHNvIHdlIGdldCBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCB0aGF0IHdlXG4rICoga25vdyBpcyBnb29kIHRvIHVzZS4gSXQgaXMgdGhlIG9ubHkgbWVtb3J5IHRoYXQgYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tXG4rICogaW4gdGhpcyBwaGFzZS5cbiAgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcbiAgKi9cbiBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbkBAIC02MSw3ICs2MSw3IEBAIGVudW0gbWVtYmxvY2tfZmxhZ3Mge1xuIFx0TUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQgPSAweDgsXHQvKiBhbHdheXMgZGV0ZWN0ZWQgdmlhIGEgZHJpdmVyICovXG4gXHRNRU1CTE9DS19SU1JWX05PSU5JVFx0PSAweDEwLFx0LyogZG9uJ3QgaW5pdGlhbGl6ZSBzdHJ1Y3QgcGFnZXMgKi9cbiBcdE1FTUJMT0NLX1JTUlZfS0VSTlx0PSAweDIwLFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXG4tXHRNRU1CTE9DS19LSE9fU0NSQVRDSFx0PSAweDQwLFx0Lyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovXG4rXHRNRU1CTE9DS19LSE9fTk9QUlNSVlx0PSAweDQwLFx0LyogbWVtb3J5IHdpdGggbm8gS0hPIHByZXNlcnZhdGlvbnMgKi9cbiBcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlx0PSAweDgwLCAvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXMgKi9cbiB9O1xuIFxuQEAgLTE1OCw4ICsxNTgsOCBAQCBpbnQgbWVtYmxvY2tfbWFya19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBpbnQgbWVtYmxvY2tfY2xlYXJfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gaW50IG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfbm9pbml0KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGludCBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4taW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4taW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuK2ludCBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuK2ludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBcbiB2b2lkIG1lbWJsb2NrX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKTtcbkBAIC0zMDEsOSArMzAxLDkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2RyaXZlcl9tYW5hZ2VkKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXG4gXHRyZXR1cm4gbS1cdTAwM2VmbGFncyBcdTAwMjYgTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fc2NyYXRjaChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fbm9wcnNydihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuIHtcbi1cdHJldHVybiBtLVx1MDAzZWZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fU0NSQVRDSDtcbitcdHJldHVybiBtLVx1MDAzZWZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiB9XG4gXG4gaW50IG1lbWJsb2NrX3NlYXJjaF9wZm5fbmlkKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXG5AQCAtNjE0LDEyICs2MTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X21lbXRlc3QocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbXRlc3RfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKSB7IH1cbiAjZW5kaWZcbiBcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXG4tdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTtcbi12b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCk7XG4rI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuK3ZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCk7XG4rdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydl9vbmx5KHZvaWQpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19zZXRfa2hvX25vcHJzZXZfb25seSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKSB7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX01FTUJMT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnIGIva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ1xuaW5kZXggYzEzYWYzOGJhMjNhYi4uZjUwZGFlZThlZmYwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbkBAIC01LDcgKzUsNiBAQCBtZW51IFwiTGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCJcbiBjb25maWcgS0VYRUNfSEFORE9WRVJcbiBcdGJvb2wgXCJrZXhlYyBoYW5kb3ZlclwiXG4gXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVIgXHUwMDI2XHUwMDI2IEFSQ0hfU1VQUE9SVFNfS0VYRUNfRklMRVxuLVx0c2VsZWN0IE1FTUJMT0NLX0tIT19TQ1JBVENIXG4gXHRzZWxlY3QgS0VYRUNfRklMRVxuIFx0c2VsZWN0IExJQkZEVFxuIFx0c2VsZWN0IENNQVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCBmZTZmMmFjN2U0NTgzLi5kYThkNWVjYjkxNWI1IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTQxLDEyICs0MSwxMiBAQFxuIC8qXG4gICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cbiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3Ncbi0gKiBhdCB0aGUgbmVpZ2hib3JpbmcgcGFnZXMgKHVwIHRvIE1BWF9QQUdFX09SREVSKSB0byBtZXJnZSB0aGVtLlxuLSAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxuLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4rICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS4gSWYgS0hPIGJvb3RtZW1cbisgKiBpcyBub3QgYWxpZ25lZCB0byB0aGF0IHZhbHVlLCBidWRkeSBjYW4gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2VzLFxuKyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxuICAqL1xuLSNkZWZpbmUgU0NSQVRDSF9BTElHTk1FTlRfQllURVMgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylcbi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFx1MDAzZT0gQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuKyNkZWZpbmUgQk9PVE1FTV9BTElHTk1FTlRfQllURVMgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylcbitzdGF0aWNfYXNzZXJ0KEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIFx1MDAzZT0gQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuIFxuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXG4gI2RlZmluZSBLSE9fUEFHRV9NQUdJQyAweDRiNDg0ZjUwVSAvKiBBU0NJSSBmb3IgJ0tIT1AnICovXG5AQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgc3RydWN0IGtob19vdXQga2hvX291dCA9IHtcbiBcbiBzdHJ1Y3Qga2hvX2luIHtcbiBcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xuLVx0cGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzO1xuK1x0cGh5c19hZGRyX3QgYm9vdG1lbV9waHlzO1xuIFx0Y2hhciBwcmV2aW91c19yZWxlYXNlW19fTkVXX1VUU19MRU4gKyAxXTtcbiBcdHUzMiBrZXhlY19jb3VudDtcbiBcdHN0cnVjdCBraG9fZGVidWdmcyBkYmc7XG5AQCAtNjU2LDM0ICs2NTYsMzQgQEAgc3RhdGljIHZvaWQgX19pbml0ICpraG9fZ2V0X21lbV9tYXAoY29uc3Qgdm9pZCAqZmR0KVxuIFxuIC8qXG4gICogV2l0aCBLSE8gZW5hYmxlZCwgbWVtb3J5IGNhbiBiZWNvbWUgZnJhZ21lbnRlZCBiZWNhdXNlIEtITyByZWdpb25zIG1heVxuLSAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBzY3JhdGNoIHJlZ2lvbnMgZ2l2ZSB1cyBhXG4rICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIGJvb3RtZW0gcmVnaW9ucyBnaXZlIHVzIGFcbiAgKiBzYWZlIHpvbmVzIHRoYXQgd2Ugd2lsbCBuZXZlciBzZWUgS0hPIGFsbG9jYXRpb25zIGZyb20uIFRoaXMgaXMgd2hlcmUgd2Vcbi0gKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIHNjcmF0Y2hcbisgKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIGJvb3RtZW1cbiAgKiBhcmVhIGZvciBlYXJseSBhbGxvY2F0aW9ucyB0aGF0IGhhcHBlbiBiZWZvcmUgcGFnZSBhbGxvY2F0b3IgaXNcbiAgKiBpbml0aWFsaXplZC5cbiAgKi9cbi1zdHJ1Y3Qga2hvX3NjcmF0Y2ggKmtob19zY3JhdGNoO1xuLXVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XG4rc3RydWN0IGtob19ib290bWVtICpraG9fYm9vdG1lbTtcbit1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuIC8qXG4tICogVGhlIHNjcmF0Y2ggYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXG4rICogVGhlIGJvb3RtZW0gYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXG4gICogbWVtYmxvY2suIEEgdXNlciBjYW4gb3ZlcnJpZGUgdGhlIHNjYWxlIHdpdGggY29tbWFuZCBsaW5lIHBhcmFtZXRlcjpcbiAgKlxuLSAqIGtob19zY3JhdGNoPU4lXG4rICoga2hvX2Jvb3RtZW09TiVcbiAgKlxuICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBmb3IgYSBsb3dtZW0sIGEgZ2xvYmFsIGFuZFxuLSAqIHBlci1ub2RlIHNjcmF0Y2ggYXJlYXM6XG4rICogcGVyLW5vZGUgYm9vdG1lbSBhcmVhczpcbiAgKlxuLSAqIGtob19zY3JhdGNoPWxbS01HXSxuW0tNR10sbVtLTUddXG4rICoga2hvX2Jvb3RtZW09bFtLTUddLG5bS01HXSxtW0tNR11cbiAgKlxuICAqIFRoZSBleHBsaWNpdCBzaXplIGRlZmluaXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNjYWxlIGRlZmluaXRpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBzY3JhdGNoX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7XG4tc3RhdGljIHBoeXNfYWRkcl90IHNjcmF0Y2hfc2l6ZV9nbG9iYWwgX19pbml0ZGF0YTtcbi1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX3Blcm5vZGUgX19pbml0ZGF0YTtcbi1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX2xvd21lbSBfX2luaXRkYXRhO1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgYm9vdG1lbV9zY2FsZSBfX2luaXRkYXRhID0gMjAwO1xuK3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9wZXJub2RlIF9faW5pdGRhdGE7XG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9sb3dtZW0gX19pbml0ZGF0YTtcbiBcbi1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXG4rc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZShjaGFyICpwKVxuIHtcbiBcdHNpemVfdCBsZW47XG4gXHR1bnNpZ25lZCBsb25nIHNpemVzWzNdO1xuQEAgLTcwNyw5ICs3MDcsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdG1lbWNweShzX3NjYWxlLCBwLCBsZW4gLSAxKTtcbi1cdFx0cmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgXHUwMDI2c2NyYXRjaF9zY2FsZSk7XG4rXHRcdHJldCA9IGtzdHJ0b3VpbnQoc19zY2FsZSwgMTAsIFx1MDAyNmJvb3RtZW1fc2NhbGUpO1xuIFx0XHRpZiAoIXJldClcbi1cdFx0XHRwcl9ub3RpY2UoXCJzY3JhdGNoIHNjYWxlIGlzICVkJSVcXG5cIiwgc2NyYXRjaF9zY2FsZSk7XG4rXHRcdFx0cHJfbm90aWNlKFwiYm9vdG1lbSBzY2FsZSBpcyAlZCUlXFxuXCIsIGJvb3RtZW1fc2NhbGUpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTczNyw4MSArNzM3LDgxIEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9zY3JhdGNoX3NpemUoY2hhciAqcClcbiBcdGlmICgqcClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzY3JhdGNoX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07XG4tXHRzY3JhdGNoX3NpemVfcGVybm9kZSA9IHNpemVzWzJdO1xuLVx0c2NyYXRjaF9zY2FsZSA9IDA7XG4rXHRib290bWVtX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XG4rXHRib290bWVtX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07XG4rXHRib290bWVtX3NpemVfcGVybm9kZSA9IHNpemVzWzJdO1xuK1x0Ym9vdG1lbV9zY2FsZSA9IDA7XG4gXG4tXHRwcl9ub3RpY2UoXCJzY3JhdGNoIGFyZWFzOiBsb3dtZW06ICVsbHVNaUIgZ2xvYmFsOiAlbGx1TWlCIHBlcm5vZGU6ICVsbGRNaUJcXG5cIixcbi1cdFx0ICAodTY0KShzY3JhdGNoX3NpemVfbG93bWVtIFx1MDAzZVx1MDAzZSAyMCksXG4tXHRcdCAgKHU2NCkoc2NyYXRjaF9zaXplX2dsb2JhbCBcdTAwM2VcdTAwM2UgMjApLFxuLVx0XHQgICh1NjQpKHNjcmF0Y2hfc2l6ZV9wZXJub2RlIFx1MDAzZVx1MDAzZSAyMCkpO1xuK1x0cHJfbm90aWNlKFwiYm9vdG1lbSBhcmVhczogbG93bWVtOiAlbGx1TWlCIGdsb2JhbDogJWxsdU1pQiBwZXJub2RlOiAlbGxkTWlCXFxuXCIsXG4rXHRcdCAgKHU2NCkoYm9vdG1lbV9zaXplX2xvd21lbSBcdTAwM2VcdTAwM2UgMjApLFxuK1x0XHQgICh1NjQpKGJvb3RtZW1fc2l6ZV9nbG9iYWwgXHUwMDNlXHUwMDNlIDIwKSxcbitcdFx0ICAodTY0KShib290bWVtX3NpemVfcGVybm9kZSBcdTAwM2VcdTAwM2UgMjApKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbi1lYXJseV9wYXJhbShcImtob19zY3JhdGNoXCIsIGtob19wYXJzZV9zY3JhdGNoX3NpemUpO1xuK2Vhcmx5X3BhcmFtKFwia2hvX2Jvb3RtZW1cIiwga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZSk7XG4gXG4tc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcbitzdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9zaXplX3VwZGF0ZSh2b2lkKVxuIHtcbiBcdC8qXG4gXHQgKiBJZiBmaXhlZCBzaXplcyBhcmUgbm90IHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUsIGNhbGN1bGF0ZSB0aGVtIG5vdy5cbiBcdCAqIFJlbW92ZSBIdWdlVExCIGFsbG9jYXRpb25zIGZyb20gaXQgYmVjYXVzZSB0aGV5IG5ldmVyIGdldCBhbGxvY2F0ZWRcbi1cdCAqIGZyb20gc2NyYXRjaC5cbitcdCAqIGZyb20gYm9vdG1lbS5cbiBcdCAqL1xuLVx0aWYgKHNjcmF0Y2hfc2NhbGUpIHtcbitcdGlmIChib290bWVtX3NjYWxlKSB7XG4gXHRcdHBoeXNfYWRkcl90IHNpemU7XG4gXG4gXHRcdHNpemUgPSBtZW1ibG9ja19yZXNlcnZlZF9rZXJuX3NpemUoQVJDSF9MT1dfQUREUkVTU19MSU1JVCxcbiBcdFx0XHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuIFx0XHRzaXplIC09IG1lbWJsb2NrX3Jlc2VydmVkX2h1Z2V0bGJfc2l6ZShBUkNIX0xPV19BRERSRVNTX0xJTUlULFxuIFx0XHRcdFx0XHRcdCAgICAgICBOVU1BX05PX05PREUpO1xuLVx0XHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7XG4tXHRcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplO1xuK1x0XHRzaXplID0gc2l6ZSAqIGJvb3RtZW1fc2NhbGUgLyAxMDA7XG4rXHRcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSBzaXplO1xuIFxuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgIE5VTUFfTk9fTk9ERSk7XG4gXHRcdHNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgICAgICBOVU1BX05PX05PREUpO1xuLVx0XHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDAgLSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0XHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZTtcbitcdFx0c2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwIC0gYm9vdG1lbV9zaXplX2xvd21lbTtcbitcdFx0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHNpemU7XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2NyYXRjaCBhcmVhcyBhcmUgcmVsZWFzZWQgYXMgTUlHUkFURV9DTUEuIFJvdW5kIHRoZW0gdXAgdG8gdGhlIHJpZ2h0XG4rXHQgKiBib290bWVtIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiBcdCAqIHNpemUuXG4gXHQgKi9cbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuK1x0Ym9vdG1lbV9zaXplX2xvd21lbSA9IHJvdW5kX3VwKGJvb3RtZW1fc2l6ZV9sb3dtZW0sIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbitcdGJvb3RtZW1fc2l6ZV9nbG9iYWwgPSByb3VuZF91cChib290bWVtX3NpemVfZ2xvYmFsLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XG4gfVxuIFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZClcbitzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGJvb3RtZW1fc2l6ZV9ub2RlKGludCBuaWQpXG4ge1xuIFx0cGh5c19hZGRyX3Qgc2l6ZTtcbiBcbi1cdGlmIChzY3JhdGNoX3NjYWxlKSB7XG4rXHRpZiAoYm9vdG1lbV9zY2FsZSkge1xuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgIG5pZCk7XG4gXHRcdC8qIERvIG5vdCBjb3VudCBIdWdlVExCIHBhZ2VzLiAqL1xuIFx0XHRzaXplIC09IG1lbWJsb2NrX3Jlc2VydmVkX2h1Z2V0bGJfc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSxcbiBcdFx0XHRcdFx0XHQgICAgICAgbmlkKTtcbi1cdFx0c2l6ZSA9IHNpemUgKiBzY3JhdGNoX3NjYWxlIC8gMTAwO1xuK1x0XHRzaXplID0gc2l6ZSAqIGJvb3RtZW1fc2NhbGUgLyAxMDA7XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7XG4rXHRcdHNpemUgPSBib290bWVtX3NpemVfcGVybm9kZTtcbiBcdH1cbiBcbi1cdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRyZXR1cm4gcm91bmRfdXAoc2l6ZSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpO1xuIH1cbiBcbi1ib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4rYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuIHtcbi1cdHBoeXNfYWRkcl90IHNjcmF0Y2hfc3RhcnQsIHNjcmF0Y2hfZW5kO1xuK1x0cGh5c19hZGRyX3QgYm9vdG1lbV9zdGFydCwgYm9vdG1lbV9lbmQ7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKSB7XG4tXHRcdHNjcmF0Y2hfc3RhcnQgPSBraG9fc2NyYXRjaFtpXS5hZGRyO1xuLVx0XHRzY3JhdGNoX2VuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgKyBraG9fc2NyYXRjaFtpXS5zaXplO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcbitcdFx0Ym9vdG1lbV9zdGFydCA9IGtob19ib290bWVtW2ldLmFkZHI7XG4rXHRcdGJvb3RtZW1fZW5kID0ga2hvX2Jvb3RtZW1baV0uYWRkciArIGtob19ib290bWVtW2ldLnNpemU7XG4gXG4tXHRcdGlmIChwaHlzIFx1MDAzYyBzY3JhdGNoX2VuZCBcdTAwMjZcdTAwMjYgKHBoeXMgKyBzaXplKSBcdTAwM2Ugc2NyYXRjaF9zdGFydClcbitcdFx0aWYgKHBoeXMgXHUwMDNjIGJvb3RtZW1fZW5kIFx1MDAyNlx1MDAyNiAocGh5cyArIHNpemUpIFx1MDAzZSBib290bWVtX3N0YXJ0KVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTgxOSw3ICs4MTksNyBAQCBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4gfVxuIFxuIC8qKlxuLSAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXG4rICoga2hvX3Jlc2VydmVfYm9vdG1lbSAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcbiAgKlxuICAqIFdpdGggS0hPIHdlIGNhbiBwcmVzZXJ2ZSBhcmJpdHJhcnkgcGFnZXMgaW4gdGhlIHN5c3RlbS4gVG8gZW5zdXJlIHdlIHN0aWxsXG4gICogaGF2ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSB3aGVuIHdlIHNlYXJjaCB0aGUgcGh5c2ljYWwgYWRkcmVzc1xuQEAgLTgyNyw3ICs4MjcsNyBAQCBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4gICogYWN0aXZlLiBUaGlzIENNQSByZWdpb24gd2lsbCBvbmx5IGJlIHVzZWQgZm9yIG1vdmFibGUgcGFnZXMgd2hpY2ggYXJlIG5vdCBhXG4gICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9ib290bWVtKHZvaWQpXG4ge1xuIFx0cGh5c19hZGRyX3QgYWRkciwgc2l6ZTtcbiBcdGludCBuaWQsIGkgPSAwO1xuQEAgLTgzNSw3MyArODM1LDczIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXHRpZiAoIWtob19lbmFibGUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNjcmF0Y2hfc2l6ZV91cGRhdGUoKTtcbitcdGJvb3RtZW1fc2l6ZV91cGRhdGUoKTtcbiBcbiBcdC8qIEZJWE1FOiBkZWFsIHdpdGggbm9kZSBob3QtcGx1Zy9yZW1vdmUgKi9cbi1cdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcbi1cdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcbi1cdGtob19zY3JhdGNoID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcbi1cdGlmICgha2hvX3NjcmF0Y2gpIHtcbi1cdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcblwiKTtcbitcdGtob19ib290bWVtX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcbitcdHNpemUgPSBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKTtcbitcdGtob19ib290bWVtID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcbitcdGlmICgha2hvX2Jvb3RtZW0pIHtcbitcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgYm9vdG1lbSBhcnJheVxcblwiKTtcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9raG87XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuK1x0ICogcmVzZXJ2ZSBib290bWVtIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIFx0ICogbmV4dCBrZXJuZWxcbiBcdCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbitcdHNpemUgPSBib290bWVtX3NpemVfbG93bWVtO1xuK1x0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMsIDAsXG4gXHRcdFx0XHRcdCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTtcbiBcdGlmICghYWRkcikge1xuLVx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXG5cIik7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9kZXNjO1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxcblwiKTtcbitcdFx0Z290byBlcnJfZnJlZV9ib290bWVtX2Rlc2M7XG4gXHR9XG4gXG4tXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbi1cdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xuK1x0a2hvX2Jvb3RtZW1baV0uYWRkciA9IGFkZHI7XG4rXHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcbiBcdGkrKztcbiBcbiBcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRzaXplID0gYm9vdG1lbV9zaXplX2dsb2JhbDtcbitcdGFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbiBcdGlmICghYWRkcikge1xuLVx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgc2NyYXRjaCBidWZmZXJcXG5cIik7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcbitcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIGJvb3RtZW1cXG5cIik7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcbiBcdH1cbiBcbi1cdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuLVx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4rXHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcbitcdGtob19ib290bWVtW2ldLnNpemUgPSBzaXplO1xuIFx0aSsrO1xuIFxuIFx0LypcbiBcdCAqIExvb3Agb3ZlciBub2RlcyB0aGF0IGhhdmUgYm90aCBtZW1vcnkgYW5kIGFyZSBvbmxpbmUuIFNraXBcbi1cdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbitcdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgYm9vdG1lbSBhcmVhcyB0aGVyZS5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuLVx0XHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLFxuK1x0XHRzaXplID0gYm9vdG1lbV9zaXplX25vZGUobmlkKTtcbitcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuLVx0XHRcdHByX2VycihcIkZhaWxlZCB0byByZXNlcnZlIG5pZCAlZCBzY3JhdGNoIGJ1ZmZlclxcblwiLCBuaWQpO1xuLVx0XHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcbitcdFx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgYm9vdG1lbVxcblwiLCBuaWQpO1xuK1x0XHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcbiBcdFx0fVxuIFxuLVx0XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbi1cdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4rXHRcdGtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyO1xuK1x0XHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcbiBcdFx0aSsrO1xuIFx0fVxuIFxuIFx0cmV0dXJuO1xuIFxuLWVycl9mcmVlX3NjcmF0Y2hfYXJlYXM6XG4rZXJyX2ZyZWVfYm9vdG1lbV9hcmVhczpcbiBcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxuLVx0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX3NjcmF0Y2hbaV0uYWRkciwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XG4tZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOlxuLVx0bWVtYmxvY2tfZnJlZShraG9fc2NyYXRjaCwga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCkpO1xuK1x0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX2Jvb3RtZW1baV0uYWRkciwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XG4rZXJyX2ZyZWVfYm9vdG1lbV9kZXNjOlxuK1x0bWVtYmxvY2tfZnJlZShraG9fYm9vdG1lbSwga2hvX2Jvb3RtZW1fY250ICogc2l6ZW9mKCpraG9fYm9vdG1lbSkpO1xuIGVycl9kaXNhYmxlX2tobzpcbi1cdHByX3dhcm4oXCJGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFyZWEsIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxcblwiKTtcbitcdHByX3dhcm4oXCJGYWlsZWQgdG8gcmVzZXJ2ZSBib290bWVtLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXG5cIik7XG4gXHRraG9fZW5hYmxlID0gZmFsc2U7XG4gfVxuIFxuQEAgLTkxMSwxMSArOTExLDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gICogb24gc21hbGxlciBzeXN0ZW1zLiBUaGUgYWxnb3JpdGhtIGl0c2VsZiBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHZhbHVlLFxuICAqIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgZGlmZmVyZW50IGhldXJpc3RpYyBsYXRlciBpZiBuZWVkZWQuXG4gICovXG4tI2RlZmluZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRVx0XHRTWl8xR1xuLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUXHRjb25zdF9pbG9nMihLSE9fU0NSQVRDSF9FWFRfQkxLU0laRSlcbisjZGVmaW5lIEtIT19ESVNDT1ZFUl9CTEtTSVpFXHRcdFNaXzFHXG4rI2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0hJRlRcdGNvbnN0X2lsb2cyKEtIT19ESVNDT1ZFUl9CTEtTSVpFKVxuIFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXG4tc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX2xlYWYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4rc3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcbiBcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XG5AQCAtOTMwLDU0ICs5MzAsNTcgQEAgc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX2xlYWYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4gXHRlbmQgPSBzdGFydCArICgxVUwgXHUwMDNjXHUwMDNjIChvcmRlciArIFBBR0VfU0hJRlQpKTtcbiBcbiBcdHdoaWxlIChzdGFydCBcdTAwM2MgZW5kKSB7XG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCBcdTAwM2VcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbitcdFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHN0YXJ0IFx1MDAzZVx1MDAzZSBLSE9fRElTQ09WRVJfQkxLU0hJRlQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdHN0YXJ0ICs9ICgxVUwgXHUwMDNjXHUwMDNjIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7XG4rXHRcdHN0YXJ0ICs9ICgxVUwgXHUwMDNjXHUwMDNjIEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gKi9cbi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbm9kZShwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICpkYXRhKVxuK3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcbiBcbi1cdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcdTAwM2VcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbitcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcdTAwM2VcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiB9XG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgYnVzeSBibG9jayByYWRpeCB0cmVlLiAqL1xuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuK3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl9tYXJrX25vcHJzcnYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4ge1xuIFx0cGh5c19hZGRyX3QgKnByZXZfZW5kID0gZGF0YTtcbi1cdHBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5IFx1MDAzY1x1MDAzYyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQ7XG4rXHRwaHlzX2FkZHJfdCBzdGFydCA9IGtleSBcdTAwM2NcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmIChzdGFydCBcdTAwM2UgKnByZXZfZW5kKSB7XG4tXHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7XG4rXHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdCpwcmV2X2VuZCA9IHN0YXJ0ICsgKDFVTCBcdTAwM2NcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbitcdCpwcmV2X2VuZCA9IHN0YXJ0ICsgKDFVTCBcdTAwM2NcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuLSAqIGtob19leHRlbmRfc2NyYXRjaCAtIEV4dGVuZCB0aGUgc2NyYXRjaCByZWdpb25zXG4rICoga2hvX2Rpc2NvdmVyX25vcHJzcnYgLSBEaXNjb3ZlciBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zXG4rICpcbisgKiBEaXNjb3ZlcnMgbWVtb3J5IHJhbmdlcyB3aXRoIG5vIHByZXNlcnZlZCBtZW1vcnkgYW5kIG1hcmtzIGl0IGFzIE5PUFJTUlYuXG4rICogVGhpcyBsZXRzIG1lbWJsb2NrIGFsbG9jYXRlIG1lbW9yeSBmcm9tIGFyZWFzIG91dHNpZGUgS0hPIGJvb3RtZW0uXG4gICpcbiAgKiBUaGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZSBtaXhlcyBib3RoIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyXG4gICogaW50byBhIHNpbmdsZSBrZXkuIFRoaXMgbWFrZXMgaXQgaGFyZCB0byBsb29rIGZvciBmcmVlIHJhbmdlcyBkaXJlY3RseS4gVGhpc1xuICAqIGZ1bmN0aW9uIGZpcnN0IHdhbGtzIHRoZSByYWRpeCB0cmVlIGFuZCBkaWdlc3RzIGl0IGRvd24gaW50byBhbm90aGVyIHJhZGl4XG4tICogdHJlZSwgd2hvc2Uga2V5cyBpZGVudGlmeSBibG9ja3Mgb2Ygc2l6ZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRSB3aGljaFxuLSAqIGNvbnRhaW4gcHJlc2VydmVkIG1lbW9yeS5cbisgKiB0cmVlLCB3aG9zZSBrZXlzIGlkZW50aWZ5IGJsb2NrcyBvZiBzaXplIEtIT19ESVNDT1ZFUl9CTEtTSVpFIHdoaWNoIGNvbnRhaW5cbisgKiBwcmVzZXJ2ZWQgbWVtb3J5LlxuICAqXG4gICogVGhlbiBpdCB3YWxrcyB0aGUgZGlnZXN0ZWQgcmFkaXggdHJlZSBhbmQgbWFya3MgZXZlcnl0aGluZyB0aGF0IGRvZXNuJ3QgaGF2ZVxuLSAqIHByZXNlcnZlZCBtZW1vcnkgYXMgc2NyYXRjaC5cbisgKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIE5PUFJTUlYuXG4gICpcbi0gKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHNjcmF0Y2ggaGFzXG4rICogTk9URTogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBib290bWVtIGhhc1xuICAqIGF2YWlsYWJsZSBzcGFjZS5cbiAgKlxuICAqIE5PVEU6IFRoZSBwYWdlcyBvZiB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZSB0YWJsZXMgYXJlIG5vdCBtYXJrZWRcbkBAIC05ODYsMTggKzk4OSwxOCBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X21hcmtfc2NyYXRjaCh1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiAgKiB0aGVtIHRvIGJlIFwicHJlc2VydmVkIG1lbW9yeVwiIGFuZCBtYXJrcyB0aGVpciBibG9ja3MgYXMgYnVzeS5cbiAgKlxuICAqIE5PVEU6IGVmaV9pbml0KCk6OnJlc2VydmVfcmVnaW9ucygpIHJlbW92ZXMgYWxsIHJlZ2lvbnMgZXhjZXB0XG4tICogTUVNQkxPQ0tfS0hPX1NDUkFUQ0guIFRoaXMgZnVuY3Rpb24gYWRkcyBzdWNoIHJlZ2lvbnMgYnV0IHRoZXkgYXJlIG5vdCBLSE9cbi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxuKyAqIE1FTUJMT0NLX0tIT19OT1BSU1JWLiBUaGlzIGZ1bmN0aW9uIGFkZHMgc3VjaCByZWdpb25zIGJ1dCB0aGV5IGFyZSBub3QgS0hPXG4rICogYm9vdCBtZW1vcnksIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmVcbiAgKiBjYWxsZWQgYWZ0ZXIgcmVzZXJ2ZV9yZWdpb25zKCkuXG4gICovXG4tc3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7XG4tXHRcdC5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsXG4tXHRcdC5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsXG4rXHRcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZixcbitcdFx0Lm5vZGUgPSBraG9fZGlzY292ZXJfd2Fsa19ub2RlLFxuIFx0fTtcbiBcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBleHRfY2IgPSB7XG4tXHRcdC5sZWFmID0ga2hvX2V4dF9tYXJrX3NjcmF0Y2gsXG4rXHRcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX21hcmtfbm9wcnNydixcbiBcdH07XG4gXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1c3lfcmFkaXhfY2xhc3M7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgYnVzeV9ibG9ja3M7XG5AQCAtMTAyMiwyMSArMTAyNSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX2V4dGVuZF9zY3JhdGNoKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdC8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIHNjcmF0Y2guICovXG4rXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBub3Byc3J2LiAqL1xuIFx0ZXJyID0ga2hvX3JhZGl4X3dhbGtfdHJlZShcdTAwMjZidXN5X2Jsb2NrcywgXHUwMDI2ZXh0X2NiLCBcdTAwMjZwcmV2X2VuZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIE1hcmsgZXZlcnl0aGluZyBmcm9tIGxhc3QgYnVzeSBibG9jayB0byBlbmQgb2YgRFJBTS4gKi9cbiBcdGlmIChwcmV2X2VuZCBcdTAwM2MgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSlcbi1cdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTtcbitcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTtcbiBcbiBcdC8qIGZhbGx0aHJvdWdoICovXG4gb3V0OlxuIFx0a2hvX3JhZGl4X2Rlc3Ryb3lfdHJlZShcdTAwMjZidXN5X2Jsb2Nrcyk7XG4gcHJpbnQ6XG4gXHRpZiAoZXJyKVxuLVx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gZXh0ZW5kIHNjcmF0Y2g6ICVwZVxcblwiLCBFUlJfUFRSKGVycikpO1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gZGlzY292ZXIgZXh0cmEgYWxsb2NhdGFibGUgbWVtb3J5OiAlcGVcXG5cIiwgRVJSX1BUUihlcnIpKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE1MCw3ICsxMTUzLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Y29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4rXHQgICAgV0FSTl9PTihraG9fYm9vdG1lbV9vdmVybGFwKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleSh0cmVlLCBraG9fZW5jb2RlX3JhZGl4X2tleShQRk5fUEhZUyhwZm4pLFxuQEAgLTEyMjgsNyArMTIzMSw3IEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRykgXHUwMDI2XHUwMDI2XG4tXHQgICAgV0FSTl9PTihraG9fc2NyYXRjaF9vdmVybGFwKHN0YXJ0X3BmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbitcdCAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKSB7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE4MjUsNyArMTgyOCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpXG4gXG4gXHRlcnIgPSBraG9fcmFkaXhfaW5pdF90cmVlKHRyZWUsIE5VTEwpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xuK1x0XHRnb3RvIGVycl9mcmVlX2Jvb3RtZW07XG4gXG4gXHRraG9fb3V0LmZkdCA9IGtob19hbGxvY19wcmVzZXJ2ZShQQUdFX1NJWkUpO1xuIFx0aWYgKElTX0VSUihraG9fb3V0LmZkdCkpIHtcbkBAIC0xODU0LDkgKzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xuLVx0XHR1bnNpZ25lZCBsb25nIGJhc2VfcGZuID0gUEhZU19QRk4oa2hvX3NjcmF0Y2hbaV0uYWRkcik7XG4tXHRcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fc2NyYXRjaFtpXS5zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSsrKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fYm9vdG1lbVtpXS5hZGRyKTtcbitcdFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IGtob19ib290bWVtW2ldLnNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuIFxuIFx0XHQvKlxuQEAgLTE4NjQsMTAgKzE4NjcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcbiBcdFx0ICogY29ycmVzcG9uZGluZyBQUkVTRU5UIGJpdCBpbiB0aGUga2VybmVsIHBhZ2UgdGFibGUuXG4gXHRcdCAqIFN1YnNlcXVlbnQga21lbWxlYWsgc2NhbnMgb2YgdGhlc2UgcGFnZXMgY2F1c2UgdGhlXG4gXHRcdCAqIG5vbi1QUkVTRU5UIHBhZ2UgZmF1bHRzLlxuLVx0XHQgKiBNYXJrIHNjcmF0Y2ggYXJlYXMgd2l0aCBrbWVtbGVha19pZ25vcmVfcGh5cygpIHRvIGV4Y2x1ZGVcbitcdFx0ICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlXG4gXHRcdCAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy5cbiBcdFx0ICovXG4tXHRcdGttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpO1xuK1x0XHRrbWVtbGVha19pZ25vcmVfcGh5cyhraG9fYm9vdG1lbVtpXS5hZGRyKTtcbiBcdFx0Zm9yIChwZm4gPSBiYXNlX3BmbjsgcGZuIFx1MDAzYyBiYXNlX3BmbiArIGNvdW50O1xuIFx0XHQgICAgIHBmbiArPSBwYWdlYmxvY2tfbnJfcGFnZXMpXG4gXHRcdFx0aW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHBmbl90b19wYWdlKHBmbikpO1xuQEAgLTE4ODMsMTEgKzE4ODYsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcbiBcdGtob191bnByZXNlcnZlX2ZyZWUoa2hvX291dC5mZHQpO1xuIGVycl9mcmVlX2tob19yYWRpeF90cmVlOlxuIFx0a2hvX3JhZGl4X2Rlc3Ryb3lfdHJlZSh0cmVlKTtcbi1lcnJfZnJlZV9zY3JhdGNoOlxuK2Vycl9mcmVlX2Jvb3RtZW06XG4gXHRraG9fb3V0LmZkdCA9IE5VTEw7XG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcbi1cdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xuLVx0XHR2b2lkICplbmQgPSBzdGFydCArIGtob19zY3JhdGNoW2ldLnNpemU7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcbitcdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpO1xuK1x0XHR2b2lkICplbmQgPSBzdGFydCArIGtob19ib290bWVtW2ldLnNpemU7XG4gXG4gXHRcdGZyZWVfcmVzZXJ2ZWRfYXJlYShzdGFydCwgZW5kLCAtMSwgXCJcIik7XG4gXHR9XG5AQCAtMTkwNiw3ICsxOTA5LDcgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXG4gXG4gXHQvKlxuIFx0ICoga2hvX2dldF9tZW1fbWFwKCkgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBJZiBpdCBmYWlscywga2hvX3BvcHVsYXRlKClcbi1cdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uc2NyYXRjaF9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcbitcdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uYm9vdG1lbV9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcbiBcdCAqIHJldHJpZXZhbC5cbiBcdCAqL1xuIFx0bWVtX21hcCA9IGtob19nZXRfbWVtX21hcChmZHQpO1xuQEAgLTE5MTQsNDEgKzE5MTcsNDAgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0Lypcbi1cdCAqIGtob19zY3JhdGNoX292ZXJsYXAoKSBuZWVkcyBraG9fc2NyYXRjaCB0byBiZSBpbml0aWFsaXplZC4gSXRcbi1cdCAqIGlzIHVzZWQgYnkgZnJlZV9hcmVhX2luaXQoKSBvbiBLSE8gYm9vdHMsIHNvIGluaXRpYWxpemUgaXRcbi1cdCAqIGVhcmx5LlxuK1x0ICoga2hvX2Jvb3RtZW1fb3ZlcmxhcCgpIG5lZWRzIGtob19ib290bWVtIHRvIGJlIGluaXRpYWxpemVkLiBJdCBpcyB1c2VkXG4rXHQgKiBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdCBlYXJseS5cbiBcdCAqL1xuLVx0a2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7XG4rXHRraG9fYm9vdG1lbSA9IHBoeXNfdG9fdmlydChraG9faW4uYm9vdG1lbV9waHlzKTtcbiBcbiBcdGlmIChraG9fcmFkaXhfaW5pdF90cmVlKFx1MDAyNmtob19pbi5yYWRpeF90cmVlLCBtZW1fbWFwKSlcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRraG9fZXh0ZW5kX3NjcmF0Y2goKTtcbitcdGtob19kaXNjb3Zlcl9ub3Byc3J2KCk7XG4gXG4gXHRyZXR1cm47XG4gXG4gZXJyOlxuIFx0LypcbiBcdCAqIEZhaWxlZCB0byBpbml0aWFsaXplIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gQ2xlYXIgRkRUXG4tXHQgKiBhbmQgc2NyYXRjaCBzbyBLSE8gdXNlcnMgZG9uJ3QgdHJlYXQgaXQgYXMgYSBLSE8gYm9vdC5cbitcdCAqIGFuZCBib290bWVtIHNvIEtITyB1c2VycyBkb24ndCB0cmVhdCBpdCBhcyBhIEtITyBib290LlxuIFx0ICovXG4gXHRraG9faW4uZmR0X3BoeXMgPSAwO1xuLVx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IDA7XG4rXHRraG9faW4uYm9vdG1lbV9waHlzID0gMDtcbiB9XG4gXG4gdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXG4ge1xuLVx0aWYgKGtob19pbi5zY3JhdGNoX3BoeXMpXG4rXHRpZiAoa2hvX2luLmJvb3RtZW1fcGh5cylcbiBcdFx0a2hvX21lbV9yZXRyaWV2ZSgpO1xuIFx0ZWxzZVxuLVx0XHRraG9fcmVzZXJ2ZV9zY3JhdGNoKCk7XG4rXHRcdGtob19yZXNlcnZlX2Jvb3RtZW0oKTtcbiB9XG4gXG4gdm9pZCBfX2luaXQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcbi1cdFx0XHQgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLCB1NjQgc2NyYXRjaF9sZW4pXG4rXHRcdFx0IHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywgdTY0IGJvb3RtZW1fbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4tXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xuK1x0dW5zaWduZWQgaW50IGJvb3RtZW1fY250ID0gYm9vdG1lbV9sZW4gLyBzaXplb2YoKmtob19ib290bWVtKTtcbitcdHN0cnVjdCBraG9fYm9vdG1lbSAqYm9vdG1lbSA9IE5VTEw7XG4gXHRwaHlzX2FkZHJfdCBtZW1fbWFwX3BoeXM7XG4gXHR2b2lkICpmZHQgPSBOVUxMO1xuIFx0Ym9vbCBwb3B1bGF0ZWQgPSBmYWxzZTtcbkBAIC0xOTc3LDUyICsxOTc5LDUyIEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4gXHRpZiAoIW1lbV9tYXBfcGh5cylcbiBcdFx0Z290byB1bm1hcF9mZHQ7XG4gXG4tXHRzY3JhdGNoID0gZWFybHlfbWVtcmVtYXAoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4tXHRpZiAoIXNjcmF0Y2gpIHtcbi1cdFx0cHJfd2FybihcInNldHVwOiBmYWlsZWQgdG8gbWVtcmVtYXAgc2NyYXRjaCAocGh5cz0weCVsbHgsIGxlbj0lbGxkKVxcblwiLFxuLVx0XHRcdHNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pO1xuK1x0Ym9vdG1lbSA9IGVhcmx5X21lbXJlbWFwKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuK1x0aWYgKCFib290bWVtKSB7XG4rXHRcdHByX3dhcm4oXCJzZXR1cDogZmFpbGVkIHRvIG1lbXJlbWFwIGJvb3RtZW0gKHBoeXM9MHglbGx4LCBsZW49JWxsZClcXG5cIixcbitcdFx0XHRib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcbiBcdFx0Z290byB1bm1hcF9mZHQ7XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHRvIHVzZSBmb3IgZWFybHkgYm9vdFxuLVx0ICogcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhbiByZXNpemUgdGhlXG4tXHQgKiBtZW1ibG9jayBhcnJheSBhcyBuZWVkZWQuXG4rXHQgKiBXZSBwYXNzIGEgc2FmZSBjb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zIHRvXG4rXHQgKiB1c2UgZm9yIGVhcmx5IGJvb3QgcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhblxuK1x0ICogcmVzaXplIHRoZSBtZW1ibG9jayBhcnJheSBhcyBuZWVkZWQuXG4gXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY3JhdGNoX2NudDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9IFx1MDAyNnNjcmF0Y2hbaV07XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgYm9vdG1lbV9jbnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSBcdTAwMjZib290bWVtW2ldO1xuIFx0XHR1NjQgc2l6ZSA9IGFyZWEtXHUwMDNlc2l6ZTtcbiBcbiBcdFx0bWVtYmxvY2tfYWRkKGFyZWEtXHUwMDNlYWRkciwgc2l6ZSk7XG4tXHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS1cdTAwM2VhZGRyLCBzaXplKTtcbitcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBtYXJrIHRoZSBzY3JhdGNoIHJlZ2lvbiAweCVwYSsweCVwYTogJXBlXCIsXG4rXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBtYXJrIHRoZSBib290bWVtIHJlZ2lvbiAweCVwYSsweCVwYTogJXBlXCIsXG4gXHRcdFx0XHRcdTAwMjZhcmVhLVx1MDAzZWFkZHIsIFx1MDAyNnNpemUsIEVSUl9QVFIoZXJyKSk7XG4tXHRcdFx0Z290byB1bm1hcF9zY3JhdGNoO1xuK1x0XHRcdGdvdG8gdW5tYXBfYm9vdG1lbTtcbiBcdFx0fVxuLVx0XHRwcl9kZWJ1ZyhcIk1hcmtlZCAweCVwYSsweCVwYSBhcyBzY3JhdGNoXCIsIFx1MDAyNmFyZWEtXHUwMDNlYWRkciwgXHUwMDI2c2l6ZSk7XG4rXHRcdHByX2RlYnVnKFwiTWFya2VkIDB4JXBhKzB4JXBhIGFzIGJvb3RtZW1cIiwgXHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplKTtcbiBcdH1cbiBcbi1cdG1lbWJsb2NrX3Jlc2VydmUoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4rXHRtZW1ibG9ja19yZXNlcnZlKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuIFxuIFx0Lypcbi1cdCAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIHNjcmF0Y2ggbWVtb3J5LCBsZXQncyB0ZWxsXG4rXHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGEgdmlhYmxlIHJlZ2lvbiBvZiBib290IG1lbW9yeSwgbGV0J3MgdGVsbFxuIFx0ICogdGhlIG1lbWJsb2NrcyBhbGxvY2F0b3IgdG8gb25seSB1c2UgdGhhdCBmb3IgYW55IGFsbG9jYXRpb25zLlxuIFx0ICogVGhhdCB3YXkgd2UgZW5zdXJlIHRoYXQgbm90aGluZyBzY3JpYmJsZXMgb3ZlciBpbiB1c2UgZGF0YSB3aGlsZVxuIFx0ICogd2UgaW5pdGlhbGl6ZSB0aGUgcGFnZSB0YWJsZXMgd2hpY2ggd2Ugd2lsbCBuZWVkIHRvIGluZ2VzdCBhbGxcbiBcdCAqIG1lbW9yeSByZXNlcnZhdGlvbnMgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsLlxuIFx0ICovXG4tXHRtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSgpO1xuK1x0bWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkoKTtcbiBcbiBcdGtob19pbi5mZHRfcGh5cyA9IGZkdF9waHlzO1xuLVx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5cztcbi1cdGtob19zY3JhdGNoX2NudCA9IHNjcmF0Y2hfY250O1xuK1x0a2hvX2luLmJvb3RtZW1fcGh5cyA9IGJvb3RtZW1fcGh5cztcbitcdGtob19ib290bWVtX2NudCA9IGJvb3RtZW1fY250O1xuIFxuIFx0cG9wdWxhdGVkID0gdHJ1ZTtcbiBcdHByX2luZm8oXCJmb3VuZCBrZXhlYyBoYW5kb3ZlciBkYXRhLlxcblwiKTtcbiBcbi11bm1hcF9zY3JhdGNoOlxuLVx0ZWFybHlfbWVtdW5tYXAoc2NyYXRjaCwgc2NyYXRjaF9sZW4pO1xuK3VubWFwX2Jvb3RtZW06XG4rXHRlYXJseV9tZW11bm1hcChib290bWVtLCBib290bWVtX2xlbik7XG4gdW5tYXBfZmR0OlxuIFx0ZWFybHlfbWVtdW5tYXAoZmR0LCBmZHRfbGVuKTtcbiByZXBvcnQ6XG5AQCAtMjAzNCw0NyArMjAzNiw0NyBAQCB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxuIFxuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4ge1xuLVx0c3NpemVfdCBzY3JhdGNoX3NpemU7XG4rXHRzc2l6ZV90IGJvb3RtZW1fc2l6ZTtcbiBcdGludCBlcnIgPSAwO1xuLVx0c3RydWN0IGtleGVjX2J1ZiBzY3JhdGNoO1xuK1x0c3RydWN0IGtleGVjX2J1ZiBib290bWVtO1xuIFxuIFx0aWYgKCFraG9fZW5hYmxlIHx8IGltYWdlLVx1MDAzZXR5cGUgPT0gS0VYRUNfVFlQRV9DUkFTSClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpbWFnZS1cdTAwM2VraG8uZmR0ID0gdmlydF90b19waHlzKGtob19vdXQuZmR0KTtcbiBcbi1cdHNjcmF0Y2hfc2l6ZSA9IHNpemVvZigqa2hvX3NjcmF0Y2gpICoga2hvX3NjcmF0Y2hfY250O1xuLVx0c2NyYXRjaCA9IChzdHJ1Y3Qga2V4ZWNfYnVmKXtcbitcdGJvb3RtZW1fc2l6ZSA9IHNpemVvZigqa2hvX2Jvb3RtZW0pICoga2hvX2Jvb3RtZW1fY250O1xuK1x0Ym9vdG1lbSA9IChzdHJ1Y3Qga2V4ZWNfYnVmKXtcbiBcdFx0LmltYWdlID0gaW1hZ2UsXG4tXHRcdC5idWZmZXIgPSBraG9fc2NyYXRjaCxcbi1cdFx0LmJ1ZnN6ID0gc2NyYXRjaF9zaXplLFxuK1x0XHQuYnVmZmVyID0ga2hvX2Jvb3RtZW0sXG4rXHRcdC5idWZzeiA9IGJvb3RtZW1fc2l6ZSxcbiBcdFx0Lm1lbSA9IEtFWEVDX0JVRl9NRU1fVU5LTk9XTixcbi1cdFx0Lm1lbXN6ID0gc2NyYXRjaF9zaXplLFxuK1x0XHQubWVtc3ogPSBib290bWVtX3NpemUsXG4gXHRcdC5idWZfYWxpZ24gPSBTWl82NEssIC8qIE1ha2VzIGl0IGVhc2llciB0byBtYXAgKi9cbiBcdFx0LmJ1Zl9tYXggPSBVTE9OR19NQVgsXG4gXHRcdC50b3BfZG93biA9IHRydWUsXG4gXHR9O1xuLVx0ZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcihcdTAwMjZzY3JhdGNoKTtcbitcdGVyciA9IGtleGVjX2FkZF9idWZmZXIoXHUwMDI2Ym9vdG1lbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0aW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2ggPSBcdTAwMjZpbWFnZS1cdTAwM2VzZWdtZW50W2ltYWdlLVx1MDAzZW5yX3NlZ21lbnRzIC0gMV07XG4rXHRpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSA9IFx1MDAyNmltYWdlLVx1MDAzZXNlZ21lbnRbaW1hZ2UtXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbitzdGF0aWMgaW50IGtob193YWxrX2Jvb3RtZW0oc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdFx0XHQgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBraG9fYm9vdG1lbV9jbnQ7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xuLVx0XHRcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXG4tXHRcdFx0LmVuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgKyBraG9fc2NyYXRjaFtpXS5zaXplIC0gMSxcbitcdFx0XHQuc3RhcnQgPSBraG9fYm9vdG1lbVtpXS5hZGRyLFxuK1x0XHRcdC5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICsga2hvX2Jvb3RtZW1baV0uc2l6ZSAtIDEsXG4gXHRcdH07XG4gXG4tXHRcdC8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gc2NyYXRjaCByZWdpb24gKi9cbitcdFx0LyogVHJ5IHRvIGZpdCB0aGUga2ltYWdlIGludG8gb3VyIEtITyBib290bWVtIHJlZ2lvbiAqL1xuIFx0XHRyZXQgPSBmdW5jKFx1MDAyNnJlcywga2J1Zik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjA5MSw3ICsyMDkzLDcgQEAgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdGlmICgha2hvX2VuYWJsZSB8fCBrYnVmLVx1MDAzZWltYWdlLVx1MDAzZXR5cGUgPT0gS0VYRUNfVFlQRV9DUkFTSClcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRyZXQgPSBraG9fd2Fsa19zY3JhdGNoKGtidWYsIGZ1bmMpO1xuK1x0cmV0ID0ga2hvX3dhbGtfYm9vdG1lbShrYnVmLCBmdW5jKTtcbiBcbiBcdHJldHVybiByZXQgPT0gMSA/IDAgOiAtRUFERFJOT1RBVkFJTDtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXG5pbmRleCAyNTdlZThhNTJiZTY2Li43ZDc0NDc3ZGEwYjc5IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmNcbkBAIC03NywyMyArNzcsMjMgQEAgdm9pZCBraG9fZGVidWdmc19ibG9iX3JlbW92ZShzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZywgdm9pZCAqYmxvYilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBzY3JhdGNoX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4rc3RhdGljIGludCBib290bWVtX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiMHglbGx4XFxuXCIsIGtob19zY3JhdGNoW2ldLmFkZHIpO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSsrKVxuK1x0XHRzZXFfcHJpbnRmKG0sIFwiMHglbGx4XFxuXCIsIGtob19ib290bWVtW2ldLmFkZHIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLURFRklORV9TSE9XX0FUVFJJQlVURShzY3JhdGNoX3BoeXMpO1xuK0RFRklORV9TSE9XX0FUVFJJQlVURShib290bWVtX3BoeXMpO1xuIFxuLXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4rc3RhdGljIGludCBib290bWVtX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXG4tXHRcdHNlcV9wcmludGYobSwgXCIweCVsbHhcXG5cIiwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspXG4rXHRcdHNlcV9wcmludGYobSwgXCIweCVsbHhcXG5cIiwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tREVGSU5FX1NIT1dfQVRUUklCVVRFKHNjcmF0Y2hfbGVuKTtcbitERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9vdG1lbV9sZW4pO1xuIFxuIF9faW5pdCB2b2lkIGtob19pbl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcsIGNvbnN0IHZvaWQgKmZkdClcbiB7XG5AQCAtMTg2LDEzICsxODYsMTMgQEAgX19pbml0IGludCBraG9fb3V0X2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZylcbiBcdGlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbi1cdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2NyYXRjaF9waHlzXCIsIDA0MDAsIGRpciwgTlVMTCxcbi1cdFx0XHRcdFx1MDAyNnNjcmF0Y2hfcGh5c19mb3BzKTtcbitcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiYm9vdG1lbV9waHlzXCIsIDA0MDAsIGRpciwgTlVMTCxcbitcdFx0XHRcdFx1MDAyNmJvb3RtZW1fcGh5c19mb3BzKTtcbiBcdGlmIChJU19FUlIoZikpXG4gXHRcdGdvdG8gZXJyX3JtZGlyO1xuIFxuLVx0ZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzY3JhdGNoX2xlblwiLCAwNDAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZzY3JhdGNoX2xlbl9mb3BzKTtcbitcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiYm9vdG1lbV9sZW5cIiwgMDQwMCwgZGlyLCBOVUxMLFxuK1x0XHRcdFx0XHUwMDI2Ym9vdG1lbV9sZW5fZm9wcyk7XG4gXHRpZiAoSVNfRVJSKGYpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFxuaW5kZXggODA1ZDJhNzZjMzg4MS4uZTk2ODVlMWVmNmQ3OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbkBAIC0xOSw4ICsxOSw4IEBAIHN0cnVjdCBraG9fZGVidWdmcyB7XG4gc3RydWN0IGtob19kZWJ1Z2ZzIHt9O1xuICNlbmRpZlxuIFxuLWV4dGVybiBzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmtob19zY3JhdGNoO1xuLWV4dGVybiB1bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xuK2V4dGVybiBzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuK2V4dGVybiB1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xuIGludCBraG9fZGVidWdmc19pbml0KHZvaWQpO1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li41NDE1ZTBiMzhiNWQ1IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTQ4NSwxMCArNDg1LDYgQEAgY29uZmlnIEhBVkVfR1VQX0ZBU1RcbiBcdGRlcGVuZHMgb24gTU1VXG4gXHRib29sXG4gXG4tIyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3ZlclxuLWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxuLVx0Ym9vbFxuLVxuICMgRG9uJ3QgZGlzY2FyZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZWQgdG8gdHJhY2sgXCJtZW1vcnlcIiBhbmQgXCJyZXNlcnZlZFwiIG1lbWJsb2Nrc1xuICMgYWZ0ZXIgZWFybHkgYm9vdCwgc28gaXQgY2FuIHN0aWxsIGJlIHVzZWQgdG8gdGVzdCBmb3IgdmFsaWRpdHkgb2YgbWVtb3J5LlxuICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCAzN2UwNmU3MGMxZDAwLi4wMzUxOTEzY2U3OWIwIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTExMiwxMSArMTEyLDExIEBAIHVuc2lnbmVkIGxvbmcgbWluX2xvd19wZm47XG4gdW5zaWduZWQgbG9uZyBtYXhfcGZuO1xuIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuO1xuIFxuLSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbi0vKiBXaGVuIHNldCB0byB0cnVlLCBvbmx5IGFsbG9jYXRlIGZyb20gTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggcmFuZ2VzICovXG4tc3RhdGljIGJvb2wga2hvX3NjcmF0Y2hfb25seTtcbisjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG4rLyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19OT1BSU1JWIHJhbmdlcyAqL1xuK3N0YXRpYyBib29sIGtob19ub3Byc3J2X29ubHk7XG4gI2Vsc2Vcbi0jZGVmaW5lIGtob19zY3JhdGNoX29ubHkgZmFsc2VcbisjZGVmaW5lIGtob19ub3Byc3J2X29ubHkgZmFsc2VcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiBtZW1ibG9ja19tZW1vcnlfaW5pdF9yZWdpb25zW0lOSVRfTUVNQkxPQ0tfTUVNT1JZX1JFR0lPTlNdIF9faW5pdGRhdGFfbWVtYmxvY2s7XG5AQCAtMTc4LDkgKzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZClcbiBcbiBzdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXG4ge1xuLVx0Lyogc2tpcCBub24tc2NyYXRjaCBtZW1vcnkgZm9yIGtobyBlYXJseSBib290IGFsbG9jYXRpb25zICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb25seSlcbi1cdFx0cmV0dXJuIE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuK1x0Lyogb25seSB1c2UgS0hPX05PUFJTUlYgbWVtb3J5IGZvciBraG8gZWFybHkgYm9vdCBhbGxvY2F0aW9ucyAqL1xuK1x0aWYgKGtob19ub3Byc3J2X29ubHkpXG4rXHRcdHJldHVybiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiBcbiBcdHJldHVybiBzeXN0ZW1faGFzX3NvbWVfbWlycm9yID8gTUVNQkxPQ0tfTUlSUk9SIDogTUVNQkxPQ0tfTk9ORTtcbiB9XG5AQCAtMTE3NCwzMyArMTE3NCwzMyBAQCBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaVxuIH1cbiBcbiAvKipcbi0gKiBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoIC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX1NDUkFUQ0guXG4rICogbWVtYmxvY2tfbWFya19raG9fbm9wcnNydiAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19OT1BSU1JWLlxuICAqIEBiYXNlOiB0aGUgYmFzZSBwaHlzIGFkZHIgb2YgdGhlIHJlZ2lvblxuICAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uXG4gICpcbi0gKiBPbmx5IG1lbW9yeSByZWdpb25zIG1hcmtlZCB3aXRoICVNRU1CTE9DS19LSE9fU0NSQVRDSCB3aWxsIGJlIGNvbnNpZGVyZWRcbisgKiBPbmx5IG1lbW9yeSByZWdpb25zIG1hcmtlZCB3aXRoICVNRU1CTE9DS19LSE9fTk9QUlNSViB3aWxsIGJlIGNvbnNpZGVyZWRcbiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbitfX2luaXQgaW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gbWVtYmxvY2tfc2V0Y2xyX2ZsYWcoXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAxLFxuLVx0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19TQ1JBVENIKTtcbitcdFx0XHRcdCAgICBNRU1CTE9DS19LSE9fTk9QUlNSVik7XG4gfVxuIFxuIC8qKlxuLSAqIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoIC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggZmxhZyBmb3IgYVxuKyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYVxuICAqIHNwZWNpZmllZCByZWdpb24uXG4gICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4rX19pbml0IGludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbiBcdHJldHVybiBtZW1ibG9ja19zZXRjbHJfZmxhZyhcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIDAsXG4tXHRcdFx0XHQgICAgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpO1xuK1x0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19OT1BSU1JWKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgc2hvdWxkX3NraXBfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuQEAgLTEyMzYsOSArMTIzNiw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcbiBcdC8qXG4gXHQgKiBJbiBlYXJseSBhbGxvYyBkdXJpbmcga2V4ZWMgaGFuZG92ZXIsIHdlIGNhbiBvbmx5IGNvbnNpZGVyXG4tXHQgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcbitcdCAqIE1FTUJMT0NLX0tIT19OT1BSU1JWIHJlZ2lvbnMgZm9yIHRoZSBhbGxvY2F0aW9uc1xuIFx0ICovXG4tXHRpZiAoKGZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fU0NSQVRDSCkgXHUwMDI2XHUwMDI2ICFtZW1ibG9ja19pc19raG9fc2NyYXRjaChtKSlcbitcdGlmICgoZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX0tIT19OT1BSU1JWKSBcdTAwMjZcdTAwMjYgIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KG0pKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4gXHRpZiAobnVtYV92YWxpZF9ub2RlKG5pZCkgXHUwMDI2XHUwMDI2ICFleGFjdF9uaWQpIHtcbiBcdFx0bmlkID0gTlVNQV9OT19OT0RFO1xuIFx0XHQvKlxuLVx0XHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIHNjcmF0Y2gsIGl0IHdvdWxkXG4rXHRcdCAqIElmIGEgcHJldmlvdXMgY2FuZGlkYXRlIG92ZXJsYXBwZWQgd2l0aCBLSE8gYm9vdG1lbSwgaXQgd291bGRcbiBcdFx0ICogdXBkYXRlIHN0YXJ0IG9yIGVuZC4gTm93IHRoYXQgdGhlIHNlYXJjaCBpcyBvcGVuaW5nIHRvIGFsbFxuIFx0XHQgKiBub2RlcywgcmVzZXQgdGhlbS5cbiBcdFx0ICovXG5AQCAtMTgwOSwxMiArMTgwOSwxMiBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4gZm91bmQ6XG4gXHQvKlxuIFx0ICogSHVnZVRMQiBwYWdlcyBjYW4gYmUgcHJlc2VydmVkIHdpdGggS0hPIGFuZCBubyBwcmVzZXJ2ZWQgbWVtb3J5IGNhblxuLVx0ICogYmUgaW4gc2NyYXRjaC4gU28gcmV0cnkgaWYgZm91bmQgYWRkcmVzcyBvdmVybGFwcyB3aXRoIHNjcmF0Y2guXG4rXHQgKiBiZSBpbiBib290bWVtLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggYm9vdG1lbS5cbiBcdCAqXG4tXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJ3QgdGFrZSB0b29cbitcdCAqIEJvb3RtZW0gYXJlYXMgYXJlIG5vcm1hbGx5IG5vdCB2ZXJ5IGxhcmdlLCBzbyB0aGlzIHNob3VsZG4ndCB0YWtlIHRvb1xuIFx0ICogbWFueSByZXRyaWVzLlxuIFx0ICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChhZGRyLCBzaXplKSkge1xuK1x0aWYgKGtob19ib290bWVtX292ZXJsYXAoYWRkciwgc2l6ZSkpIHtcbiBcdFx0aWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKVxuIFx0XHRcdHN0YXJ0ID0gYWRkciArIHNpemU7XG4gXHRcdGVsc2VcbkBAIC0yNDk5LDcgKzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKVxuIFx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG4gXHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xuIFxuLVx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xuK1x0bWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSgpO1xuIFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xuIFx0dG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTtcbiB9XG5AQCAtMjU5NywxNSArMjU5NywxNSBAQCBpbnQgcmVzZXJ2ZV9tZW1fcmVsZWFzZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSFxuLV9faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXG4rI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuK19faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNydl9vbmx5KHZvaWQpXG4ge1xuLVx0a2hvX3NjcmF0Y2hfb25seSA9IHRydWU7XG4rXHRraG9fbm9wcnNydl9vbmx5ID0gdHJ1ZTtcbiB9XG4gXG4tX19pbml0IHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKVxuK19faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkodm9pZClcbiB7XG4tXHRraG9fc2NyYXRjaF9vbmx5ID0gZmFsc2U7XG4rXHRraG9fbm9wcnNydl9vbmx5ID0gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTI4NjEsNyArMjg2MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVfbWVtKGNoYXIgKnApXG4gXHRpZiAocmVzZXJ2ZV9tZW1fa2hvX3Jldml2ZShuYW1lLCBzaXplLCBhbGlnbikpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0LyogVE9ETzogQWxsb2NhdGlvbiBtdXN0IGJlIG91dHNpZGUgb2Ygc2NyYXRjaCByZWdpb24gKi9cbitcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqL1xuIFx0c3RhcnQgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIGFsaWduKTtcbiBcdGlmICghc3RhcnQpIHtcbiBcdFx0cHJfZXJyKFwicmVzZXJ2ZV9tZW06IG1lbWJsb2NrIGFsbG9jYXRpb24gZmFpbGVkXFxuXCIpO1xuQEAgLTI4ODYsNyArMjg4Niw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbiBcdFtpbG9nMihNRU1CTE9DS19EUklWRVJfTUFOQUdFRCldID0gXCJEUlZfTU5HXCIsXG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFwiUlNWX05JVFwiLFxuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gXCJSU1ZfS0VSTlwiLFxuLVx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcIktIT19TQ1JBVENIXCIsXG4rXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX05PUFJTUlYpXSA9IFwiS0hPX05PUFJTUlZcIixcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA3OGQ2Mzc4OWE5NjkwLi5kMDMxNTZiZTBlMTA0IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC02ODEsNyArNjgxLDcgQEAgc3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBwZm4gKyBucl9wYWdlcztcbiBcbiBcdGZvciAocGZuID0gcGFnZWJsb2NrX2FsaWduKHBmbik7IHBmbiBcdTAwM2MgZW5kOyBwZm4gKz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG4tXHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fc2NyYXRjaF9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcbitcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19ib290bWVtX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuIFxuIFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuIFx0XHRpZiAoIWF0b21pYyBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbkBAIC03NjQsNyArNzY0LDcgQEAgc3RhdGljIHZvaWQgX19tZW1pbml0IF9faW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFxuIFx0aWYgKHBhZ2VibG9ja19hbGlnbmVkKHBmbikpIHtcbiBcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9XG4tXHRcdFx0a2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xuK1x0XHRcdGtob19ib290bWVtX21pZ3JhdGV0eXBlKHBmbiwgTUlHUkFURV9NT1ZBQkxFKTtcbiBcdFx0aW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGZuX3RvX3BhZ2UocGZuKSwgbXQsIGZhbHNlKTtcbiBcdH1cbiB9XG5AQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXG4gXHRcdCAqIG92ZXIgdGhlIHBsYWNlIGR1cmluZyBzeXN0ZW0gYm9vdC5cbiBcdFx0ICovXG4gXHRcdGlmIChwYWdlYmxvY2tfYWxpZ25lZChwZm4pKSB7XG4tXHRcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuK1x0XHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcbiBcbiBcdFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLCBtdCwgaXNvbGF0ZV9wYWdlYmxvY2spO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaFxuaW5kZXggZTg2YmI5MDAwYjIyZi4uNDZjNWExNTZmY2U0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFxuICNkZWZpbmUgX19TZXRQYWdlUmVzZXJ2ZWQocClcdCgodm9pZCkocCkpXG4gXG4tc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4rc3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ5OjE5LjYzMjI1OTE3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2Mjg3OTUyNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktITyBTY3JhdGNoIHRvIEJvb3RtZW0vTk9QUlNWOiBBIFJlbmFtZSBhbmQgUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBlc3NlbnRpYWxseSByZW5hbWluZyB0aGUgXCJraG9fc2NyYXRjaFwiIGNvbmNlcHQgdG8gXCJraG9fYm9vdG1lbVwiIG9yIFwia2hvX25vcHJzcnZcIiB3aXRoaW4gdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIGZlYXR1cmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBzdHJhaWdodGZvcndhcmQgcmVuYW1lLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNvdWxkIGJlIGx1cmtpbmcuXG5cbkZpcnN0IHBhc3M6IHRoaXMgc2VlbXMgbGlrZSBhIGNvbXBsZXRlIHN3ZWVwIG9mIHJlbmFtaW5nIHZhcmlhYmxlcywgc3RydWN0IG1lbWJlcnMsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbWVtYmxvY2sgZmxhZ3MsIGFuZCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycy4gV2UgaGF2ZSBjaGFuZ2VzIGFjcm9zcyBkb2N1bWVudGF0aW9uLCB4ODYgc2V0dXAsIEVGSSBpbml0aWFsaXphdGlvbiwgT0Yga2V4ZWMsIEtITyBjb3JlIGxvZ2ljLCBtZW1ibG9jaywgYW5kIG1tX2luaXQuYy4gVGhlIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgYGtob19zY3JhdGNoPWAgYmVjb21lcyBga2hvX2Jvb3RtZW09YCwgYHN0cnVjdCBraG9fc2NyYXRjaGAgYmVjb21lcyBgc3RydWN0IGtob19ib290bWVtYCwgYE1FTUJMT0NLX0tIT19TQ1JBVENIYCBpcyBub3cgYE1FTUJMT0NLX0tIT19OT1BSU1JWYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBraG9fZXh0ZW5kX3NjcmF0Y2hgIGFyZSBub3cgYGtob19kaXNjb3Zlcl9ub3Byc3J2YCwgYW5kIHNvIG9uLiBFdmVuIGRlYnVnZnMgZW50cmllcyBhcmUgcmVuYW1lZCwgYHNjcmF0Y2hfcGh5c2AgdG8gYGJvb3RtZW1fcGh5c2AsIHlvdSBnZXQgdGhlIGlkZWEuIEFsc28gdGhlIGRldmljZSB0cmVlIHByb3BlcnRpZXMgXCJsaW51eCxraG8tc2NyYXRjaFwiIHRvIFwibGludXgsa2hvLWJvb3RtZW1cIi4gQWxsIHRoZSB1c3VhbCBzdXNwZWN0cy5cblxuT2theSwgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQncyBhbGwgYSByZW5hbWUgc28gZmFyLiBObyBsb2dpYyBpcyBhbHRlcmVkLCBqdXN0IG5hbWUgY2hhbmdlcy4gVGhlIG9ubHkgdGhpbmcgcmVtb3RlbHkgaW50ZXJlc3RpbmcgaXMgdGhhdCB0aGUgYE1FTUJMT0NLX0tIT19TQ1JBVENIYCBjb25maWcgb3B0aW9uIHNlZW1zIHRvIGJlIGdvbmUuIEJ1dCwgaXQncyByZXBsYWNlZCBieSBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCwgc28sIHRoaXMgaXMgbW9yZSBvZiBhIHNpbXBsaWZpY2F0aW9uIHRoYW4gYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTGV0J3MgZHJpbGwgZG93biBpbnRvIGEgZmV3IG9mIHRoZSBhZmZlY3RlZCBmaWxlcyB0byBjb25maXJtOiBJbiBga2hvX2V4dGVuZF9zY3JhdGNoYCAobm93IGBraG9fZGlzY292ZXJfbm9wcnNydmApIHRoZSBpbnRlcm5hbCBjb25zdGFudHMgcmVtYWluIHVuY2hhbmdlZCwganVzdCBhIHJlbmFtZS4gR29pbmcgdGhyb3VnaCBgYXJjaC94ODYva2VybmVsL2U4MjAuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jYCwgYGRyaXZlcnMvb2Yva2V4ZWMuY2AsIGFuZCBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AsIGl0J3MganVzdCBhIHJlbmFtZSwgYSBjb25zaXN0ZW50IHBhdHRlcm4uIEkgd2FzIGEgYml0IHdvcnJpZWQgd2hlbiBJIHNhdyB0aGF0IHRoZSBvbGQgZnVuY3Rpb24gbmFtZXMgd2VyZSBwcmVzZW50LlxuXG5ObyBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGJlIGZ1enplZCBoZXJlISBJJ20gcHJldHR5IHN1cmUgd2UncmUgZ29vZC4gSXQncyBhIHB1cmUgcmVuYW1lL3JlZmFjdG9yaW5nIHBhdGNoLiBUaGUgZXhlY3V0aW9uIGZsb3cgcmVtYWlucyBpZGVudGljYWwsIGFuZCB0aGVyZSdzIG5vIG5ldyBsb2dpYy4gVGhlcmUgYXJlIG5vIHNpZGUtZWZmZWN0cyBJIGNhbiBpZGVudGlmeSBhdCBhbGwuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdtIGRvaW5nIGEgZmluYWwgc3dlZXAsIGJ1dCwgaXQncyBqdXN0IG1vcmUgcmVuYW1lcy4gTm90aGluZyBvZiBpbnRlcmVzdCBoZXJlLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBzYWZlLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLiBJJ2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTczLCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0OTozNS45MjAyMTk1MDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAnc2NyYXRjaCcgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJ2Jvb3RtZW0nIGFuZCAnbm9wcnNydicuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgdGhlICdzY3JhdGNoJyBtZW1vcnkgY29uY2VwdCBpbiB0aGUgS2V4ZWMgSGFuZE92ZXIgKEtITykgZmVhdHVyZSB0byAnYm9vdG1lbScgYW5kICdub3Byc3J2Jy4gSXQgcmVuYW1lcyBjb21tYW5kLWxpbmUgcGFyYW1ldGVycywgZGV2aWNlIHRyZWUgcHJvcGVydGllcywgZGVidWdmcyBmaWxlcywgc3RydWN0IG5hbWVzLCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgYW5kIGEgS2NvbmZpZyBvcHRpb24sIGJ1dCBkb2VzIG5vdCBhbHRlciBhbnkgZXhlY3V0aW9uIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDk6MzUuOTIwMzk0Mjc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow64cdv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 16:47:39 +0000 UTC FinishedAt: 2026-08-11 16:49:37 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVuYW1lcyB0aGUgJiMzOTtzY3JhdGNoJiMzOTsgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJiMzOTtib290bWVtJiMzOTsgYW5kICYjMzk7bm9wcnNydiYjMzk7LiBJdCByZW5hbWVzIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLCBkZWJ1Z2ZzIGZpbGVzLCBzdHJ1Y3QgbmFtZXMsIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgYSBLY29uZmlnIG9wdGlvbiwgYnV0IGRvZXMgbm90IGFsdGVyIGFueSBleGVjdXRpb24gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODViZjU3NjZlZGNmY2ZkNTMyN2U0ZmNkOWVjYjc0Njg0ZDRlNDI3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDE2OjQ5OjE4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjguLmEwMzkyN2ZmYjg1ZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0yOTg5LDExICYjNDM7Mjk4OSwxMiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFx0XHRcdFwmIzM0OzBcJiMzNDsgfCBcJiMzNDtvZmZcJiMzNDsgfCBcJiMzNDtuXCYjMzQ7IC0ga2V4ZWMgaGFuZG92ZXIgaXMgZGlzYWJsZWRcbiBcdFx0XHRcJiMzNDsxXCYjMzQ7IHwgXCYjMzQ7b25cJiMzNDsgfCBcJiMzNDt5XCYjMzQ7IC0ga2V4ZWMgaGFuZG92ZXIgaXMgZW5hYmxlZFxuIFxuLVx0a2hvX3NjcmF0Y2g9XHRbS0VYRUMsRUFSTFldXG4mIzQzO1x0a2hvX2Jvb3RtZW09XHRbS0VYRUMsRUFSTFldXG4gXHRcdFx0Rm9ybWF0OiBsbFtLTUddLG1tW0tNR10sbm5bS01HXSB8IG5uJVxuLVx0XHRcdERlZmluZXMgdGhlIHNpemUgb2YgdGhlIEtITyBzY3JhdGNoIHJlZ2lvbi4gVGhlIEtIT1xuLVx0XHRcdHNjcmF0Y2ggcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeVxuLVx0XHRcdHJhbmdlcyB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgZm9yIG5vbi1rZXJuZWxcbiYjNDM7XG4mIzQzO1x0XHRcdERlZmluZXMgdGhlIHNpemUgb2YgdGhlIEtITyBib290IG1lbW9yeSByZWdpb24uIFRoZVxuJiM0MztcdFx0XHRLSE8gYm9vdCBtZW1vcnkgcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4mIzQzO1x0XHRcdG1lbW9yeSByYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXG4gXHRcdFx0YWxsb2NhdGlvbnMuIFRoYXQgd2F5LCBldmVuIHdoZW4gbWVtb3J5IGlzIGhlYXZpbHlcbiBcdFx0XHRmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZFxuIFx0XHRcdGtlcm5lbCB3aWxsIGFsd2F5cyBoYXZlIGVub3VnaCBjb250aWd1b3VzIHJhbmdlcyB0b1xuQEAgLTMwMDIsMTAgJiM0MzszMDAzLDEwIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0SXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgZXhhY3QgYW1vdW50IG9mXG4gXHRcdFx0bWVtb3J5IGluIHRoZSBmb3JtIG9mIFwmIzM0O2xsW0tNR10sbW1bS01HXSxubltLTUddXCYjMzQ7XG4gXHRcdFx0d2hlcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBkZWZpbmVzIHRoZSBzaXplIG9mIGEgbG93XG4tXHRcdFx0bWVtb3J5IHNjcmF0Y2ggYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xuLVx0XHRcdHRoZSBzaXplIG9mIGEgZ2xvYmFsIHNjcmF0Y2ggYXJlYSBhbmQgdGhlIHRoaXJkXG4mIzQzO1x0XHRcdG1lbW9yeSBib290bWVtIGFyZWEsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRlZmluZXNcbiYjNDM7XHRcdFx0dGhlIHNpemUgb2YgYSBnbG9iYWwgYm9vdG1lbSBhcmVhIGFuZCB0aGUgdGhpcmRcbiBcdFx0XHRwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhZGRpdGlvbmFsIHBlci1ub2RlXG4tXHRcdFx0c2NyYXRjaCBhcmVhcy4gIFRoZSBmb3JtIFwmIzM0O25uJVwmIzM0OyBkZWZpbmVzIHNjYWxlIGZhY3RvclxuJiM0MztcdFx0XHRib290bWVtIGFyZWFzLiAgVGhlIGZvcm0gXCYjMzQ7bm4lXCYjMzQ7IGRlZmluZXMgc2NhbGUgZmFjdG9yXG4gXHRcdFx0KGluIHBlcmNlbnRzKSBvZiBtZW1vcnkgdGhhdCB3YXMgdXNlZCBkdXJpbmcgYm9vdC5cbiBcbiBcdGttYWM9XHRcdFtNSVBTXSBLb3JpbmEgZXRoZXJuZXQgTUFDIGFkZHJlc3MuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0XG5pbmRleCAyYzI2ZTU2MGJkNzhhLi5mMTRjOGQ5YWQ2YTQ1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcbkBAIC0yMCwxMCAmIzQzOzIwLDEwIEBAIG5lZWQgdG8gZW5hYmxlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHByZXNlcnZlIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgYWNyb3NzXG4ga2V4ZWMuXG4gXG4gVG8gdXNlIEtITywgcGxlYXNlIGJvb3QgdGhlIGtlcm5lbCB3aXRoIHRoZSBgYGtobz1vbmBgIGNvbW1hbmQgbGluZVxuLXBhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fc2NyYXRjaGBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGVcbi1zY3JhdGNoIHJlZ2lvbnMuIEZvciBleGFtcGxlIGBga2hvX3NjcmF0Y2g9MTZNLDUxMk0sMjU2TWBgIHdpbGwgcmVzZXJ2ZSBhXG4tMTYgTWlCIGxvdyBtZW1vcnkgc2NyYXRjaCBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIHNjcmF0Y2ggcmVnaW9uLCBhbmQgMjU2IE1pQlxuLXBlciBOVU1BIG5vZGUgc2NyYXRjaCByZWdpb25zIG9uIGJvb3QuXG4mIzQzO3BhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fYm9vdG1lbWBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGVcbiYjNDM7Ym9vdCBtZW1vcnkgcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fYm9vdG1lbT0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcbiYjNDM7MTYgTWlCIGxvdyBtZW1vcnkgYm9vdG1lbSBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIGJvb3RtZW0gcmVnaW9uLCBhbmQgMjU2IE1pQlxuJiM0MztwZXIgTlVNQSBub2RlIGJvb3RtZW0gcmVnaW9ucyBvbiBib290LlxuIFxuIFBlcmZvcm0gYSBLSE8ga2V4ZWNcbiA9PT09PT09PT09PT09PT09PT09XG5AQCAtOTYsMTUgJiM0Mzs5NiwxNSBAQCBzdGFiaWxpemVkLlxuICAgICBjdXJyZW50IEtITyBzdGF0ZSBpbiB0aGlzIGZpbGUuIEtleGVjIHVzZXIgc3BhY2UgdG9vbGluZyBjYW4gdXNlIHRoaXNcbiAgICAgYXMgaW5wdXQgZmlsZSBmb3IgdGhlIEtITyBwYXlsb2FkIGltYWdlLlxuIFxuLWBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zY3JhdGNoX2xlbmBgXG4tICAgIExlbmd0aHMgb2YgS0hPIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xuJiM0MztgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvYm9vdG1lbV9sZW5gYFxuJiM0MzsgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4gICAgIG1lbW9yeSByZWdpb25zIHRoYXQgd2lsbCBhbHdheXMgc3RheSBhdmFpbGFibGUgZm9yIGZ1dHVyZSBrZXhlY1xuICAgICBhbGxvY2F0aW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29scyBjYW4gdXNlIHRoaXMgZmlsZSB0byBkZXRlcm1pbmVcbiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cbiBcbi1gYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc2NyYXRjaF9waHlzYGBcbi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHNcbi0gICAgY2FuIHVzZSB0aGlzIGZpbGUgaW4gY29uanVuY3Rpb24gdG8gc2NyYXRjaF9waHlzIHRvIGRldGVybWluZSB3aGVyZVxuJiM0MztgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvYm9vdG1lbV9waHlzYGBcbiYjNDM7ICAgIFBoeXNpY2FsIGxvY2F0aW9ucyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLiBLZXhlYyB1c2VyIHNwYWNlIHRvb2xzXG4mIzQzOyAgICBjYW4gdXNlIHRoaXMgZmlsZSBpbiBjb25qdW5jdGlvbiB0byBib290bWVtX3BoeXMgdG8gZGV0ZXJtaW5lIHdoZXJlXG4gICAgIGl0IHNob3VsZCBwbGFjZSBpdHMgcGF5bG9hZCBpbWFnZXMuXG4gXG4gYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3N1Yl9mZHRzL2BgXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG5pbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3RcbkBAIC0xMyw4ICYjNDM7MTMsOCBAQCBLZXhlYyBIYW5kT3ZlciAoS0hPKSBpcyBhIG1lY2hhbmlzbSB0aGF0IGFsbG93cyBMaW51eCB0byBwcmVzZXJ2ZSBtZW1vcnlcbiByZWdpb25zLCB3aGljaCBjb3VsZCBjb250YWluIHNlcmlhbGl6ZWQgc3lzdGVtIHN0YXRlcywgYWNyb3NzIGtleGVjLlxuIFxuIEtITyB1c2VzIDpyZWY6YGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSAoRkRUKSBcdTAwM2NraG9fZmR0XHUwMDNlYCB0byBwYXNzIGluZm9ybWF0aW9uIGFib3V0XG4tdGhlIHByZXNlcnZlZCBzdGF0ZSBmcm9tIHByZS1leGVjIGtlcm5lbCB0byBwb3N0LWtleGVjIGtlcm5lbCBhbmQgOnJlZjpgc2NyYXRjaFxuLW1lbW9yeSByZWdpb25zIFx1MDAzY2tob19zY3JhdGNoXHUwMDNlYCB0byBlbnN1cmUgaW50ZWdyaXR5IG9mIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5LlxuJiM0Mzt0aGUgcHJlc2VydmVkIHN0YXRlIGZyb20gcHJlLWV4ZWMga2VybmVsIHRvIHBvc3Qta2V4ZWMga2VybmVsIGFuZCA6cmVmOmBib290XG4mIzQzO21lbW9yeSByZWdpb25zIFx1MDAzY2tob19ib290bWVtXHUwMDNlYCB0byBlbnN1cmUgaW50ZWdyaXR5IG9mIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5LlxuIFxuIC4uIF9raG9fZmR0OlxuIFxuQEAgLTQwLDMxICYjNDM7NDAsMzEgQEAgYW5kIHBvc3Qta2V4ZWMga2VybmVscy4gVGhpcyBBQkkgaXMgZGVmaW5lZCBieSBoZWFkZXIgZmlsZXMgaW5cbiBcbiAgICBhYmkucnN0XG4gXG4tLi4gX2tob19zY3JhdGNoOlxuJiM0MzsuLiBfa2hvX2Jvb3RtZW06XG4gXG4tU2NyYXRjaCBSZWdpb25zXG4tPT09PT09PT09PT09PT09XG4mIzQzO0Jvb3QgTWVtb3J5IFJlZ2lvbnNcbiYjNDM7PT09PT09PT09PT09PT09PT09PVxuIFxuIFRvIGJvb3QgaW50byBrZXhlYywgd2UgbmVlZCB0byBoYXZlIGEgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByYW5nZSB0aGF0XG4gY29udGFpbnMgbm8gaGFuZGVkIG92ZXIgbWVtb3J5LiBLZXhlYyB0aGVuIHBsYWNlcyB0aGUgdGFyZ2V0IGtlcm5lbCBhbmQgaW5pdHJkXG4gaW50byB0aGF0IHJlZ2lvbi4gVGhlIG5ldyBrZXJuZWwgZXhjbHVzaXZlbHkgdXNlcyB0aGlzIHJlZ2lvbiBmb3IgbWVtb3J5XG4gYWxsb2NhdGlvbnMgYmVmb3JlIGR1cmluZyBib290IHVwIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFnZSBhbGxvY2F0b3IuXG4gXG4tV2UgZ3VhcmFudGVlIHRoYXQgd2UgYWx3YXlzIGhhdmUgc3VjaCByZWdpb25zIHRocm91Z2ggdGhlIHNjcmF0Y2ggcmVnaW9uczogT25cbi1maXJzdCBib290IEtITyBhbGxvY2F0ZXMgc2V2ZXJhbCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMuIFNpbmNlXG4mIzQzO1dlIGd1YXJhbnRlZSB0aGF0IHdlIGFsd2F5cyBoYXZlIHN1Y2ggcmVnaW9ucyB0aHJvdWdoIHRoZSBib290IG1lbW9yeSByZWdpb25zOlxuJiM0MztPbiBmaXJzdCBib290IEtITyBhbGxvY2F0ZXMgc2V2ZXJhbCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMuIFNpbmNlXG4gYWZ0ZXIga2V4ZWMgdGhlc2UgcmVnaW9ucyB3aWxsIGJlIHVzZWQgYnkgZWFybHkgbWVtb3J5IGFsbG9jYXRpb25zLCB0aGVyZSBpcyBhXG4tc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9uc1xuLXJlcXVlc3RzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFydGljdWxhciBOVU1BIG5vZGUgYXNzaWdubWVudC5cbi1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcbi1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG4tdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbnMuXG4tVGhlIHNjcmF0Y2ggcmVnaW9ucyBhcmUgZGVjbGFyZWQgYXMgQ01BIHdoZW4gcGFnZSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQgc29cbi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlXG4tZ3VhcmFudGVlIHRoYXQgbm8gaGFuZG92ZXIgcGFnZXMgbGFuZCBpbiB0aGF0IHJlZ2lvbiwgYmVjYXVzZSBoYW5kb3ZlciBwYWdlc1xuLW11c3QgYmUgYXQgYSBzdGF0aWMgcGh5c2ljYWwgbWVtb3J5IGxvY2F0aW9uIGFuZCBDTUEgZW5mb3JjZXMgdGhhdCBvbmx5XG4tbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuXG4tXG4tQWZ0ZXIgS0hPIGtleGVjLCB3ZSBpZ25vcmUgdGhlIGBga2hvX3NjcmF0Y2hgYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmRcbiYjNDM7Ym9vdCBtZW1vcnkgcmVnaW9uIHBlciBOVU1BIG5vZGUgcGx1cyBhIGJvb3QgbWVtb3J5IHJlZ2lvbiB0byBzYXRpc2Z5XG4mIzQzO2FsbG9jYXRpb25zIHJlcXVlc3RzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFydGljdWxhciBOVU1BIG5vZGUgYXNzaWdubWVudC4gQnlcbiYjNDM7ZGVmYXVsdCwgc2l6ZSBvZiB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYW1vdW50IG9mIG1lbW9yeVxuJiM0MzthbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG4mIzQzO3VzZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBvZiB0aGUgYm9vdCBtZW1vcnkgcmVnaW9ucy4gVGhlIGJvb3QgbWVtb3J5XG4mIzQzO3JlZ2lvbnMgYXJlIGRlY2xhcmVkIGFzIENNQSB3aGVuIHBhZ2UgYWxsb2NhdG9yIGlzIGluaXRpYWxpemVkIHNvIHRoYXQgdGhlaXJcbiYjNDM7bWVtb3J5IGNhbiBiZSB1c2VkIGR1cmluZyBzeXN0ZW0gbGlmZXRpbWUuIENNQSBnaXZlcyB1cyB0aGUgZ3VhcmFudGVlIHRoYXQgbm9cbiYjNDM7aGFuZG92ZXIgcGFnZXMgbGFuZCBpbiB0aGF0IHJlZ2lvbiwgYmVjYXVzZSBoYW5kb3ZlciBwYWdlcyBtdXN0IGJlIGF0IGEgc3RhdGljXG4mIzQzO3BoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiBhbmQgQ01BIGVuZm9yY2VzIHRoYXQgb25seSBtb3ZhYmxlIHBhZ2VzIGNhbiBiZSBsb2NhdGVkXG4mIzQzO2luc2lkZS5cbiYjNDM7XG4mIzQzO0FmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXG4gaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXG4gdXMgdG8gcmVjdXJzaXZlbHkgZXhlY3V0ZSBhbnkgYW1vdW50IG9mIEtITyBrZXhlY3MuIEJlY2F1c2Ugd2UgdXNlZCB0aGlzIHJlZ2lvblxuIGZvciBib290IG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYXMgdGFyZ2V0IG1lbW9yeSBmb3Iga2V4ZWMgYmxvYnMsIHNvbWUgcGFydHNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5pbmRleCAyMjI2N2E4M2UwNjRhLi4yOTAxNTM4MThkMGYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5AQCAtNzY0LDEyICYjNDM7NzY0LDEyIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZTgyMF9lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcbiB9XG4gXG4gLypcbi0gKiBJZiBLSE8gaXMgYWN0aXZlLCBvbmx5IHByb2Nlc3MgaXRzIHNjcmF0Y2ggYXJlYXMgdG8gZW5zdXJlIHdlIGFyZSBub3RcbiYjNDM7ICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBib290bWVtIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90XG4gICogc3RlcHBpbmcgb250byBwcmVzZXJ2ZWQgbWVtb3J5LlxuICAqL1xuIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG4ge1xuLVx0c3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbiYjNDM7XHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuIFx0c3RydWN0IHNldHVwX2RhdGEgKnB0cjtcbiBcdHN0cnVjdCBraG9fZGF0YSAqa2hvO1xuIFx0aW50IGksIG5yX2FyZWFzID0gMDtcbkBAIC03ODEsOCAmIzQzOzc4MSw4IEBAIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG4gXHR3aGlsZSAocHRyKSB7XG4gXHRcdGlmIChwdHItXHUwMDNldHlwZSA9PSBTRVRVUF9LRVhFQ19LSE8pIHtcbiBcdFx0XHRraG8gPSAoc3RydWN0IGtob19kYXRhICopKHVuc2lnbmVkIGxvbmcpcHRyLVx1MDAzZWRhdGE7XG4tXHRcdFx0a2hvX3NjcmF0Y2ggPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWtoby1cdTAwM2VzY3JhdGNoX2FkZHI7XG4tXHRcdFx0bnJfYXJlYXMgPSBraG8tXHUwMDNlc2NyYXRjaF9zaXplIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4mIzQzO1x0XHRcdGtob19ib290bWVtID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylraG8tXHUwMDNlYm9vdG1lbV9hZGRyO1xuJiM0MztcdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2Vib290bWVtX3NpemUgLyBzaXplb2YoKmtob19ib290bWVtKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuQEAgLTc5Myw3ICYjNDM7NzkzLDcgQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYXJlYXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9IFx1MDAyNmtob19zY3JhdGNoW2ldO1xuJiM0MztcdFx0c3RydWN0IGtob19ib290bWVtICphcmVhID0gXHUwMDI2a2hvX2Jvb3RtZW1baV07XG4gXHRcdHN0cnVjdCBtZW1fdmVjdG9yIHJlZ2lvbiA9IHtcbiBcdFx0XHQuc3RhcnQgPSBhcmVhLVx1MDAzZWFkZHIsXG4gXHRcdFx0LnNpemUgPSBhcmVhLVx1MDAzZXNpemUsXG5AQCAtODIyLDcgJiM0Mzs4MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3JhbmRvbV9waHlzX2FkZHIodW5zaWduZWQgbG9uZyBtaW5pbXVtLFxuIFx0fVxuIFxuIFx0Lypcbi1cdCAqIER1cmluZyBrZXhlYyBoYW5kb3ZlciBvbmx5IHByb2Nlc3MgS0hPIHNjcmF0Y2ggYXJlYXMgdGhhdCBhcmUga25vd25cbiYjNDM7XHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duXG4gXHQgKiBub3QgdG8gY29udGFpbiBhbnkgZGF0YSB0aGF0IG11c3QgYmUgcHJlc2VydmVkLlxuIFx0ICovXG4gXHRpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuaW5kZXggMjY3MWM0ZTFiM2EwYi4uNjEwOTBkYjUwNjVjNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc2V0dXBfZGF0YS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuQEAgLTg1LDggJiM0Mzs4NSw4IEBAIHN0cnVjdCBpbWFfc2V0dXBfZGF0YSB7XG4gc3RydWN0IGtob19kYXRhIHtcbiBcdF9fdTY0IGZkdF9hZGRyO1xuIFx0X191NjQgZmR0X3NpemU7XG4tXHRfX3U2NCBzY3JhdGNoX2FkZHI7XG4tXHRfX3U2NCBzY3JhdGNoX3NpemU7XG4mIzQzO1x0X191NjQgYm9vdG1lbV9hZGRyO1xuJiM0MztcdF9fdTY0IGJvb3RtZW1fc2l6ZTtcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuICNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcbmluZGV4IGViNzI1MzdiYzBiMTkuLjJhNmUxOWY5NTI1MTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG5AQCAtMTM2Myw3ICYjNDM7MTM2Myw3IEBAIF9faW5pdCB2b2lkIGU4MjBfX21lbWJsb2NrX3NldHVwKHZvaWQpXG4gXHQgKiBBZnRlciByZWFsIG1vZGUgdHJhbXBvbGluZSBpcyBhbGxvY2F0ZWQsIHdlIGNsZWFyIHRoYXQgc2NyYXRjaFxuIFx0ICogbWFya2luZy5cbiBcdCAqL1xuLVx0bWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgwLCBTWl8xTSk7XG4mIzQzO1x0bWVtYmxvY2tfbWFya19raG9fbm9wcnNydigwLCBTWl8xTSk7XG4gXG4gXHQvKlxuIFx0ICogMzItYml0IHN5c3RlbXMgYXJlIGxpbWl0ZWQgdG8gNEJHIG9mIG1lbW9yeSBldmVuIHdpdGggSElHSE1FTSBhbmRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcbmluZGV4IDdlOTgwZWE0OWQ4ZDYuLjNhYTc3MDA2YWRhYjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuY1xuQEAgLTI4NSwxNCAmIzQzOzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLFxuIFx0c2QtXHUwMDNlbGVuID0gc2l6ZW9mKHN0cnVjdCBraG9fZGF0YSk7XG4gXG4gXHQvKiBPbmx5IGFkZCBpZiB3ZSBoYXZlIGFsbCBLSE8gaW1hZ2VzIGluIHBsYWNlICovXG4tXHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKVxuJiM0MztcdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLmJvb3RtZW0pXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIEFkZCBzZXR1cCBkYXRhICovXG4gXHRraG8tXHUwMDNlZmR0X2FkZHIgPSBpbWFnZS1cdTAwM2VraG8uZmR0O1xuIFx0a2hvLVx1MDAzZWZkdF9zaXplID0gUEFHRV9TSVpFO1xuLVx0a2hvLVx1MDAzZXNjcmF0Y2hfYWRkciA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbTtcbi1cdGtoby1cdTAwM2VzY3JhdGNoX3NpemUgPSBpbWFnZS1cdTAwM2VraG8uc2NyYXRjaC1cdTAwM2VidWZzejtcbiYjNDM7XHRraG8tXHUwMDNlYm9vdG1lbV9hZGRyID0gaW1hZ2UtXHUwMDNla2hvLmJvb3RtZW0tXHUwMDNlbWVtO1xuJiM0MztcdGtoby1cdTAwM2Vib290bWVtX3NpemUgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VidWZzejtcbiBcdHNkLVx1MDAzZW5leHQgPSBwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGE7XG4gXHRwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGEgPSBwYXJhbXNfbG9hZF9hZGRyICYjNDM7IHNldHVwX2RhdGFfb2Zmc2V0O1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG5pbmRleCA1ZWJiNTIxZTEzNmQ3Li5kMTYxOGM0Y2Y3ZmJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG5AQCAtNDcyLDcgJiM0Mzs0NzIsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYWRkX2tobyh1NjQgcGh5c19hZGRyLCB1MzIgZGF0YV9sZW4pXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGtob19wb3B1bGF0ZShraG8tXHUwMDNlZmR0X2FkZHIsIGtoby1cdTAwM2VmZHRfc2l6ZSwga2hvLVx1MDAzZXNjcmF0Y2hfYWRkciwga2hvLVx1MDAzZXNjcmF0Y2hfc2l6ZSk7XG4mIzQzO1x0a2hvX3BvcHVsYXRlKGtoby1cdTAwM2VmZHRfYWRkciwga2hvLVx1MDAzZWZkdF9zaXplLCBraG8tXHUwMDNlYm9vdG1lbV9hZGRyLCBraG8tXHUwMDNlYm9vdG1lbV9zaXplKTtcbiBcbiBcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYyBiL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuaW5kZXggNjk0ZDgwYTVjNjhlMS4uNjUxMTBiMmVlMWExZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jXG5AQCAtNjYsNyAmIzQzOzY2LDcgQEAgdm9pZCBfX2luaXQgcmVzZXJ2ZV9yZWFsX21vZGUodm9pZClcbiBcdCAqL1xuIFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl8xTSk7XG4gXG4tXHRtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaCgwLCBTWl8xTSk7XG4mIzQzO1x0bWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnYoMCwgU1pfMU0pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgc21lX3Nldl9zZXR1cF9yZWFsX21vZGUoc3RydWN0IHRyYW1wb2xpbmVfaGVhZGVyICp0aClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuY1xuaW5kZXggNjEwM2IxYTA4MmQyNC4uOWYwOWIwZDJkYWEwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmNcbkBAIC0xNjUsMTAgJiM0MzsxNjUsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxuIFx0XHRwcl9pbmZvKFwmIzM0O1Byb2Nlc3NpbmcgRUZJIG1lbW9yeSBtYXA6XFxuXCYjMzQ7KTtcbiBcbiBcdC8qXG4tXHQgKiBEaXNjYXJkIG1lbWJsb2NrcyBkaXNjb3ZlcmVkIHNvIGZhciBleGNlcHQgZm9yIEtITyBzY3JhdGNoXG4mIzQzO1x0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gYm9vdG1lbVxuIFx0ICogcmVnaW9ucy4gTW9zdCBtZW1ibG9ja3MgYXQgdGhpcyBwb2ludCBvcmlnaW5hdGUgZnJvbSBtZW1vcnkgbm9kZXNcbiBcdCAqIGluIHRoZSBEVCBhbmQgVUVGSSB1c2VzIGl0cyBvd24gbWVtb3J5IG1hcCBpbnN0ZWFkLiBIb3dldmVyLCBpZlxuLVx0ICogS0hPIGlzIGVuYWJsZWQsIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XG4mIzQzO1x0ICogS0hPIGlzIGVuYWJsZWQsIGJvb3RtZW0gcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XG4gXHQgKiBtdXN0IGJlIHByZXNlcnZlZC5cbiBcdCAqL1xuIFx0bWVtYmxvY2tfZHVtcF9hbGwoKTtcbkBAIC0xNzgsNyAmIzQzOzE3OCw3IEBAIHN0YXRpYyBfX2luaXQgdm9pZCByZXNlcnZlX3JlZ2lvbnModm9pZClcbiBcbiBcdFx0LyogUmVtb3ZlIGFsbCBub24tS0hPIHJlZ2lvbnMgKi9cbiBcdFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XG4tXHRcdFx0aWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkge1xuJiM0MztcdFx0XHRpZiAoIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHIpKSB7XG4gXHRcdFx0XHRtZW1ibG9ja19yZW1vdmUoci1cdTAwM2ViYXNlLCByLVx1MDAzZXNpemUpO1xuIFx0XHRcdFx0ci0tO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2tleGVjLmMgYi9kcml2ZXJzL29mL2tleGVjLmNcbmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL2tleGVjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xuQEAgLTI2MSwyMyAmIzQzOzI2MSwyMyBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZVxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbiBcdHBoeXNfYWRkcl90IGZkdF9tZW0gPSAwO1xuIFx0cGh5c19hZGRyX3QgZmR0X2xlbiA9IDA7XG4tXHRwaHlzX2FkZHJfdCBzY3JhdGNoX21lbSA9IDA7XG4tXHRwaHlzX2FkZHJfdCBzY3JhdGNoX2xlbiA9IDA7XG4mIzQzO1x0cGh5c19hZGRyX3QgYm9vdG1lbV9hcnIgPSAwO1xuJiM0MztcdHBoeXNfYWRkcl90IGJvb3RtZW1fbGVuID0gMDtcbiBcbiBcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwmIzM0O2xpbnV4LGtoby1mZHRcJiMzNDspO1xuIFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1GRFRfRVJSX05PVEZPVU5EKVxuIFx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgXCYjMzQ7bGludXgsa2hvLXNjcmF0Y2hcJiMzNDspO1xuJiM0MztcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwmIzM0O2xpbnV4LGtoby1ib290bWVtXCYjMzQ7KTtcbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gpXG4mIzQzO1x0aWYgKCFpbWFnZS1cdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRmZHRfbWVtID0gaW1hZ2UtXHUwMDNla2hvLmZkdDtcbiBcdGZkdF9sZW4gPSBQQUdFX1NJWkU7XG4tXHRzY3JhdGNoX21lbSA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZW1lbTtcbi1cdHNjcmF0Y2hfbGVuID0gaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlYnVmc3o7XG4mIzQzO1x0Ym9vdG1lbV9hcnIgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VtZW07XG4mIzQzO1x0Ym9vdG1lbV9sZW4gPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VidWZzejtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O0FkZGluZyBraG8gbWV0YWRhdGEgdG8gRFRcJiMzNDspO1xuIFxuQEAgLTI4NSw4ICYjNDM7Mjg1LDggQEAgc3RhdGljIGludCBraG9fYWRkX2Nob3Nlbihjb25zdCBzdHJ1Y3Qga2ltYWdlICppbWFnZSwgdm9pZCAqZmR0LCBpbnQgY2hvc2VuX25vZGVcbiBcdFx0XHRcdCAgICAgICBmZHRfbWVtLCBmZHRfbGVuKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4tXHRyZXQgPSBmZHRfYXBwZW5kcHJvcF9hZGRycmFuZ2UoZmR0LCAwLCBjaG9zZW5fbm9kZSwgXCYjMzQ7bGludXgsa2hvLXNjcmF0Y2hcJiMzNDssXG4tXHRcdFx0XHQgICAgICAgc2NyYXRjaF9tZW0sIHNjcmF0Y2hfbGVuKTtcbiYjNDM7XHRyZXQgPSBmZHRfYXBwZW5kcHJvcF9hZGRycmFuZ2UoZmR0LCAwLCBjaG9zZW5fbm9kZSwgXCYjMzQ7bGludXgsa2hvLWJvb3RtZW1cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb3RtZW1fYXJyLCBib290bWVtX2xlbik7XG4gXG4gI2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDUwODM5ZmI1ZWU4ZWQuLmNmNzNkOWIzNGMzYzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxuQEAgLTQsNyAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbi1zdHJ1Y3Qga2hvX3NjcmF0Y2gge1xuJiM0MztzdHJ1Y3Qga2hvX2Jvb3RtZW0ge1xuIFx0cGh5c19hZGRyX3QgYWRkcjtcbiBcdHBoeXNfYWRkcl90IHNpemU7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWMuaFxuQEAgLTQxOCw3ICYjNDM7NDE4LDcgQEAgc3RydWN0IGtpbWFnZSB7XG4gI2VuZGlmXG4gXG4gXHRzdHJ1Y3Qge1xuLVx0XHRzdHJ1Y3Qga2V4ZWNfc2VnbWVudCAqc2NyYXRjaDtcbiYjNDM7XHRcdHN0cnVjdCBrZXhlY19zZWdtZW50ICpib290bWVtO1xuIFx0XHRwaHlzX2FkZHJfdCBmZHQ7XG4gXHR9IGtobztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDQ2ZGU4NmRjMzQzZTkuLmVmMmIxODhjOGVkMDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuQEAgLTM2LDE1ICYjNDM7MzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpO1xuIFxuLXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxuLVx0XHQgIHU2NCBzY3JhdGNoX2xlbik7XG4mIzQzO3ZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3QgYm9vdG1lbV9waHlzLFxuJiM0MztcdFx0ICB1NjQgYm9vdG1lbV9sZW4pO1xuIFxuLWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2Jvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4gXG4tc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuJiM0MztzdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdFx0XHRcdFx0ICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpXG4ge1xuLVx0aWYgKGtob19zY3JhdGNoX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSlcbiYjNDM7XHRpZiAoa2hvX2Jvb3RtZW1fb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKVxuIFx0XHRyZXR1cm4gTUlHUkFURV9DTUE7XG4gXHRyZXR1cm4gbXQ7XG4gfVxuQEAgLTEyMywxNiAmIzQzOzEyMywxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4tXHRcdFx0XHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcbiYjNDM7XHRcdFx0XHRwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbilcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHRcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxuIHtcbiBcdHJldHVybiBtdDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjE4NmI5NjVjZmM4OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTQ2LDExICYjNDM7NDYsMTEgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuO1xuICAqIEBNRU1CTE9DS19SU1JWX0tFUk46IG1lbW9yeSByZWdpb24gdGhhdCBpcyByZXNlcnZlZCBmb3Iga2VybmVsIHVzZSxcbiAgKiBlaXRoZXIgZXhwbGljdGl0bHkgd2l0aCBtZW1ibG9ja19yZXNlcnZlX2tlcm4oKSBvciB2aWEgbWVtYmxvY2tcbiAgKiBhbGxvY2F0aW9uIEFQSXMuIEFsbCBtZW1ibG9jayBhbGxvY2F0aW9ucyBzZXQgdGhpcyBmbGFnLlxuLSAqIEBNRU1CTE9DS19LSE9fU0NSQVRDSDogbWVtb3J5IHJlZ2lvbiB0aGF0IGtleGVjIGNhbiBwYXNzIHRvIHRoZSBuZXh0XG4tICoga2VybmVsIGluIGhhbmRvdmVyIG1vZGUuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGxcbi0gKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzXG4tICoga2VybmVsIHRoYXQgd2Uga25vdyBpcyBnb29kIHRvIHVzZS4gSXQgaXMgdGhlIG9ubHkgbWVtb3J5IHRoYXRcbi0gKiBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20gaW4gdGhpcyBwaGFzZS5cbiYjNDM7ICogQE1FTUJMT0NLX0tIT19OT1BSU1JWOiBtZW1vcnkgcmVnaW9uIHdpdGggbm8gcHJlc2VydmF0aW9uIGZyb20ga2V4ZWNcbiYjNDM7ICogaGFuZG92ZXIuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGwgbWVtb3J5IHByZXNlcnZhdGlvbnNcbiYjNDM7ICogeWV0LCBzbyB3ZSBnZXQgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgdGhhdCB3ZVxuJiM0MzsgKiBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdCBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb21cbiYjNDM7ICogaW4gdGhpcyBwaGFzZS5cbiAgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcbiAgKi9cbiBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbkBAIC02MSw3ICYjNDM7NjEsNyBAQCBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbiBcdE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEID0gMHg4LFx0LyogYWx3YXlzIGRldGVjdGVkIHZpYSBhIGRyaXZlciAqL1xuIFx0TUVNQkxPQ0tfUlNSVl9OT0lOSVRcdD0gMHgxMCxcdC8qIGRvbiYjMzk7dCBpbml0aWFsaXplIHN0cnVjdCBwYWdlcyAqL1xuIFx0TUVNQkxPQ0tfUlNSVl9LRVJOXHQ9IDB4MjAsXHQvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGtlcm5lbCB1c2UgKi9cbi1cdE1FTUJMT0NLX0tIT19TQ1JBVENIXHQ9IDB4NDAsXHQvKiBzY3JhdGNoIG1lbW9yeSBmb3Iga2V4ZWMgaGFuZG92ZXIgKi9cbiYjNDM7XHRNRU1CTE9DS19LSE9fTk9QUlNSVlx0PSAweDQwLFx0LyogbWVtb3J5IHdpdGggbm8gS0hPIHByZXNlcnZhdGlvbnMgKi9cbiBcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlx0PSAweDgwLCAvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXMgKi9cbiB9O1xuIFxuQEAgLTE1OCw4ICYjNDM7MTU4LDggQEAgaW50IG1lbWJsb2NrX21hcmtfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gaW50IG1lbWJsb2NrX2NsZWFyX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGludCBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBpbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuLWludCBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuLWludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiYjNDM7aW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4mIzQzO2ludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBcbiB2b2lkIG1lbWJsb2NrX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKTtcbkBAIC0zMDEsOSAmIzQzOzMwMSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19kcml2ZXJfbWFuYWdlZChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuIFx0cmV0dXJuIG0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2goc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqbSlcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXG4ge1xuLVx0cmV0dXJuIG0tXHUwMDNlZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuJiM0MztcdHJldHVybiBtLVx1MDAzZWZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiB9XG4gXG4gaW50IG1lbWJsb2NrX3NlYXJjaF9wZm5fbmlkKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXG5AQCAtNjE0LDEyICYjNDM7NjE0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9tZW10ZXN0KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW10ZXN0X3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkgeyB9XG4gI2VuZGlmXG4gXG4tI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSFxuLXZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZCk7XG4tdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpO1xuJiM0MzsjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG4mIzQzO3ZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCk7XG4mIzQzO3ZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKTtcbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNldl9vbmx5KHZvaWQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKSB7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX01FTUJMT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnIGIva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ1xuaW5kZXggYzEzYWYzOGJhMjNhYi4uZjUwZGFlZThlZmYwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbkBAIC01LDcgJiM0Mzs1LDYgQEAgbWVudSBcJiMzNDtMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcJiMzNDtcbiBjb25maWcgS0VYRUNfSEFORE9WRVJcbiBcdGJvb2wgXCYjMzQ7a2V4ZWMgaGFuZG92ZXJcJiMzNDtcbiBcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUiBcdTAwMjZcdTAwMjYgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXG4tXHRzZWxlY3QgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbiBcdHNlbGVjdCBLRVhFQ19GSUxFXG4gXHRzZWxlY3QgTElCRkRUXG4gXHRzZWxlY3QgQ01BXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IGZlNmYyYWM3ZTQ1ODMuLmRhOGQ1ZWNiOTE1YjUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5AQCAtNDEsMTIgJiM0Mzs0MSwxMiBAQFxuIC8qXG4gICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cbiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3Ncbi0gKiBhdCB0aGUgbmVpZ2hib3JpbmcgcGFnZXMgKHVwIHRvIE1BWF9QQUdFX09SREVSKSB0byBtZXJnZSB0aGVtLlxuLSAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxuLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4mIzQzOyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uIElmIEtITyBib290bWVtXG4mIzQzOyAqIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFnZXMsXG4mIzQzOyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxuICAqL1xuLSNkZWZpbmUgU0NSQVRDSF9BTElHTk1FTlRfQllURVMgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylcbi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFx1MDAzZT0gQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MzsjZGVmaW5lIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpXG4mIzQzO3N0YXRpY19hc3NlcnQoQk9PVE1FTV9BTElHTk1FTlRfQllURVMgXHUwMDNlPSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4gXG4gLyogVGhlIG1hZ2ljIHRva2VuIGZvciBwcmVzZXJ2ZWQgcGFnZXMgKi9cbiAjZGVmaW5lIEtIT19QQUdFX01BR0lDIDB4NGI0ODRmNTBVIC8qIEFTQ0lJIGZvciAmIzM5O0tIT1AmIzM5OyAqL1xuQEAgLTk2LDcgJiM0Mzs5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xuIFxuIHN0cnVjdCBraG9faW4ge1xuIFx0cGh5c19hZGRyX3QgZmR0X3BoeXM7XG4tXHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXM7XG4mIzQzO1x0cGh5c19hZGRyX3QgYm9vdG1lbV9waHlzO1xuIFx0Y2hhciBwcmV2aW91c19yZWxlYXNlW19fTkVXX1VUU19MRU4gJiM0MzsgMV07XG4gXHR1MzIga2V4ZWNfY291bnQ7XG4gXHRzdHJ1Y3Qga2hvX2RlYnVnZnMgZGJnO1xuQEAgLTY1NiwzNCAmIzQzOzY1NiwzNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgKmtob19nZXRfbWVtX21hcChjb25zdCB2b2lkICpmZHQpXG4gXG4gLypcbiAgKiBXaXRoIEtITyBlbmFibGVkLCBtZW1vcnkgY2FuIGJlY29tZSBmcmFnbWVudGVkIGJlY2F1c2UgS0hPIHJlZ2lvbnMgbWF5XG4tICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIHNjcmF0Y2ggcmVnaW9ucyBnaXZlIHVzIGFcbiYjNDM7ICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIGJvb3RtZW0gcmVnaW9ucyBnaXZlIHVzIGFcbiAgKiBzYWZlIHpvbmVzIHRoYXQgd2Ugd2lsbCBuZXZlciBzZWUgS0hPIGFsbG9jYXRpb25zIGZyb20uIFRoaXMgaXMgd2hlcmUgd2Vcbi0gKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIHNjcmF0Y2hcbiYjNDM7ICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBib290bWVtXG4gICogYXJlYSBmb3IgZWFybHkgYWxsb2NhdGlvbnMgdGhhdCBoYXBwZW4gYmVmb3JlIHBhZ2UgYWxsb2NhdG9yIGlzXG4gICogaW5pdGlhbGl6ZWQuXG4gICovXG4tc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbi11bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xuJiM0MztzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuJiM0Mzt1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuIC8qXG4tICogVGhlIHNjcmF0Y2ggYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXG4mIzQzOyAqIFRoZSBib290bWVtIGFyZWFzIGFyZSBzY2FsZWQgYnkgZGVmYXVsdCBhcyBwZXJjZW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbVxuICAqIG1lbWJsb2NrLiBBIHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBzY2FsZSB3aXRoIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXI6XG4gICpcbi0gKiBraG9fc2NyYXRjaD1OJVxuJiM0MzsgKiBraG9fYm9vdG1lbT1OJVxuICAqXG4gICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIGZvciBhIGxvd21lbSwgYSBnbG9iYWwgYW5kXG4tICogcGVyLW5vZGUgc2NyYXRjaCBhcmVhczpcbiYjNDM7ICogcGVyLW5vZGUgYm9vdG1lbSBhcmVhczpcbiAgKlxuLSAqIGtob19zY3JhdGNoPWxbS01HXSxuW0tNR10sbVtLTUddXG4mIzQzOyAqIGtob19ib290bWVtPWxbS01HXSxuW0tNR10sbVtLTUddXG4gICpcbiAgKiBUaGUgZXhwbGljaXQgc2l6ZSBkZWZpbml0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzY2FsZSBkZWZpbml0aW9uLlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2NyYXRjaF9zY2FsZSBfX2luaXRkYXRhID0gMjAwO1xuLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XG4tc3RhdGljIHBoeXNfYWRkcl90IHNjcmF0Y2hfc2l6ZV9wZXJub2RlIF9faW5pdGRhdGE7XG4tc3RhdGljIHBoeXNfYWRkcl90IHNjcmF0Y2hfc2l6ZV9sb3dtZW0gX19pbml0ZGF0YTtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBib290bWVtX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7XG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfcGVybm9kZSBfX2luaXRkYXRhO1xuJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgYm9vdG1lbV9zaXplX2xvd21lbSBfX2luaXRkYXRhO1xuIFxuLXN0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9zY3JhdGNoX3NpemUoY2hhciAqcClcbiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZShjaGFyICpwKVxuIHtcbiBcdHNpemVfdCBsZW47XG4gXHR1bnNpZ25lZCBsb25nIHNpemVzWzNdO1xuQEAgLTcwNyw5ICYjNDM7NzA3LDkgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRtZW1jcHkoc19zY2FsZSwgcCwgbGVuIC0gMSk7XG4tXHRcdHJldCA9IGtzdHJ0b3VpbnQoc19zY2FsZSwgMTAsIFx1MDAyNnNjcmF0Y2hfc2NhbGUpO1xuJiM0MztcdFx0cmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgXHUwMDI2Ym9vdG1lbV9zY2FsZSk7XG4gXHRcdGlmICghcmV0KVxuLVx0XHRcdHByX25vdGljZShcJiMzNDtzY3JhdGNoIHNjYWxlIGlzICVkJSVcXG5cJiMzNDssIHNjcmF0Y2hfc2NhbGUpO1xuJiM0MztcdFx0XHRwcl9ub3RpY2UoXCYjMzQ7Ym9vdG1lbSBzY2FsZSBpcyAlZCUlXFxuXCYjMzQ7LCBib290bWVtX3NjYWxlKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC03MzcsODEgJiM0Mzs3MzcsODEgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxuIFx0aWYgKCpwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplc1swXTtcbi1cdHNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSBzaXplc1sxXTtcbi1cdHNjcmF0Y2hfc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07XG4tXHRzY3JhdGNoX3NjYWxlID0gMDtcbiYjNDM7XHRib290bWVtX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XG4mIzQzO1x0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHNpemVzWzFdO1xuJiM0MztcdGJvb3RtZW1fc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07XG4mIzQzO1x0Ym9vdG1lbV9zY2FsZSA9IDA7XG4gXG4tXHRwcl9ub3RpY2UoXCYjMzQ7c2NyYXRjaCBhcmVhczogbG93bWVtOiAlbGx1TWlCIGdsb2JhbDogJWxsdU1pQiBwZXJub2RlOiAlbGxkTWlCXFxuXCYjMzQ7LFxuLVx0XHQgICh1NjQpKHNjcmF0Y2hfc2l6ZV9sb3dtZW0gXHUwMDNlXHUwMDNlIDIwKSxcbi1cdFx0ICAodTY0KShzY3JhdGNoX3NpemVfZ2xvYmFsIFx1MDAzZVx1MDAzZSAyMCksXG4tXHRcdCAgKHU2NCkoc2NyYXRjaF9zaXplX3Blcm5vZGUgXHUwMDNlXHUwMDNlIDIwKSk7XG4mIzQzO1x0cHJfbm90aWNlKFwmIzM0O2Jvb3RtZW0gYXJlYXM6IGxvd21lbTogJWxsdU1pQiBnbG9iYWw6ICVsbHVNaUIgcGVybm9kZTogJWxsZE1pQlxcblwmIzM0OyxcbiYjNDM7XHRcdCAgKHU2NCkoYm9vdG1lbV9zaXplX2xvd21lbSBcdTAwM2VcdTAwM2UgMjApLFxuJiM0MztcdFx0ICAodTY0KShib290bWVtX3NpemVfZ2xvYmFsIFx1MDAzZVx1MDAzZSAyMCksXG4mIzQzO1x0XHQgICh1NjQpKGJvb3RtZW1fc2l6ZV9wZXJub2RlIFx1MDAzZVx1MDAzZSAyMCkpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLWVhcmx5X3BhcmFtKFwmIzM0O2tob19zY3JhdGNoXCYjMzQ7LCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKTtcbiYjNDM7ZWFybHlfcGFyYW0oXCYjMzQ7a2hvX2Jvb3RtZW1cJiMzNDssIGtob19wYXJzZV9ib290bWVtX3NpemUpO1xuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCBzY3JhdGNoX3NpemVfdXBkYXRlKHZvaWQpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBib290bWVtX3NpemVfdXBkYXRlKHZvaWQpXG4ge1xuIFx0LypcbiBcdCAqIElmIGZpeGVkIHNpemVzIGFyZSBub3QgcHJvdmlkZWQgdmlhIGNvbW1hbmQgbGluZSwgY2FsY3VsYXRlIHRoZW0gbm93LlxuIFx0ICogUmVtb3ZlIEh1Z2VUTEIgYWxsb2NhdGlvbnMgZnJvbSBpdCBiZWNhdXNlIHRoZXkgbmV2ZXIgZ2V0IGFsbG9jYXRlZFxuLVx0ICogZnJvbSBzY3JhdGNoLlxuJiM0MztcdCAqIGZyb20gYm9vdG1lbS5cbiBcdCAqL1xuLVx0aWYgKHNjcmF0Y2hfc2NhbGUpIHtcbiYjNDM7XHRpZiAoYm9vdG1lbV9zY2FsZSkge1xuIFx0XHRwaHlzX2FkZHJfdCBzaXplO1xuIFxuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQsXG4gXHRcdFx0XHRcdFx0ICAgTlVNQV9OT19OT0RFKTtcbiBcdFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoQVJDSF9MT1dfQUREUkVTU19MSU1JVCxcbiBcdFx0XHRcdFx0XHQgICAgICAgTlVNQV9OT19OT0RFKTtcbi1cdFx0c2l6ZSA9IHNpemUgKiBzY3JhdGNoX3NjYWxlIC8gMTAwO1xuLVx0XHRzY3JhdGNoX3NpemVfbG93bWVtID0gc2l6ZTtcbiYjNDM7XHRcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDtcbiYjNDM7XHRcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSBzaXplO1xuIFxuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgIE5VTUFfTk9fTk9ERSk7XG4gXHRcdHNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgICAgICBOVU1BX05PX05PREUpO1xuLVx0XHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDAgLSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0XHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZTtcbiYjNDM7XHRcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMCAtIGJvb3RtZW1fc2l6ZV9sb3dtZW07XG4mIzQzO1x0XHRib290bWVtX3NpemVfZ2xvYmFsID0gc2l6ZTtcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiYjNDM7XHQgKiBib290bWVtIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiBcdCAqIHNpemUuXG4gXHQgKi9cbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSByb3VuZF91cChib290bWVtX3NpemVfbG93bWVtLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKGJvb3RtZW1fc2l6ZV9nbG9iYWwsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGJvb3RtZW1fc2l6ZV9ub2RlKGludCBuaWQpXG4ge1xuIFx0cGh5c19hZGRyX3Qgc2l6ZTtcbiBcbi1cdGlmIChzY3JhdGNoX3NjYWxlKSB7XG4mIzQzO1x0aWYgKGJvb3RtZW1fc2NhbGUpIHtcbiBcdFx0c2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSxcbiBcdFx0XHRcdFx0XHQgICBuaWQpO1xuIFx0XHQvKiBEbyBub3QgY291bnQgSHVnZVRMQiBwYWdlcy4gKi9cbiBcdFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUsXG4gXHRcdFx0XHRcdFx0ICAgICAgIG5pZCk7XG4tXHRcdHNpemUgPSBzaXplICogc2NyYXRjaF9zY2FsZSAvIDEwMDtcbiYjNDM7XHRcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDtcbiBcdH0gZWxzZSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfcGVybm9kZTtcbiYjNDM7XHRcdHNpemUgPSBib290bWVtX3NpemVfcGVybm9kZTtcbiBcdH1cbiBcbi1cdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0cmV0dXJuIHJvdW5kX3VwKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4tYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuJiM0Mztib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuLVx0cGh5c19hZGRyX3Qgc2NyYXRjaF9zdGFydCwgc2NyYXRjaF9lbmQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgYm9vdG1lbV9zdGFydCwgYm9vdG1lbV9lbmQ7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XG4tXHRcdHNjcmF0Y2hfZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciAmIzQzOyBraG9fc2NyYXRjaFtpXS5zaXplO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJvb3RtZW1fc3RhcnQgPSBraG9fYm9vdG1lbVtpXS5hZGRyO1xuJiM0MztcdFx0Ym9vdG1lbV9lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICYjNDM7IGtob19ib290bWVtW2ldLnNpemU7XG4gXG4tXHRcdGlmIChwaHlzIFx1MDAzYyBzY3JhdGNoX2VuZCBcdTAwMjZcdTAwMjYgKHBoeXMgJiM0Mzsgc2l6ZSkgXHUwMDNlIHNjcmF0Y2hfc3RhcnQpXG4mIzQzO1x0XHRpZiAocGh5cyBcdTAwM2MgYm9vdG1lbV9lbmQgXHUwMDI2XHUwMDI2IChwaHlzICYjNDM7IHNpemUpIFx1MDAzZSBib290bWVtX3N0YXJ0KVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTgxOSw3ICYjNDM7ODE5LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuIH1cbiBcbiAvKipcbi0gKiBraG9fcmVzZXJ2ZV9zY3JhdGNoIC0gUmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IGZvciBrZXhlY1xuJiM0MzsgKiBraG9fcmVzZXJ2ZV9ib290bWVtIC0gUmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IGZvciBrZXhlY1xuICAqXG4gICogV2l0aCBLSE8gd2UgY2FuIHByZXNlcnZlIGFyYml0cmFyeSBwYWdlcyBpbiB0aGUgc3lzdGVtLiBUbyBlbnN1cmUgd2Ugc3RpbGxcbiAgKiBoYXZlIGEgbGFyZ2UgY29udGlndW91cyByZWdpb24gb2YgbWVtb3J5IHdoZW4gd2Ugc2VhcmNoIHRoZSBwaHlzaWNhbCBhZGRyZXNzXG5AQCAtODI3LDcgJiM0Mzs4MjcsNyBAQCBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4gICogYWN0aXZlLiBUaGlzIENNQSByZWdpb24gd2lsbCBvbmx5IGJlIHVzZWQgZm9yIG1vdmFibGUgcGFnZXMgd2hpY2ggYXJlIG5vdCBhXG4gICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfYm9vdG1lbSh2b2lkKVxuIHtcbiBcdHBoeXNfYWRkcl90IGFkZHIsIHNpemU7XG4gXHRpbnQgbmlkLCBpID0gMDtcbkBAIC04MzUsNzMgJiM0Mzs4MzUsNzMgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdGlmICgha2hvX2VuYWJsZSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2NyYXRjaF9zaXplX3VwZGF0ZSgpO1xuJiM0MztcdGJvb3RtZW1fc2l6ZV91cGRhdGUoKTtcbiBcbiBcdC8qIEZJWE1FOiBkZWFsIHdpdGggbm9kZSBob3QtcGx1Zy9yZW1vdmUgKi9cbi1cdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICYjNDM7IDI7XG4tXHRzaXplID0ga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4tXHRraG9fc2NyYXRjaCA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XG4tXHRpZiAoIWtob19zY3JhdGNoKSB7XG4tXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFycmF5XFxuXCYjMzQ7KTtcbiYjNDM7XHRraG9fYm9vdG1lbV9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyO1xuJiM0MztcdHNpemUgPSBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKTtcbiYjNDM7XHRraG9fYm9vdG1lbSA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XG4mIzQzO1x0aWYgKCFraG9fYm9vdG1lbSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGJvb3RtZW0gYXJyYXlcXG5cJiMzNDspO1xuIFx0XHRnb3RvIGVycl9kaXNhYmxlX2tobztcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiByZXNlcnZlIHNjcmF0Y2ggYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlXG4mIzQzO1x0ICogcmVzZXJ2ZSBib290bWVtIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIFx0ICogbmV4dCBrZXJuZWxcbiBcdCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbiYjNDM7XHRzaXplID0gYm9vdG1lbV9zaXplX2xvd21lbTtcbiYjNDM7XHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywgMCxcbiBcdFx0XHRcdFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xuIFx0aWYgKCFhZGRyKSB7XG4tXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXG5cJiMzNDspO1xuLVx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfZGVzYztcbiYjNDM7XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2Jvb3RtZW1fZGVzYztcbiBcdH1cbiBcbi1cdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuLVx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4mIzQzO1x0a2hvX2Jvb3RtZW1baV0uYWRkciA9IGFkZHI7XG4mIzQzO1x0a2hvX2Jvb3RtZW1baV0uc2l6ZSA9IHNpemU7XG4gXHRpJiM0MzsmIzQzOztcbiBcbiBcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0c2l6ZSA9IGJvb3RtZW1fc2l6ZV9nbG9iYWw7XG4mIzQzO1x0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpO1xuIFx0aWYgKCFhZGRyKSB7XG4tXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgc2NyYXRjaCBidWZmZXJcXG5cJiMzNDspO1xuLVx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIGJvb3RtZW1cXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9ib290bWVtX2FyZWFzO1xuIFx0fVxuIFxuLVx0a2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7XG4tXHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcbiYjNDM7XHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcbiYjNDM7XHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcbiBcdGkmIzQzOyYjNDM7O1xuIFxuIFx0LypcbiBcdCAqIExvb3Agb3ZlciBub2RlcyB0aGF0IGhhdmUgYm90aCBtZW1vcnkgYW5kIGFyZSBvbmxpbmUuIFNraXBcbi1cdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbiYjNDM7XHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIGJvb3RtZW0gYXJlYXMgdGhlcmUuXG4gXHQgKi9cbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuLVx0XHRzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcbi1cdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiYjNDM7XHRcdHNpemUgPSBib290bWVtX3NpemVfbm9kZShuaWQpO1xuJiM0MztcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuLVx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgc2NyYXRjaCBidWZmZXJcXG5cJiMzNDssIG5pZCk7XG4tXHRcdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgbmlkICVkIGJvb3RtZW1cXG5cJiMzNDssIG5pZCk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcbiBcdFx0fVxuIFxuLVx0XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbi1cdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcbiYjNDM7XHRcdGtob19ib290bWVtW2ldLnNpemUgPSBzaXplO1xuIFx0XHRpJiM0MzsmIzQzOztcbiBcdH1cbiBcbiBcdHJldHVybjtcbiBcbi1lcnJfZnJlZV9zY3JhdGNoX2FyZWFzOlxuJiM0MztlcnJfZnJlZV9ib290bWVtX2FyZWFzOlxuIFx0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pXG4tXHRcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fc2NyYXRjaFtpXS5hZGRyLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcbi1lcnJfZnJlZV9zY3JhdGNoX2Rlc2M6XG4tXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XG4mIzQzO1x0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX2Jvb3RtZW1baV0uYWRkciwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XG4mIzQzO2Vycl9mcmVlX2Jvb3RtZW1fZGVzYzpcbiYjNDM7XHRtZW1ibG9ja19mcmVlKGtob19ib290bWVtLCBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKSk7XG4gZXJyX2Rpc2FibGVfa2hvOlxuLVx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFyZWEsIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBib290bWVtLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXG5cJiMzNDspO1xuIFx0a2hvX2VuYWJsZSA9IGZhbHNlO1xuIH1cbiBcbkBAIC05MTEsMTEgJiM0Mzs5MTEsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiAgKiBvbiBzbWFsbGVyIHN5c3RlbXMuIFRoZSBhbGdvcml0aG0gaXRzZWxmIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHZhbHVlLFxuICAqIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgZGlmZmVyZW50IGhldXJpc3RpYyBsYXRlciBpZiBuZWVkZWQuXG4gICovXG4tI2RlZmluZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRVx0XHRTWl8xR1xuLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUXHRjb25zdF9pbG9nMihLSE9fU0NSQVRDSF9FWFRfQkxLU0laRSlcbiYjNDM7I2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0laRVx0XHRTWl8xR1xuJiM0MzsjZGVmaW5lIEtIT19ESVNDT1ZFUl9CTEtTSElGVFx0Y29uc3RfaWxvZzIoS0hPX0RJU0NPVkVSX0JMS1NJWkUpXG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gKi9cbi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcbiBcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XG5AQCAtOTMwLDU0ICYjNDM7OTMwLDU3IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19leHRfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuIFx0ZW5kID0gc3RhcnQgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKG9yZGVyICYjNDM7IFBBR0VfU0hJRlQpKTtcbiBcbiBcdHdoaWxlIChzdGFydCBcdTAwM2MgZW5kKSB7XG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCBcdTAwM2VcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbiYjNDM7XHRcdGVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCBcdTAwM2VcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRzdGFydCAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbiYjNDM7XHRcdHN0YXJ0ICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBLSE9fRElTQ09WRVJfQkxLU0hJRlQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXG4tc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSlcbiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX3dhbGtfbm9kZShwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqYnVzeV9ibG9ja3MgPSBkYXRhO1xuIFxuLVx0cmV0dXJuIGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBwaHlzIFx1MDAzZVx1MDAzZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQpO1xuJiM0MztcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcdTAwM2VcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiB9XG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgYnVzeSBibG9jayByYWRpeCB0cmVlLiAqL1xuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuJiM0MztzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfbWFya19ub3Byc3J2KHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuIHtcbiBcdHBoeXNfYWRkcl90ICpwcmV2X2VuZCA9IGRhdGE7XG4tXHRwaHlzX2FkZHJfdCBzdGFydCA9IGtleSBcdTAwM2NcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUO1xuJiM0MztcdHBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5IFx1MDAzY1x1MDAzYyBLSE9fRElTQ09WRVJfQkxLU0hJRlQ7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKHN0YXJ0IFx1MDAzZSAqcHJldl9lbmQpIHtcbi1cdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgqcHJldl9lbmQsIHN0YXJ0IC0gKnByZXZfZW5kKTtcbiYjNDM7XHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdCpwcmV2X2VuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7XG4mIzQzO1x0KnByZXZfZW5kID0gc3RhcnQgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuLSAqIGtob19leHRlbmRfc2NyYXRjaCAtIEV4dGVuZCB0aGUgc2NyYXRjaCByZWdpb25zXG4mIzQzOyAqIGtob19kaXNjb3Zlcl9ub3Byc3J2IC0gRGlzY292ZXIgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9uc1xuJiM0MzsgKlxuJiM0MzsgKiBEaXNjb3ZlcnMgbWVtb3J5IHJhbmdlcyB3aXRoIG5vIHByZXNlcnZlZCBtZW1vcnkgYW5kIG1hcmtzIGl0IGFzIE5PUFJTUlYuXG4mIzQzOyAqIFRoaXMgbGV0cyBtZW1ibG9jayBhbGxvY2F0ZSBtZW1vcnkgZnJvbSBhcmVhcyBvdXRzaWRlIEtITyBib290bWVtLlxuICAqXG4gICogVGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUgbWl4ZXMgYm90aCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlclxuICAqIGludG8gYSBzaW5nbGUga2V5LiBUaGlzIG1ha2VzIGl0IGhhcmQgdG8gbG9vayBmb3IgZnJlZSByYW5nZXMgZGlyZWN0bHkuIFRoaXNcbiAgKiBmdW5jdGlvbiBmaXJzdCB3YWxrcyB0aGUgcmFkaXggdHJlZSBhbmQgZGlnZXN0cyBpdCBkb3duIGludG8gYW5vdGhlciByYWRpeFxuLSAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkUgd2hpY2hcbi0gKiBjb250YWluIHByZXNlcnZlZCBtZW1vcnkuXG4mIzQzOyAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX0RJU0NPVkVSX0JMS1NJWkUgd2hpY2ggY29udGFpblxuJiM0MzsgKiBwcmVzZXJ2ZWQgbWVtb3J5LlxuICAqXG4gICogVGhlbiBpdCB3YWxrcyB0aGUgZGlnZXN0ZWQgcmFkaXggdHJlZSBhbmQgbWFya3MgZXZlcnl0aGluZyB0aGF0IGRvZXNuJiMzOTt0IGhhdmVcbi0gKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIHNjcmF0Y2guXG4mIzQzOyAqIHByZXNlcnZlZCBtZW1vcnkgYXMgTk9QUlNSVi5cbiAgKlxuLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gc2NyYXRjaCBoYXNcbiYjNDM7ICogTk9URTogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBib290bWVtIGhhc1xuICAqIGF2YWlsYWJsZSBzcGFjZS5cbiAgKlxuICAqIE5PVEU6IFRoZSBwYWdlcyBvZiB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZSB0YWJsZXMgYXJlIG5vdCBtYXJrZWRcbkBAIC05ODYsMTggJiM0Mzs5ODksMTggQEAgc3RhdGljIGludCBfX2luaXQga2hvX2V4dF9tYXJrX3NjcmF0Y2godW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4gICogdGhlbSB0byBiZSBcJiMzNDtwcmVzZXJ2ZWQgbWVtb3J5XCYjMzQ7IGFuZCBtYXJrcyB0aGVpciBibG9ja3MgYXMgYnVzeS5cbiAgKlxuICAqIE5PVEU6IGVmaV9pbml0KCk6OnJlc2VydmVfcmVnaW9ucygpIHJlbW92ZXMgYWxsIHJlZ2lvbnMgZXhjZXB0XG4tICogTUVNQkxPQ0tfS0hPX1NDUkFUQ0guIFRoaXMgZnVuY3Rpb24gYWRkcyBzdWNoIHJlZ2lvbnMgYnV0IHRoZXkgYXJlIG5vdCBLSE9cbi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxuJiM0MzsgKiBNRU1CTE9DS19LSE9fTk9QUlNSVi4gVGhpcyBmdW5jdGlvbiBhZGRzIHN1Y2ggcmVnaW9ucyBidXQgdGhleSBhcmUgbm90IEtIT1xuJiM0MzsgKiBib290IG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxuICAqIGNhbGxlZCBhZnRlciByZXNlcnZlX3JlZ2lvbnMoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2V4dGVuZF9zY3JhdGNoKHZvaWQpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7XG4tXHRcdC5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsXG4tXHRcdC5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsXG4mIzQzO1x0XHQubGVhZiA9IGtob19kaXNjb3Zlcl93YWxrX2xlYWYsXG4mIzQzO1x0XHQubm9kZSA9IGtob19kaXNjb3Zlcl93YWxrX25vZGUsXG4gXHR9O1xuIFx0Y29uc3Qgc3RydWN0IGtob19yYWRpeF93YWxrX2NiIGV4dF9jYiA9IHtcbi1cdFx0LmxlYWYgPSBraG9fZXh0X21hcmtfc2NyYXRjaCxcbiYjNDM7XHRcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX21hcmtfbm9wcnNydixcbiBcdH07XG4gXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1c3lfcmFkaXhfY2xhc3M7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgYnVzeV9ibG9ja3M7XG5AQCAtMTAyMiwyMSAmIzQzOzEwMjUsMjEgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBzY3JhdGNoLiAqL1xuJiM0MztcdC8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIG5vcHJzcnYuICovXG4gXHRlcnIgPSBraG9fcmFkaXhfd2Fsa190cmVlKFx1MDAyNmJ1c3lfYmxvY2tzLCBcdTAwMjZleHRfY2IsIFx1MDAyNnByZXZfZW5kKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogTWFyayBldmVyeXRoaW5nIGZyb20gbGFzdCBidXN5IGJsb2NrIHRvIGVuZCBvZiBEUkFNLiAqL1xuIFx0aWYgKHByZXZfZW5kIFx1MDAzYyBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpKVxuLVx0XHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHByZXZfZW5kLCBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gcHJldl9lbmQpO1xuJiM0MztcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTtcbiBcbiBcdC8qIGZhbGx0aHJvdWdoICovXG4gb3V0OlxuIFx0a2hvX3JhZGl4X2Rlc3Ryb3lfdHJlZShcdTAwMjZidXN5X2Jsb2Nrcyk7XG4gcHJpbnQ6XG4gXHRpZiAoZXJyKVxuLVx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGV4dGVuZCBzY3JhdGNoOiAlcGVcXG5cJiMzNDssIEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGRpc2NvdmVyIGV4dHJhIGFsbG9jYXRhYmxlIG1lbW9yeTogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKGVycikpO1xuIH1cbiBcbiAvKipcbkBAIC0xMTUwLDcgJiM0MzsxMTUzLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Y29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4mIzQzO1x0ICAgIFdBUk5fT04oa2hvX2Jvb3RtZW1fb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkodHJlZSwga2hvX2VuY29kZV9yYWRpeF9rZXkoUEZOX1BIWVMocGZuKSxcbkBAIC0xMjI4LDcgJiM0MzsxMjMxLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuJiM0MztcdCAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKSB7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE4MjUsNyAmIzQzOzE4MjgsNyBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFxuIFx0ZXJyID0ga2hvX3JhZGl4X2luaXRfdHJlZSh0cmVlLCBOVUxMKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaDtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbTtcbiBcbiBcdGtob19vdXQuZmR0ID0ga2hvX2FsbG9jX3ByZXNlcnZlKFBBR0VfU0laRSk7XG4gXHRpZiAoSVNfRVJSKGtob19vdXQuZmR0KSkge1xuQEAgLTE4NTQsOSAmIzQzOzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fc2NyYXRjaFtpXS5hZGRyKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IGtob19zY3JhdGNoW2ldLnNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fYm9vdG1lbVtpXS5hZGRyKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fYm9vdG1lbVtpXS5zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHR1bnNpZ25lZCBsb25nIHBmbjtcbiBcbiBcdFx0LypcbkBAIC0xODY0LDEwICYjNDM7MTg2NywxMCBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFx0XHQgKiBjb3JyZXNwb25kaW5nIFBSRVNFTlQgYml0IGluIHRoZSBrZXJuZWwgcGFnZSB0YWJsZS5cbiBcdFx0ICogU3Vic2VxdWVudCBrbWVtbGVhayBzY2FucyBvZiB0aGVzZSBwYWdlcyBjYXVzZSB0aGVcbiBcdFx0ICogbm9uLVBSRVNFTlQgcGFnZSBmYXVsdHMuXG4tXHRcdCAqIE1hcmsgc2NyYXRjaCBhcmVhcyB3aXRoIGttZW1sZWFrX2lnbm9yZV9waHlzKCkgdG8gZXhjbHVkZVxuJiM0MztcdFx0ICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlXG4gXHRcdCAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy5cbiBcdFx0ICovXG4tXHRcdGttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpO1xuJiM0MztcdFx0a21lbWxlYWtfaWdub3JlX3BoeXMoa2hvX2Jvb3RtZW1baV0uYWRkcik7XG4gXHRcdGZvciAocGZuID0gYmFzZV9wZm47IHBmbiBcdTAwM2MgYmFzZV9wZm4gJiM0MzsgY291bnQ7XG4gXHRcdCAgICAgcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpXG4gXHRcdFx0aW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHBmbl90b19wYWdlKHBmbikpO1xuQEAgLTE4ODMsMTEgJiM0MzsxODg2LDExIEBAIHN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpXG4gXHRraG9fdW5wcmVzZXJ2ZV9mcmVlKGtob19vdXQuZmR0KTtcbiBlcnJfZnJlZV9raG9fcmFkaXhfdHJlZTpcbiBcdGtob19yYWRpeF9kZXN0cm95X3RyZWUodHJlZSk7XG4tZXJyX2ZyZWVfc2NyYXRjaDpcbiYjNDM7ZXJyX2ZyZWVfYm9vdG1lbTpcbiBcdGtob19vdXQuZmR0ID0gTlVMTDtcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHZvaWQgKnN0YXJ0ID0gX192YShraG9fc2NyYXRjaFtpXS5hZGRyKTtcbi1cdFx0dm9pZCAqZW5kID0gc3RhcnQgJiM0Mzsga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpO1xuJiM0MztcdFx0dm9pZCAqZW5kID0gc3RhcnQgJiM0Mzsga2hvX2Jvb3RtZW1baV0uc2l6ZTtcbiBcbiBcdFx0ZnJlZV9yZXNlcnZlZF9hcmVhKHN0YXJ0LCBlbmQsIC0xLCBcJiMzNDtcJiMzNDspO1xuIFx0fVxuQEAgLTE5MDYsNyAmIzQzOzE5MDksNyBAQCB2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZClcbiBcbiBcdC8qXG4gXHQgKiBraG9fZ2V0X21lbV9tYXAoKSBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuIElmIGl0IGZhaWxzLCBraG9fcG9wdWxhdGUoKVxuLVx0ICogY2F0Y2hlcyB0aGF0IGFuZCBuZXZlciBzZXRzIGtob19pbi5zY3JhdGNoX3BoeXMsIHdoaWNoIHN0b3BzIG1lbW9yeVxuJiM0MztcdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uYm9vdG1lbV9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcbiBcdCAqIHJldHJpZXZhbC5cbiBcdCAqL1xuIFx0bWVtX21hcCA9IGtob19nZXRfbWVtX21hcChmZHQpO1xuQEAgLTE5MTQsNDEgJiM0MzsxOTE3LDQwIEBAIHZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qXG4tXHQgKiBraG9fc2NyYXRjaF9vdmVybGFwKCkgbmVlZHMga2hvX3NjcmF0Y2ggdG8gYmUgaW5pdGlhbGl6ZWQuIEl0XG4tXHQgKiBpcyB1c2VkIGJ5IGZyZWVfYXJlYV9pbml0KCkgb24gS0hPIGJvb3RzLCBzbyBpbml0aWFsaXplIGl0XG4tXHQgKiBlYXJseS5cbiYjNDM7XHQgKiBraG9fYm9vdG1lbV9vdmVybGFwKCkgbmVlZHMga2hvX2Jvb3RtZW0gdG8gYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIHVzZWRcbiYjNDM7XHQgKiBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdCBlYXJseS5cbiBcdCAqL1xuLVx0a2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7XG4mIzQzO1x0a2hvX2Jvb3RtZW0gPSBwaHlzX3RvX3ZpcnQoa2hvX2luLmJvb3RtZW1fcGh5cyk7XG4gXG4gXHRpZiAoa2hvX3JhZGl4X2luaXRfdHJlZShcdTAwMjZraG9faW4ucmFkaXhfdHJlZSwgbWVtX21hcCkpXG4gXHRcdGdvdG8gZXJyO1xuIFxuLVx0a2hvX2V4dGVuZF9zY3JhdGNoKCk7XG4mIzQzO1x0a2hvX2Rpc2NvdmVyX25vcHJzcnYoKTtcbiBcbiBcdHJldHVybjtcbiBcbiBlcnI6XG4gXHQvKlxuIFx0ICogRmFpbGVkIHRvIGluaXRpYWxpemUgcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlLiBDbGVhciBGRFRcbi1cdCAqIGFuZCBzY3JhdGNoIHNvIEtITyB1c2VycyBkb24mIzM5O3QgdHJlYXQgaXQgYXMgYSBLSE8gYm9vdC5cbiYjNDM7XHQgKiBhbmQgYm9vdG1lbSBzbyBLSE8gdXNlcnMgZG9uJiMzOTt0IHRyZWF0IGl0IGFzIGEgS0hPIGJvb3QuXG4gXHQgKi9cbiBcdGtob19pbi5mZHRfcGh5cyA9IDA7XG4tXHRraG9faW4uc2NyYXRjaF9waHlzID0gMDtcbiYjNDM7XHRraG9faW4uYm9vdG1lbV9waHlzID0gMDtcbiB9XG4gXG4gdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXG4ge1xuLVx0aWYgKGtob19pbi5zY3JhdGNoX3BoeXMpXG4mIzQzO1x0aWYgKGtob19pbi5ib290bWVtX3BoeXMpXG4gXHRcdGtob19tZW1fcmV0cmlldmUoKTtcbiBcdGVsc2Vcbi1cdFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xuJiM0MztcdFx0a2hvX3Jlc2VydmVfYm9vdG1lbSgpO1xuIH1cbiBcbiB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxuLVx0XHRcdCBwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcbiYjNDM7XHRcdFx0IHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywgdTY0IGJvb3RtZW1fbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4tXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xuJiM0MztcdHVuc2lnbmVkIGludCBib290bWVtX2NudCA9IGJvb3RtZW1fbGVuIC8gc2l6ZW9mKCpraG9fYm9vdG1lbSk7XG4mIzQzO1x0c3RydWN0IGtob19ib290bWVtICpib290bWVtID0gTlVMTDtcbiBcdHBoeXNfYWRkcl90IG1lbV9tYXBfcGh5cztcbiBcdHZvaWQgKmZkdCA9IE5VTEw7XG4gXHRib29sIHBvcHVsYXRlZCA9IGZhbHNlO1xuQEAgLTE5NzcsNTIgJiM0MzsxOTc5LDUyIEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4gXHRpZiAoIW1lbV9tYXBfcGh5cylcbiBcdFx0Z290byB1bm1hcF9mZHQ7XG4gXG4tXHRzY3JhdGNoID0gZWFybHlfbWVtcmVtYXAoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4tXHRpZiAoIXNjcmF0Y2gpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtzZXR1cDogZmFpbGVkIHRvIG1lbXJlbWFwIHNjcmF0Y2ggKHBoeXM9MHglbGx4LCBsZW49JWxsZClcXG5cJiMzNDssXG4tXHRcdFx0c2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4mIzQzO1x0Ym9vdG1lbSA9IGVhcmx5X21lbXJlbWFwKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuJiM0MztcdGlmICghYm9vdG1lbSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtzZXR1cDogZmFpbGVkIHRvIG1lbXJlbWFwIGJvb3RtZW0gKHBoeXM9MHglbGx4LCBsZW49JWxsZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuIFx0XHRnb3RvIHVubWFwX2ZkdDtcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBXZSBwYXNzIGEgc2FmZSBjb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgdG8gdXNlIGZvciBlYXJseSBib290XG4tXHQgKiBwdXJwb3JzZXMgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsIHNvIHRoYXQgd2UgY2FuIHJlc2l6ZSB0aGVcbi1cdCAqIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cbiYjNDM7XHQgKiBXZSBwYXNzIGEgc2FmZSBjb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zIHRvXG4mIzQzO1x0ICogdXNlIGZvciBlYXJseSBib290IHB1cnBvcnNlcyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgc28gdGhhdCB3ZSBjYW5cbiYjNDM7XHQgKiByZXNpemUgdGhlIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cbiBcdCAqL1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmFyZWEgPSBcdTAwMjZzY3JhdGNoW2ldO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBraG9fYm9vdG1lbSAqYXJlYSA9IFx1MDAyNmJvb3RtZW1baV07XG4gXHRcdHU2NCBzaXplID0gYXJlYS1cdTAwM2VzaXplO1xuIFxuIFx0XHRtZW1ibG9ja19hZGQoYXJlYS1cdTAwM2VhZGRyLCBzaXplKTtcbi1cdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xuJiM0MztcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcJiMzNDtmYWlsZWQgdG8gbWFyayB0aGUgc2NyYXRjaCByZWdpb24gMHglcGEmIzQzOzB4JXBhOiAlcGVcJiMzNDssXG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIG1hcmsgdGhlIGJvb3RtZW0gcmVnaW9uIDB4JXBhJiM0MzsweCVwYTogJXBlXCYjMzQ7LFxuIFx0XHRcdFx0XHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplLCBFUlJfUFRSKGVycikpO1xuLVx0XHRcdGdvdG8gdW5tYXBfc2NyYXRjaDtcbiYjNDM7XHRcdFx0Z290byB1bm1hcF9ib290bWVtO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgc2NyYXRjaFwmIzM0OywgXHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplKTtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgYm9vdG1lbVwmIzM0OywgXHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplKTtcbiBcdH1cbiBcbi1cdG1lbWJsb2NrX3Jlc2VydmUoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4mIzQzO1x0bWVtYmxvY2tfcmVzZXJ2ZShib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcbiBcbiBcdC8qXG4tXHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGEgdmlhYmxlIHJlZ2lvbiBvZiBzY3JhdGNoIG1lbW9yeSwgbGV0JiMzOTtzIHRlbGxcbiYjNDM7XHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGEgdmlhYmxlIHJlZ2lvbiBvZiBib290IG1lbW9yeSwgbGV0JiMzOTtzIHRlbGxcbiBcdCAqIHRoZSBtZW1ibG9ja3MgYWxsb2NhdG9yIHRvIG9ubHkgdXNlIHRoYXQgZm9yIGFueSBhbGxvY2F0aW9ucy5cbiBcdCAqIFRoYXQgd2F5IHdlIGVuc3VyZSB0aGF0IG5vdGhpbmcgc2NyaWJibGVzIG92ZXIgaW4gdXNlIGRhdGEgd2hpbGVcbiBcdCAqIHdlIGluaXRpYWxpemUgdGhlIHBhZ2UgdGFibGVzIHdoaWNoIHdlIHdpbGwgbmVlZCB0byBpbmdlc3QgYWxsXG4gXHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC5cbiBcdCAqL1xuLVx0bWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkoKTtcbiYjNDM7XHRtZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSgpO1xuIFxuIFx0a2hvX2luLmZkdF9waHlzID0gZmR0X3BoeXM7XG4tXHRraG9faW4uc2NyYXRjaF9waHlzID0gc2NyYXRjaF9waHlzO1xuLVx0a2hvX3NjcmF0Y2hfY250ID0gc2NyYXRjaF9jbnQ7XG4mIzQzO1x0a2hvX2luLmJvb3RtZW1fcGh5cyA9IGJvb3RtZW1fcGh5cztcbiYjNDM7XHRraG9fYm9vdG1lbV9jbnQgPSBib290bWVtX2NudDtcbiBcbiBcdHBvcHVsYXRlZCA9IHRydWU7XG4gXHRwcl9pbmZvKFwmIzM0O2ZvdW5kIGtleGVjIGhhbmRvdmVyIGRhdGEuXFxuXCYjMzQ7KTtcbiBcbi11bm1hcF9zY3JhdGNoOlxuLVx0ZWFybHlfbWVtdW5tYXAoc2NyYXRjaCwgc2NyYXRjaF9sZW4pO1xuJiM0Mzt1bm1hcF9ib290bWVtOlxuJiM0MztcdGVhcmx5X21lbXVubWFwKGJvb3RtZW0sIGJvb3RtZW1fbGVuKTtcbiB1bm1hcF9mZHQ6XG4gXHRlYXJseV9tZW11bm1hcChmZHQsIGZkdF9sZW4pO1xuIHJlcG9ydDpcbkBAIC0yMDM0LDQ3ICYjNDM7MjAzNiw0NyBAQCB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxuIFxuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4ge1xuLVx0c3NpemVfdCBzY3JhdGNoX3NpemU7XG4mIzQzO1x0c3NpemVfdCBib290bWVtX3NpemU7XG4gXHRpbnQgZXJyID0gMDtcbi1cdHN0cnVjdCBrZXhlY19idWYgc2NyYXRjaDtcbiYjNDM7XHRzdHJ1Y3Qga2V4ZWNfYnVmIGJvb3RtZW07XG4gXG4gXHRpZiAoIWtob19lbmFibGUgfHwgaW1hZ2UtXHUwMDNldHlwZSA9PSBLRVhFQ19UWVBFX0NSQVNIKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGltYWdlLVx1MDAzZWtoby5mZHQgPSB2aXJ0X3RvX3BoeXMoa2hvX291dC5mZHQpO1xuIFxuLVx0c2NyYXRjaF9zaXplID0gc2l6ZW9mKCpraG9fc2NyYXRjaCkgKiBraG9fc2NyYXRjaF9jbnQ7XG4tXHRzY3JhdGNoID0gKHN0cnVjdCBrZXhlY19idWYpe1xuJiM0MztcdGJvb3RtZW1fc2l6ZSA9IHNpemVvZigqa2hvX2Jvb3RtZW0pICoga2hvX2Jvb3RtZW1fY250O1xuJiM0MztcdGJvb3RtZW0gPSAoc3RydWN0IGtleGVjX2J1Zil7XG4gXHRcdC5pbWFnZSA9IGltYWdlLFxuLVx0XHQuYnVmZmVyID0ga2hvX3NjcmF0Y2gsXG4tXHRcdC5idWZzeiA9IHNjcmF0Y2hfc2l6ZSxcbiYjNDM7XHRcdC5idWZmZXIgPSBraG9fYm9vdG1lbSxcbiYjNDM7XHRcdC5idWZzeiA9IGJvb3RtZW1fc2l6ZSxcbiBcdFx0Lm1lbSA9IEtFWEVDX0JVRl9NRU1fVU5LTk9XTixcbi1cdFx0Lm1lbXN6ID0gc2NyYXRjaF9zaXplLFxuJiM0MztcdFx0Lm1lbXN6ID0gYm9vdG1lbV9zaXplLFxuIFx0XHQuYnVmX2FsaWduID0gU1pfNjRLLCAvKiBNYWtlcyBpdCBlYXNpZXIgdG8gbWFwICovXG4gXHRcdC5idWZfbWF4ID0gVUxPTkdfTUFYLFxuIFx0XHQudG9wX2Rvd24gPSB0cnVlLFxuIFx0fTtcbi1cdGVyciA9IGtleGVjX2FkZF9idWZmZXIoXHUwMDI2c2NyYXRjaCk7XG4mIzQzO1x0ZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcihcdTAwMjZib290bWVtKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHRpbWFnZS1cdTAwM2VraG8uc2NyYXRjaCA9IFx1MDAyNmltYWdlLVx1MDAzZXNlZ21lbnRbaW1hZ2UtXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcbiYjNDM7XHRpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSA9IFx1MDAyNmltYWdlLVx1MDAzZXNlZ21lbnRbaW1hZ2UtXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiYjNDM7c3RhdGljIGludCBraG9fd2Fsa19ib290bWVtKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4gXHRcdFx0ICAgIGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xuLVx0XHRcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXG4tXHRcdFx0LmVuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgJiM0Mzsga2hvX3NjcmF0Y2hbaV0uc2l6ZSAtIDEsXG4mIzQzO1x0XHRcdC5zdGFydCA9IGtob19ib290bWVtW2ldLmFkZHIsXG4mIzQzO1x0XHRcdC5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICYjNDM7IGtob19ib290bWVtW2ldLnNpemUgLSAxLFxuIFx0XHR9O1xuIFxuLVx0XHQvKiBUcnkgdG8gZml0IHRoZSBraW1hZ2UgaW50byBvdXIgS0hPIHNjcmF0Y2ggcmVnaW9uICovXG4mIzQzO1x0XHQvKiBUcnkgdG8gZml0IHRoZSBraW1hZ2UgaW50byBvdXIgS0hPIGJvb3RtZW0gcmVnaW9uICovXG4gXHRcdHJldCA9IGZ1bmMoXHUwMDI2cmVzLCBrYnVmKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbkBAIC0yMDkxLDcgJiM0MzsyMDkzLDcgQEAgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdGlmICgha2hvX2VuYWJsZSB8fCBrYnVmLVx1MDAzZWltYWdlLVx1MDAzZXR5cGUgPT0gS0VYRUNfVFlQRV9DUkFTSClcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRyZXQgPSBraG9fd2Fsa19zY3JhdGNoKGtidWYsIGZ1bmMpO1xuJiM0MztcdHJldCA9IGtob193YWxrX2Jvb3RtZW0oa2J1ZiwgZnVuYyk7XG4gXG4gXHRyZXR1cm4gcmV0ID09IDEgPyAwIDogLUVBRERSTk9UQVZBSUw7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuY1xuaW5kZXggMjU3ZWU4YTUyYmU2Ni4uN2Q3NDQ3N2RhMGI3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXG5AQCAtNzcsMjMgJiM0Mzs3NywyMyBAQCB2b2lkIGtob19kZWJ1Z2ZzX2Jsb2JfcmVtb3ZlKHN0cnVjdCBraG9fZGVidWdmcyAqZGJnLCB2b2lkICpibG9iKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IHNjcmF0Y2hfcGh5c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjNDM7c3RhdGljIGludCBib290bWVtX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspXG4tXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7LCBraG9fc2NyYXRjaFtpXS5hZGRyKTtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7LCBraG9fYm9vdG1lbVtpXS5hZGRyKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbi1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9waHlzKTtcbiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGJvb3RtZW1fcGh5cyk7XG4gXG4tc3RhdGljIGludCBzY3JhdGNoX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjNDM7c3RhdGljIGludCBib290bWVtX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOylcbi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVsbHhcXG5cJiMzNDssIGtob19zY3JhdGNoW2ldLnNpemUpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsweCVsbHhcXG5cJiMzNDssIGtob19ib290bWVtW2ldLnNpemUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLURFRklORV9TSE9XX0FUVFJJQlVURShzY3JhdGNoX2xlbik7XG4mIzQzO0RFRklORV9TSE9XX0FUVFJJQlVURShib290bWVtX2xlbik7XG4gXG4gX19pbml0IHZvaWQga2hvX2luX2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZywgY29uc3Qgdm9pZCAqZmR0KVxuIHtcbkBAIC0xODYsMTMgJiM0MzsxODYsMTMgQEAgX19pbml0IGludCBraG9fb3V0X2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZylcbiBcdGlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbi1cdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NjcmF0Y2hfcGh5c1wmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdFx0XHUwMDI2c2NyYXRjaF9waHlzX2ZvcHMpO1xuJiM0MztcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2Jvb3RtZW1fcGh5c1wmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx1MDAyNmJvb3RtZW1fcGh5c19mb3BzKTtcbiBcdGlmIChJU19FUlIoZikpXG4gXHRcdGdvdG8gZXJyX3JtZGlyO1xuIFxuLVx0ZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2NyYXRjaF9sZW5cJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbi1cdFx0XHRcdFx1MDAyNnNjcmF0Y2hfbGVuX2ZvcHMpO1xuJiM0MztcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2Jvb3RtZW1fbGVuXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHUwMDI2Ym9vdG1lbV9sZW5fZm9wcyk7XG4gXHRpZiAoSVNfRVJSKGYpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFxuaW5kZXggODA1ZDJhNzZjMzg4MS4uZTk2ODVlMWVmNmQ3OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbkBAIC0xOSw4ICYjNDM7MTksOCBAQCBzdHJ1Y3Qga2hvX2RlYnVnZnMge1xuIHN0cnVjdCBraG9fZGVidWdmcyB7fTtcbiAjZW5kaWZcbiBcbi1leHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbi1leHRlcm4gdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBraG9fYm9vdG1lbSAqa2hvX2Jvb3RtZW07XG4mIzQzO2V4dGVybiB1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xuIGludCBraG9fZGVidWdmc19pbml0KHZvaWQpO1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li41NDE1ZTBiMzhiNWQ1IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZ1xuQEAgLTQ4NSwxMCAmIzQzOzQ4NSw2IEBAIGNvbmZpZyBIQVZFX0dVUF9GQVNUXG4gXHRkZXBlbmRzIG9uIE1NVVxuIFx0Ym9vbFxuIFxuLSMgRW5hYmxlIG1lbWJsb2NrIHN1cHBvcnQgZm9yIHNjcmF0Y2ggbWVtb3J5IHdoaWNoIGlzIG5lZWRlZCBmb3Iga2V4ZWMgaGFuZG92ZXJcbi1jb25maWcgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbi1cdGJvb2xcbi1cbiAjIERvbiYjMzk7dCBkaXNjYXJkIGFsbG9jYXRlZCBtZW1vcnkgdXNlZCB0byB0cmFjayBcJiMzNDttZW1vcnlcJiMzNDsgYW5kIFwmIzM0O3Jlc2VydmVkXCYjMzQ7IG1lbWJsb2Nrc1xuICMgYWZ0ZXIgZWFybHkgYm9vdCwgc28gaXQgY2FuIHN0aWxsIGJlIHVzZWQgdG8gdGVzdCBmb3IgdmFsaWRpdHkgb2YgbWVtb3J5LlxuICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCAzN2UwNmU3MGMxZDAwLi4wMzUxOTEzY2U3OWIwIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTExMiwxMSAmIzQzOzExMiwxMSBAQCB1bnNpZ25lZCBsb25nIG1pbl9sb3dfcGZuO1xuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjtcbiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcbiBcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXG4tLyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19TQ1JBVENIIHJhbmdlcyAqL1xuLXN0YXRpYyBib29sIGtob19zY3JhdGNoX29ubHk7XG4mIzQzOyNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbiYjNDM7LyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19OT1BSU1JWIHJhbmdlcyAqL1xuJiM0MztzdGF0aWMgYm9vbCBraG9fbm9wcnNydl9vbmx5O1xuICNlbHNlXG4tI2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXG4mIzQzOyNkZWZpbmUga2hvX25vcHJzcnZfb25seSBmYWxzZVxuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIG1lbWJsb2NrX21lbW9yeV9pbml0X3JlZ2lvbnNbSU5JVF9NRU1CTE9DS19NRU1PUllfUkVHSU9OU10gX19pbml0ZGF0YV9tZW1ibG9jaztcbkBAIC0xNzgsOSAmIzQzOzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZClcbiBcbiBzdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXG4ge1xuLVx0Lyogc2tpcCBub24tc2NyYXRjaCBtZW1vcnkgZm9yIGtobyBlYXJseSBib290IGFsbG9jYXRpb25zICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb25seSlcbi1cdFx0cmV0dXJuIE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuJiM0MztcdC8qIG9ubHkgdXNlIEtIT19OT1BSU1JWIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cbiYjNDM7XHRpZiAoa2hvX25vcHJzcnZfb25seSlcbiYjNDM7XHRcdHJldHVybiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiBcbiBcdHJldHVybiBzeXN0ZW1faGFzX3NvbWVfbWlycm9yID8gTUVNQkxPQ0tfTUlSUk9SIDogTUVNQkxPQ0tfTk9ORTtcbiB9XG5AQCAtMTE3NCwzMyAmIzQzOzExNzQsMzMgQEAgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2lcbiB9XG4gXG4gLyoqXG4tICogbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19TQ1JBVENILlxuJiM0MzsgKiBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2IC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX05PUFJTUlYuXG4gICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cbiAgKlxuLSAqIE9ubHkgbWVtb3J5IHJlZ2lvbnMgbWFya2VkIHdpdGggJU1FTUJMT0NLX0tIT19TQ1JBVENIIHdpbGwgYmUgY29uc2lkZXJlZFxuJiM0MzsgKiBPbmx5IG1lbW9yeSByZWdpb25zIG1hcmtlZCB3aXRoICVNRU1CTE9DS19LSE9fTk9QUlNSViB3aWxsIGJlIGNvbnNpZGVyZWRcbiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7X19pbml0IGludCBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4ge1xuIFx0cmV0dXJuIG1lbWJsb2NrX3NldGNscl9mbGFnKFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwgMSxcbi1cdFx0XHRcdCAgICBNRU1CTE9DS19LSE9fU0NSQVRDSCk7XG4mIzQzO1x0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19OT1BSU1JWKTtcbiB9XG4gXG4gLyoqXG4tICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXG4mIzQzOyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYVxuICAqIHNwZWNpZmllZCByZWdpb24uXG4gICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4mIzQzO19faW5pdCBpbnQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gbWVtYmxvY2tfc2V0Y2xyX2ZsYWcoXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAwLFxuLVx0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19TQ1JBVENIKTtcbiYjNDM7XHRcdFx0XHQgICAgTUVNQkxPQ0tfS0hPX05PUFJTUlYpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBzaG91bGRfc2tpcF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG5AQCAtMTIzNiw5ICYjNDM7MTIzNiw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcbiBcdC8qXG4gXHQgKiBJbiBlYXJseSBhbGxvYyBkdXJpbmcga2V4ZWMgaGFuZG92ZXIsIHdlIGNhbiBvbmx5IGNvbnNpZGVyXG4tXHQgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcbiYjNDM7XHQgKiBNRU1CTE9DS19LSE9fTk9QUlNSViByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcbiBcdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpIFx1MDAyNlx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpXG4mIzQzO1x0aWYgKChmbGFncyBcdTAwMjYgTUVNQkxPQ0tfS0hPX05PUFJTUlYpIFx1MDAyNlx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX25vcHJzcnYobSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuQEAgLTE3OTMsNyAmIzQzOzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4gXHRpZiAobnVtYV92YWxpZF9ub2RlKG5pZCkgXHUwMDI2XHUwMDI2ICFleGFjdF9uaWQpIHtcbiBcdFx0bmlkID0gTlVNQV9OT19OT0RFO1xuIFx0XHQvKlxuLVx0XHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIHNjcmF0Y2gsIGl0IHdvdWxkXG4mIzQzO1x0XHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIGJvb3RtZW0sIGl0IHdvdWxkXG4gXHRcdCAqIHVwZGF0ZSBzdGFydCBvciBlbmQuIE5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgb3BlbmluZyB0byBhbGxcbiBcdFx0ICogbm9kZXMsIHJlc2V0IHRoZW0uXG4gXHRcdCAqL1xuQEAgLTE4MDksMTIgJiM0MzsxODA5LDEyIEBAIHZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcbiBmb3VuZDpcbiBcdC8qXG4gXHQgKiBIdWdlVExCIHBhZ2VzIGNhbiBiZSBwcmVzZXJ2ZWQgd2l0aCBLSE8gYW5kIG5vIHByZXNlcnZlZCBtZW1vcnkgY2FuXG4tXHQgKiBiZSBpbiBzY3JhdGNoLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggc2NyYXRjaC5cbiYjNDM7XHQgKiBiZSBpbiBib290bWVtLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggYm9vdG1lbS5cbiBcdCAqXG4tXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJiMzOTt0IHRha2UgdG9vXG4mIzQzO1x0ICogQm9vdG1lbSBhcmVhcyBhcmUgbm9ybWFsbHkgbm90IHZlcnkgbGFyZ2UsIHNvIHRoaXMgc2hvdWxkbiYjMzk7dCB0YWtlIHRvb1xuIFx0ICogbWFueSByZXRyaWVzLlxuIFx0ICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChhZGRyLCBzaXplKSkge1xuJiM0MztcdGlmIChraG9fYm9vdG1lbV9vdmVybGFwKGFkZHIsIHNpemUpKSB7XG4gXHRcdGlmIChtZW1ibG9ja19ib3R0b21fdXAoKSlcbiBcdFx0XHRzdGFydCA9IGFkZHIgJiM0Mzsgc2l6ZTtcbiBcdFx0ZWxzZVxuQEAgLTI0OTksNyAmIzQzOzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKVxuIFx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG4gXHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xuIFxuLVx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xuJiM0MztcdG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkoKTtcbiBcdHBhZ2VzID0gZnJlZV9sb3dfbWVtb3J5X2NvcmVfZWFybHkoKTtcbiBcdHRvdGFscmFtX3BhZ2VzX2FkZChwYWdlcyk7XG4gfVxuQEAgLTI1OTcsMTUgJiM0MzsyNTk3LDE1IEBAIGludCByZXNlcnZlX21lbV9yZWxlYXNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSlcbiBcdHJldHVybiAxO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXG4tX19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZClcbiYjNDM7I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuJiM0MztfX2luaXQgdm9pZCBtZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSh2b2lkKVxuIHtcbi1cdGtob19zY3JhdGNoX29ubHkgPSB0cnVlO1xuJiM0MztcdGtob19ub3Byc3J2X29ubHkgPSB0cnVlO1xuIH1cbiBcbi1fX2luaXQgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXG4mIzQzO19faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkodm9pZClcbiB7XG4tXHRraG9fc2NyYXRjaF9vbmx5ID0gZmFsc2U7XG4mIzQzO1x0a2hvX25vcHJzcnZfb25seSA9IGZhbHNlO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0yODYxLDcgJiM0MzsyODYxLDcgQEAgc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9tZW0oY2hhciAqcClcbiBcdGlmIChyZXNlcnZlX21lbV9raG9fcmV2aXZlKG5hbWUsIHNpemUsIGFsaWduKSlcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHQvKiBUT0RPOiBBbGxvY2F0aW9uIG11c3QgYmUgb3V0c2lkZSBvZiBzY3JhdGNoIHJlZ2lvbiAqL1xuJiM0MztcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqL1xuIFx0c3RhcnQgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIGFsaWduKTtcbiBcdGlmICghc3RhcnQpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O3Jlc2VydmVfbWVtOiBtZW1ibG9jayBhbGxvY2F0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG5AQCAtMjg4Niw3ICYjNDM7Mjg4Niw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbiBcdFtpbG9nMihNRU1CTE9DS19EUklWRVJfTUFOQUdFRCldID0gXCYjMzQ7RFJWX01OR1wmIzM0OyxcbiBcdFtpbG9nMihNRU1CTE9DS19SU1JWX05PSU5JVCldID0gXCYjMzQ7UlNWX05JVFwmIzM0OyxcbiBcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFwmIzM0O1JTVl9LRVJOXCYjMzQ7LFxuLVx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcJiMzNDtLSE9fU0NSQVRDSFwmIzM0OyxcbiYjNDM7XHRbaWxvZzIoTUVNQkxPQ0tfS0hPX05PUFJTUlYpXSA9IFwmIzM0O0tIT19OT1BSU1JWXCYjMzQ7LFxuIH07XG4gXG4gc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDc4ZDYzNzg5YTk2OTAuLmQwMzE1NmJlMGUxMDQgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTY4MSw3ICYjNDM7NjgxLDcgQEAgc3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBwZm4gJiM0MzsgbnJfcGFnZXM7XG4gXG4gXHRmb3IgKHBmbiA9IHBhZ2VibG9ja19hbGlnbihwZm4pOyBwZm4gXHUwMDNjIGVuZDsgcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbi1cdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuJiM0MztcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19ib290bWVtX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuIFxuIFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuIFx0XHRpZiAoIWF0b21pYyBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbkBAIC03NjQsNyAmIzQzOzc2NCw3IEBAIHN0YXRpYyB2b2lkIF9fbWVtaW5pdCBfX2luaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcbiBcdGlmIChwYWdlYmxvY2tfYWxpZ25lZChwZm4pKSB7XG4gXHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPVxuLVx0XHRcdGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgTUlHUkFURV9NT1ZBQkxFKTtcbiYjNDM7XHRcdFx0a2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xuIFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuIFx0fVxuIH1cbkBAIC05MjQsNyAmIzQzOzkyNCw3IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXG4gXHRcdCAqIG92ZXIgdGhlIHBsYWNlIGR1cmluZyBzeXN0ZW0gYm9vdC5cbiBcdFx0ICovXG4gXHRcdGlmIChwYWdlYmxvY2tfYWxpZ25lZChwZm4pKSB7XG4tXHRcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuJiM0MztcdFx0XHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XG4gXG4gXHRcdFx0aW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgbXQsIGlzb2xhdGVfcGFnZWJsb2NrKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcbmluZGV4IGU4NmJiOTAwMGIyMmYuLjQ2YzVhMTU2ZmNlNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaFxuQEAgLTY2LDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXG4gXG4gI2RlZmluZSBfX1NldFBhZ2VSZXNlcnZlZChwKVx0KCh2b2lkKShwKSlcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVuYW1lcyB0aGUgJiMzOTtzY3JhdGNoJiMzOTsgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJiMzOTtib290bWVtJiMzOTsgYW5kICYjMzk7bm9wcnNydiYjMzk7LiBJdCByZW5hbWVzIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLCBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLCBkZWJ1Z2ZzIGZpbGVzLCBzdHJ1Y3QgbmFtZXMsIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBhbmQgYSBLY29uZmlnIG9wdGlvbiwgYnV0IGRvZXMgbm90IGFsdGVyIGFueSBleGVjdXRpb24gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODViZjU3NjZlZGNmY2ZkNTMyN2U0ZmNkOWVjYjc0Njg0ZDRlNDI3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDE2OjQ5OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiNTQ5M2E3ZjhmMjI4Li5hMDM5MjdmZmI4NWQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjk4OSwxMSAmIzQzOzI5ODksMTIgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCSYjMzQ7MCYjMzQ7IHwgJiMzNDtvZmYmIzM0OyB8ICYjMzQ7biYjMzQ7IC0ga2V4ZWMgaGFuZG92ZXIgaXMgZGlzYWJsZWQKIAkJCSYjMzQ7MSYjMzQ7IHwgJiMzNDtvbiYjMzQ7IHwgJiMzNDt5JiMzNDsgLSBrZXhlYyBoYW5kb3ZlciBpcyBlbmFibGVkCiAKLQlraG9fc2NyYXRjaD0JW0tFWEVDLEVBUkxZXQomIzQzOwlraG9fYm9vdG1lbT0JW0tFWEVDLEVBUkxZXQogCQkJRm9ybWF0OiBsbFtLTUddLG1tW0tNR10sbm5bS01HXSB8IG5uJQotCQkJRGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgS0hPIHNjcmF0Y2ggcmVnaW9uLiBUaGUgS0hPCi0JCQlzY3JhdGNoIHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkKLQkJCXJhbmdlcyB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgZm9yIG5vbi1rZXJuZWwKJiM0MzsKJiM0MzsJCQlEZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBLSE8gYm9vdCBtZW1vcnkgcmVnaW9uLiBUaGUKJiM0MzsJCQlLSE8gYm9vdCBtZW1vcnkgcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzCiYjNDM7CQkJbWVtb3J5IHJhbmdlcyB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgZm9yIG5vbi1rZXJuZWwKIAkJCWFsbG9jYXRpb25zLiBUaGF0IHdheSwgZXZlbiB3aGVuIG1lbW9yeSBpcyBoZWF2aWx5CiAJCQlmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZAogCQkJa2VybmVsIHdpbGwgYWx3YXlzIGhhdmUgZW5vdWdoIGNvbnRpZ3VvdXMgcmFuZ2VzIHRvCkBAIC0zMDAyLDEwICYjNDM7MzAwMywxMCBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgZXhhY3QgYW1vdW50IG9mCiAJCQltZW1vcnkgaW4gdGhlIGZvcm0gb2YgJiMzNDtsbFtLTUddLG1tW0tNR10sbm5bS01HXSYjMzQ7CiAJCQl3aGVyZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGRlZmluZXMgdGhlIHNpemUgb2YgYSBsb3cKLQkJCW1lbW9yeSBzY3JhdGNoIGFyZWEsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRlZmluZXMKLQkJCXRoZSBzaXplIG9mIGEgZ2xvYmFsIHNjcmF0Y2ggYXJlYSBhbmQgdGhlIHRoaXJkCiYjNDM7CQkJbWVtb3J5IGJvb3RtZW0gYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lcwomIzQzOwkJCXRoZSBzaXplIG9mIGEgZ2xvYmFsIGJvb3RtZW0gYXJlYSBhbmQgdGhlIHRoaXJkCiAJCQlwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhZGRpdGlvbmFsIHBlci1ub2RlCi0JCQlzY3JhdGNoIGFyZWFzLiAgVGhlIGZvcm0gJiMzNDtubiUmIzM0OyBkZWZpbmVzIHNjYWxlIGZhY3RvcgomIzQzOwkJCWJvb3RtZW0gYXJlYXMuICBUaGUgZm9ybSAmIzM0O25uJSYjMzQ7IGRlZmluZXMgc2NhbGUgZmFjdG9yCiAJCQkoaW4gcGVyY2VudHMpIG9mIG1lbW9yeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBib290LgogCiAJa21hYz0JCVtNSVBTXSBLb3JpbmEgZXRoZXJuZXQgTUFDIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QKaW5kZXggMmMyNmU1NjBiZDc4YS4uZjE0YzhkOWFkNmE0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdApAQCAtMjAsMTAgJiM0MzsyMCwxMCBAQCBuZWVkIHRvIGVuYWJsZSBpZiB5b3Ugd291bGQgbGlrZSB0byBwcmVzZXJ2ZSB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGFjcm9zcwoga2V4ZWMuCiAKIFRvIHVzZSBLSE8sIHBsZWFzZSBib290IHRoZSBrZXJuZWwgd2l0aCB0aGUgYGBraG89b25gYCBjb21tYW5kIGxpbmUKLXBhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fc2NyYXRjaGBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGUKLXNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGEKLTE2IE1pQiBsb3cgbWVtb3J5IHNjcmF0Y2ggYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBzY3JhdGNoIHJlZ2lvbiwgYW5kIDI1NiBNaUIKLXBlciBOVU1BIG5vZGUgc2NyYXRjaCByZWdpb25zIG9uIGJvb3QuCiYjNDM7cGFyYW1ldGVyLiBZb3UgbWF5IHVzZSBgYGtob19ib290bWVtYGAgcGFyYW1ldGVyIHRvIGRlZmluZSBzaXplIG9mIHRoZQomIzQzO2Jvb3QgbWVtb3J5IHJlZ2lvbnMuIEZvciBleGFtcGxlIGBga2hvX2Jvb3RtZW09MTZNLDUxMk0sMjU2TWBgIHdpbGwgcmVzZXJ2ZSBhCiYjNDM7MTYgTWlCIGxvdyBtZW1vcnkgYm9vdG1lbSBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIGJvb3RtZW0gcmVnaW9uLCBhbmQgMjU2IE1pQgomIzQzO3BlciBOVU1BIG5vZGUgYm9vdG1lbSByZWdpb25zIG9uIGJvb3QuCiAKIFBlcmZvcm0gYSBLSE8ga2V4ZWMKID09PT09PT09PT09PT09PT09PT0KQEAgLTk2LDE1ICYjNDM7OTYsMTUgQEAgc3RhYmlsaXplZC4KICAgICBjdXJyZW50IEtITyBzdGF0ZSBpbiB0aGlzIGZpbGUuIEtleGVjIHVzZXIgc3BhY2UgdG9vbGluZyBjYW4gdXNlIHRoaXMKICAgICBhcyBpbnB1dCBmaWxlIGZvciB0aGUgS0hPIHBheWxvYWQgaW1hZ2UuCiAKLWBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zY3JhdGNoX2xlbmBgCi0gICAgTGVuZ3RocyBvZiBLSE8gc2NyYXRjaCByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzCiYjNDM7YGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fbGVuYGAKJiM0MzsgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzCiAgICAgbWVtb3J5IHJlZ2lvbnMgdGhhdCB3aWxsIGFsd2F5cyBzdGF5IGF2YWlsYWJsZSBmb3IgZnV0dXJlIGtleGVjCiAgICAgYWxsb2NhdGlvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHMgY2FuIHVzZSB0aGlzIGZpbGUgdG8gZGV0ZXJtaW5lCiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy4KIAotYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3NjcmF0Y2hfcGh5c2BgCi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHMKLSAgICBjYW4gdXNlIHRoaXMgZmlsZSBpbiBjb25qdW5jdGlvbiB0byBzY3JhdGNoX3BoeXMgdG8gZGV0ZXJtaW5lIHdoZXJlCiYjNDM7YGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fcGh5c2BgCiYjNDM7ICAgIFBoeXNpY2FsIGxvY2F0aW9ucyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLiBLZXhlYyB1c2VyIHNwYWNlIHRvb2xzCiYjNDM7ICAgIGNhbiB1c2UgdGhpcyBmaWxlIGluIGNvbmp1bmN0aW9uIHRvIGJvb3RtZW1fcGh5cyB0byBkZXRlcm1pbmUgd2hlcmUKICAgICBpdCBzaG91bGQgcGxhY2UgaXRzIHBheWxvYWQgaW1hZ2VzLgogCiBgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc3ViX2ZkdHMvYGAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdAppbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0CkBAIC0xMyw4ICYjNDM7MTMsOCBAQCBLZXhlYyBIYW5kT3ZlciAoS0hPKSBpcyBhIG1lY2hhbmlzbSB0aGF0IGFsbG93cyBMaW51eCB0byBwcmVzZXJ2ZSBtZW1vcnkKIHJlZ2lvbnMsIHdoaWNoIGNvdWxkIGNvbnRhaW4gc2VyaWFsaXplZCBzeXN0ZW0gc3RhdGVzLCBhY3Jvc3Mga2V4ZWMuCiAKIEtITyB1c2VzIDpyZWY6YGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSAoRkRUKSAmbHQ7a2hvX2ZkdCZndDtgIHRvIHBhc3MgaW5mb3JtYXRpb24gYWJvdXQKLXRoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YHNjcmF0Y2gKLW1lbW9yeSByZWdpb25zICZsdDtraG9fc2NyYXRjaCZndDtgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuCiYjNDM7dGhlIHByZXNlcnZlZCBzdGF0ZSBmcm9tIHByZS1leGVjIGtlcm5lbCB0byBwb3N0LWtleGVjIGtlcm5lbCBhbmQgOnJlZjpgYm9vdAomIzQzO21lbW9yeSByZWdpb25zICZsdDtraG9fYm9vdG1lbSZndDtgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuCiAKIC4uIF9raG9fZmR0OgogCkBAIC00MCwzMSAmIzQzOzQwLDMxIEBAIGFuZCBwb3N0LWtleGVjIGtlcm5lbHMuIFRoaXMgQUJJIGlzIGRlZmluZWQgYnkgaGVhZGVyIGZpbGVzIGluCiAKICAgIGFiaS5yc3QKIAotLi4gX2tob19zY3JhdGNoOgomIzQzOy4uIF9raG9fYm9vdG1lbToKIAotU2NyYXRjaCBSZWdpb25zCi09PT09PT09PT09PT09PT0KJiM0MztCb290IE1lbW9yeSBSZWdpb25zCiYjNDM7PT09PT09PT09PT09PT09PT09PQogCiBUbyBib290IGludG8ga2V4ZWMsIHdlIG5lZWQgdG8gaGF2ZSBhIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmFuZ2UgdGhhdAogY29udGFpbnMgbm8gaGFuZGVkIG92ZXIgbWVtb3J5LiBLZXhlYyB0aGVuIHBsYWNlcyB0aGUgdGFyZ2V0IGtlcm5lbCBhbmQgaW5pdHJkCiBpbnRvIHRoYXQgcmVnaW9uLiBUaGUgbmV3IGtlcm5lbCBleGNsdXNpdmVseSB1c2VzIHRoaXMgcmVnaW9uIGZvciBtZW1vcnkKIGFsbG9jYXRpb25zIGJlZm9yZSBkdXJpbmcgYm9vdCB1cCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLgogCi1XZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgc2NyYXRjaCByZWdpb25zOiBPbgotZmlyc3QgYm9vdCBLSE8gYWxsb2NhdGVzIHNldmVyYWwgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb25zLiBTaW5jZQomIzQzO1dlIGd1YXJhbnRlZSB0aGF0IHdlIGFsd2F5cyBoYXZlIHN1Y2ggcmVnaW9ucyB0aHJvdWdoIHRoZSBib290IG1lbW9yeSByZWdpb25zOgomIzQzO09uIGZpcnN0IGJvb3QgS0hPIGFsbG9jYXRlcyBzZXZlcmFsIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucy4gU2luY2UKIGFmdGVyIGtleGVjIHRoZXNlIHJlZ2lvbnMgd2lsbCBiZSB1c2VkIGJ5IGVhcmx5IG1lbW9yeSBhbGxvY2F0aW9ucywgdGhlcmUgaXMgYQotc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9ucwotcmVxdWVzdHMgdGhhdCBkbyBub3QgcmVxdWlyZSBwYXJ0aWN1bGFyIE5VTUEgbm9kZSBhc3NpZ25tZW50LgotQnkgZGVmYXVsdCwgc2l6ZSBvZiB0aGUgc2NyYXRjaCByZWdpb24gaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBhbW91bnQgb2YgbWVtb3J5Ci1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlCi11c2VkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIHNpemUgb2YgdGhlIHNjcmF0Y2ggcmVnaW9ucy4KLVRoZSBzY3JhdGNoIHJlZ2lvbnMgYXJlIGRlY2xhcmVkIGFzIENNQSB3aGVuIHBhZ2UgYWxsb2NhdG9yIGlzIGluaXRpYWxpemVkIHNvCi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlCi1ndWFyYW50ZWUgdGhhdCBubyBoYW5kb3ZlciBwYWdlcyBsYW5kIGluIHRoYXQgcmVnaW9uLCBiZWNhdXNlIGhhbmRvdmVyIHBhZ2VzCi1tdXN0IGJlIGF0IGEgc3RhdGljIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiBhbmQgQ01BIGVuZm9yY2VzIHRoYXQgb25seQotbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuCi0KLUFmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kCiYjNDM7Ym9vdCBtZW1vcnkgcmVnaW9uIHBlciBOVU1BIG5vZGUgcGx1cyBhIGJvb3QgbWVtb3J5IHJlZ2lvbiB0byBzYXRpc2Z5CiYjNDM7YWxsb2NhdGlvbnMgcmVxdWVzdHMgdGhhdCBkbyBub3QgcmVxdWlyZSBwYXJ0aWN1bGFyIE5VTUEgbm9kZSBhc3NpZ25tZW50LiBCeQomIzQzO2RlZmF1bHQsIHNpemUgb2YgdGhlIGJvb3QgbWVtb3J5IHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnkKJiM0MzthbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlCiYjNDM7dXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBib290IG1lbW9yeSByZWdpb25zLiBUaGUgYm9vdCBtZW1vcnkKJiM0MztyZWdpb25zIGFyZSBkZWNsYXJlZCBhcyBDTUEgd2hlbiBwYWdlIGFsbG9jYXRvciBpcyBpbml0aWFsaXplZCBzbyB0aGF0IHRoZWlyCiYjNDM7bWVtb3J5IGNhbiBiZSB1c2VkIGR1cmluZyBzeXN0ZW0gbGlmZXRpbWUuIENNQSBnaXZlcyB1cyB0aGUgZ3VhcmFudGVlIHRoYXQgbm8KJiM0MztoYW5kb3ZlciBwYWdlcyBsYW5kIGluIHRoYXQgcmVnaW9uLCBiZWNhdXNlIGhhbmRvdmVyIHBhZ2VzIG11c3QgYmUgYXQgYSBzdGF0aWMKJiM0MztwaHlzaWNhbCBtZW1vcnkgbG9jYXRpb24gYW5kIENNQSBlbmZvcmNlcyB0aGF0IG9ubHkgbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZAomIzQzO2luc2lkZS4KJiM0MzsKJiM0MztBZnRlciBLSE8ga2V4ZWMsIHdlIGlnbm9yZSB0aGUgYGBraG9fYm9vdG1lbWBgIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZAogaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzCiB1cyB0byByZWN1cnNpdmVseSBleGVjdXRlIGFueSBhbW91bnQgb2YgS0hPIGtleGVjcy4gQmVjYXVzZSB3ZSB1c2VkIHRoaXMgcmVnaW9uCiBmb3IgYm9vdCBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGFzIHRhcmdldCBtZW1vcnkgZm9yIGtleGVjIGJsb2JzLCBzb21lIHBhcnRzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jCmluZGV4IDIyMjY3YTgzZTA2NGEuLjI5MDE1MzgxOGQwZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jCkBAIC03NjQsMTIgJiM0Mzs3NjQsMTIgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19lODIwX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLAogfQogCiAvKgotICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBzY3JhdGNoIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90CiYjNDM7ICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBib290bWVtIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90CiAgKiBzdGVwcGluZyBvbnRvIHByZXNlcnZlZCBtZW1vcnkuCiAgKi8KIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpCiB7Ci0Jc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDsKJiM0MzsJc3RydWN0IGtob19ib290bWVtICpraG9fYm9vdG1lbTsKIAlzdHJ1Y3Qgc2V0dXBfZGF0YSAqcHRyOwogCXN0cnVjdCBraG9fZGF0YSAqa2hvOwogCWludCBpLCBucl9hcmVhcyA9IDA7CkBAIC03ODEsOCAmIzQzOzc4MSw4IEBAIHN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpCiAJd2hpbGUgKHB0cikgewogCQlpZiAocHRyLSZndDt0eXBlID09IFNFVFVQX0tFWEVDX0tITykgewogCQkJa2hvID0gKHN0cnVjdCBraG9fZGF0YSAqKSh1bnNpZ25lZCBsb25nKXB0ci0mZ3Q7ZGF0YTsKLQkJCWtob19zY3JhdGNoID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylraG8tJmd0O3NjcmF0Y2hfYWRkcjsKLQkJCW5yX2FyZWFzID0ga2hvLSZndDtzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTsKJiM0MzsJCQlraG9fYm9vdG1lbSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLSZndDtib290bWVtX2FkZHI7CiYjNDM7CQkJbnJfYXJlYXMgPSBraG8tJmd0O2Jvb3RtZW1fc2l6ZSAvIHNpemVvZigqa2hvX2Jvb3RtZW0pOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNzkzLDcgJiM0Mzs3OTMsNyBAQCBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfYXJlYXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9ICZhbXA7a2hvX3NjcmF0Y2hbaV07CiYjNDM7CQlzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSAmYW1wO2tob19ib290bWVtW2ldOwogCQlzdHJ1Y3QgbWVtX3ZlY3RvciByZWdpb24gPSB7CiAJCQkuc3RhcnQgPSBhcmVhLSZndDthZGRyLAogCQkJLnNpemUgPSBhcmVhLSZndDtzaXplLApAQCAtODIyLDcgJiM0Mzs4MjIsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3JhbmRvbV9waHlzX2FkZHIodW5zaWduZWQgbG9uZyBtaW5pbXVtLAogCX0KIAogCS8qCi0JICogRHVyaW5nIGtleGVjIGhhbmRvdmVyIG9ubHkgcHJvY2VzcyBLSE8gc2NyYXRjaCBhcmVhcyB0aGF0IGFyZSBrbm93bgomIzQzOwkgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duCiAJICogbm90IHRvIGNvbnRhaW4gYW55IGRhdGEgdGhhdCBtdXN0IGJlIHByZXNlcnZlZC4KIAkgKi8KIAlpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgJmFtcDsmYW1wOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaAppbmRleCAyNjcxYzRlMWIzYTBiLi42MTA5MGRiNTA2NWM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaApAQCAtODUsOCAmIzQzOzg1LDggQEAgc3RydWN0IGltYV9zZXR1cF9kYXRhIHsKIHN0cnVjdCBraG9fZGF0YSB7CiAJX191NjQgZmR0X2FkZHI7CiAJX191NjQgZmR0X3NpemU7Ci0JX191NjQgc2NyYXRjaF9hZGRyOwotCV9fdTY0IHNjcmF0Y2hfc2l6ZTsKJiM0MzsJX191NjQgYm9vdG1lbV9hZGRyOwomIzQzOwlfX3U2NCBib290bWVtX3NpemU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggZWI3MjUzN2JjMGIxOS4uMmE2ZTE5Zjk1MjUxNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMzYzLDcgJiM0MzsxMzYzLDcgQEAgX19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZCkKIAkgKiBBZnRlciByZWFsIG1vZGUgdHJhbXBvbGluZSBpcyBhbGxvY2F0ZWQsIHdlIGNsZWFyIHRoYXQgc2NyYXRjaAogCSAqIG1hcmtpbmcuCiAJICovCi0JbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgwLCBTWl8xTSk7CiYjNDM7CW1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoMCwgU1pfMU0pOwogCiAJLyoKIAkgKiAzMi1iaXQgc3lzdGVtcyBhcmUgbGltaXRlZCB0byA0Qkcgb2YgbWVtb3J5IGV2ZW4gd2l0aCBISUdITUVNIGFuZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jIGIvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jCmluZGV4IDdlOTgwZWE0OWQ4ZDYuLjNhYTc3MDA2YWRhYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMKQEAgLTI4NSwxNCAmIzQzOzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLAogCXNkLSZndDtsZW4gPSBzaXplb2Yoc3RydWN0IGtob19kYXRhKTsKIAogCS8qIE9ubHkgYWRkIGlmIHdlIGhhdmUgYWxsIEtITyBpbWFnZXMgaW4gcGxhY2UgKi8KLQlpZiAoIWltYWdlLSZndDtraG8uZmR0IHx8ICFpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2gpCiYjNDM7CWlmICghaW1hZ2UtJmd0O2toby5mZHQgfHwgIWltYWdlLSZndDtraG8uYm9vdG1lbSkKIAkJcmV0dXJuOwogCiAJLyogQWRkIHNldHVwIGRhdGEgKi8KIAlraG8tJmd0O2ZkdF9hZGRyID0gaW1hZ2UtJmd0O2toby5mZHQ7CiAJa2hvLSZndDtmZHRfc2l6ZSA9IFBBR0VfU0laRTsKLQlraG8tJmd0O3NjcmF0Y2hfYWRkciA9IGltYWdlLSZndDtraG8uc2NyYXRjaC0mZ3Q7bWVtOwotCWtoby0mZ3Q7c2NyYXRjaF9zaXplID0gaW1hZ2UtJmd0O2toby5zY3JhdGNoLSZndDtidWZzejsKJiM0MzsJa2hvLSZndDtib290bWVtX2FkZHIgPSBpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0tJmd0O21lbTsKJiM0MzsJa2hvLSZndDtib290bWVtX3NpemUgPSBpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0tJmd0O2J1ZnN6OwogCXNkLSZndDtuZXh0ID0gcGFyYW1zLSZndDtoZHIuc2V0dXBfZGF0YTsKIAlwYXJhbXMtJmd0O2hkci5zZXR1cF9kYXRhID0gcGFyYW1zX2xvYWRfYWRkciAmIzQzOyBzZXR1cF9kYXRhX29mZnNldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggNWViYjUyMWUxMzZkNy4uZDE2MThjNGNmN2ZiZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTQ3Miw3ICYjNDM7NDcyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKQogCQlyZXR1cm47CiAJfQogCi0Ja2hvX3BvcHVsYXRlKGtoby0mZ3Q7ZmR0X2FkZHIsIGtoby0mZ3Q7ZmR0X3NpemUsIGtoby0mZ3Q7c2NyYXRjaF9hZGRyLCBraG8tJmd0O3NjcmF0Y2hfc2l6ZSk7CiYjNDM7CWtob19wb3B1bGF0ZShraG8tJmd0O2ZkdF9hZGRyLCBraG8tJmd0O2ZkdF9zaXplLCBraG8tJmd0O2Jvb3RtZW1fYWRkciwga2hvLSZndDtib290bWVtX3NpemUpOwogCiAJZWFybHlfbWVtdW5tYXAoa2hvLCBzaXplKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYyBiL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYwppbmRleCA2OTRkODBhNWM2OGUxLi42NTExMGIyZWUxYTFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCB2b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKQogCSAqLwogCW1lbWJsb2NrX3Jlc2VydmUoMCwgU1pfMU0pOwogCi0JbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2goMCwgU1pfMU0pOwomIzQzOwltZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydigwLCBTWl8xTSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWVfc2V2X3NldHVwX3JlYWxfbW9kZShzdHJ1Y3QgdHJhbXBvbGluZV9oZWFkZXIgKnRoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMKaW5kZXggNjEwM2IxYTA4MmQyNC4uOWYwOWIwZDJkYWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jCkBAIC0xNjUsMTAgJiM0MzsxNjUsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKQogCQlwcl9pbmZvKCYjMzQ7UHJvY2Vzc2luZyBFRkkgbWVtb3J5IG1hcDpcbiYjMzQ7KTsKIAogCS8qCi0JICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gc2NyYXRjaAomIzQzOwkgKiBEaXNjYXJkIG1lbWJsb2NrcyBkaXNjb3ZlcmVkIHNvIGZhciBleGNlcHQgZm9yIEtITyBib290bWVtCiAJICogcmVnaW9ucy4gTW9zdCBtZW1ibG9ja3MgYXQgdGhpcyBwb2ludCBvcmlnaW5hdGUgZnJvbSBtZW1vcnkgbm9kZXMKIAkgKiBpbiB0aGUgRFQgYW5kIFVFRkkgdXNlcyBpdHMgb3duIG1lbW9yeSBtYXAgaW5zdGVhZC4gSG93ZXZlciwgaWYKLQkgKiBLSE8gaXMgZW5hYmxlZCwgc2NyYXRjaCByZWdpb25zLCB3aGljaCBhcmUgZ29vZCBrbm93biBtZW1vcnkKJiM0MzsJICogS0hPIGlzIGVuYWJsZWQsIGJvb3RtZW0gcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5CiAJICogbXVzdCBiZSBwcmVzZXJ2ZWQuCiAJICovCiAJbWVtYmxvY2tfZHVtcF9hbGwoKTsKQEAgLTE3OCw3ICYjNDM7MTc4LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKQogCiAJCS8qIFJlbW92ZSBhbGwgbm9uLUtITyByZWdpb25zICovCiAJCWZvcl9lYWNoX21lbV9yZWdpb24ocikgewotCQkJaWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkgewomIzQzOwkJCWlmICghbWVtYmxvY2tfaXNfa2hvX25vcHJzcnYocikpIHsKIAkJCQltZW1ibG9ja19yZW1vdmUoci0mZ3Q7YmFzZSwgci0mZ3Q7c2l6ZSk7CiAJCQkJci0tOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9rZXhlYy5jIGIvZHJpdmVycy9vZi9rZXhlYy5jCmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yva2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL2tleGVjLmMKQEAgLTI2MSwyMyAmIzQzOzI2MSwyMyBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZQogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUgogCXBoeXNfYWRkcl90IGZkdF9tZW0gPSAwOwogCXBoeXNfYWRkcl90IGZkdF9sZW4gPSAwOwotCXBoeXNfYWRkcl90IHNjcmF0Y2hfbWVtID0gMDsKLQlwaHlzX2FkZHJfdCBzY3JhdGNoX2xlbiA9IDA7CiYjNDM7CXBoeXNfYWRkcl90IGJvb3RtZW1fYXJyID0gMDsKJiM0MzsJcGh5c19hZGRyX3QgYm9vdG1lbV9sZW4gPSAwOwogCiAJcmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgJiMzNDtsaW51eCxraG8tZmR0JiMzNDspOwogCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUZEVF9FUlJfTk9URk9VTkQpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgJiMzNDtsaW51eCxraG8tc2NyYXRjaCYjMzQ7KTsKJiM0MzsJcmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgJiMzNDtsaW51eCxraG8tYm9vdG1lbSYjMzQ7KTsKIAlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1GRFRfRVJSX05PVEZPVU5EKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFpbWFnZS0mZ3Q7a2hvLmZkdCB8fCAhaW1hZ2UtJmd0O2toby5zY3JhdGNoKQomIzQzOwlpZiAoIWltYWdlLSZndDtraG8uZmR0IHx8ICFpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0pCiAJCXJldHVybiAwOwogCiAJZmR0X21lbSA9IGltYWdlLSZndDtraG8uZmR0OwogCWZkdF9sZW4gPSBQQUdFX1NJWkU7Ci0Jc2NyYXRjaF9tZW0gPSBpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2gtJmd0O21lbTsKLQlzY3JhdGNoX2xlbiA9IGltYWdlLSZndDtraG8uc2NyYXRjaC0mZ3Q7YnVmc3o7CiYjNDM7CWJvb3RtZW1fYXJyID0gaW1hZ2UtJmd0O2toby5ib290bWVtLSZndDttZW07CiYjNDM7CWJvb3RtZW1fbGVuID0gaW1hZ2UtJmd0O2toby5ib290bWVtLSZndDtidWZzejsKIAogCXByX2RlYnVnKCYjMzQ7QWRkaW5nIGtobyBtZXRhZGF0YSB0byBEVCYjMzQ7KTsKIApAQCAtMjg1LDggJiM0MzsyODUsOCBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZQogCQkJCSAgICAgICBmZHRfbWVtLCBmZHRfbGVuKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCXJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCAmIzM0O2xpbnV4LGtoby1zY3JhdGNoJiMzNDssCi0JCQkJICAgICAgIHNjcmF0Y2hfbWVtLCBzY3JhdGNoX2xlbik7CiYjNDM7CXJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCAmIzM0O2xpbnV4LGtoby1ib290bWVtJiMzNDssCiYjNDM7CQkJCSAgICAgICBib290bWVtX2FyciwgYm9vdG1lbV9sZW4pOwogCiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaAppbmRleCA1MDgzOWZiNWVlOGVkLi5jZjczZDliMzRjM2M5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oCkBAIC00LDcgJiM0Mzs0LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKLXN0cnVjdCBraG9fc2NyYXRjaCB7CiYjNDM7c3RydWN0IGtob19ib290bWVtIHsKIAlwaHlzX2FkZHJfdCBhZGRyOwogCXBoeXNfYWRkcl90IHNpemU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlYy5oIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oCmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleGVjLmgKQEAgLTQxOCw3ICYjNDM7NDE4LDcgQEAgc3RydWN0IGtpbWFnZSB7CiAjZW5kaWYKIAogCXN0cnVjdCB7Ci0JCXN0cnVjdCBrZXhlY19zZWdtZW50ICpzY3JhdGNoOwomIzQzOwkJc3RydWN0IGtleGVjX3NlZ21lbnQgKmJvb3RtZW07CiAJCXBoeXNfYWRkcl90IGZkdDsKIAl9IGtobzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCmluZGV4IDQ2ZGU4NmRjMzQzZTkuLmVmMmIxODhjOGVkMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgKQEAgLTM2LDE1ICYjNDM7MzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpOwogdm9pZCBraG9fbWVtb3J5X2luaXQodm9pZCk7CiB2b2lkIGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKTsKIAotdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLCBwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsCi0JCSAgdTY0IHNjcmF0Y2hfbGVuKTsKJiM0Mzt2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywKJiM0MzsJCSAgdTY0IGJvb3RtZW1fbGVuKTsKIAotYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTsKJiM0Mztib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpOwogCi1zdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCQkJICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpCiB7Ci0JaWYgKGtob19zY3JhdGNoX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQpKQomIzQzOwlpZiAoa2hvX2Jvb3RtZW1fb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCkpCiAJCXJldHVybiBNSUdSQVRFX0NNQTsKIAlyZXR1cm4gbXQ7CiB9CkBAIC0xMjMsMTYgJiM0MzsxMjMsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLAotCQkJCXBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cywgdTY0IHNjcmF0Y2hfbGVuKQomIzQzOwkJCQlwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbikKIHsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7c3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCQkJICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpCiB7CiAJcmV0dXJuIG10OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCmluZGV4IGQ2MmRiOWU3NzZjZjkuLjE4NmI5NjVjZmM4OTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKQEAgLTQ2LDExICYjNDM7NDYsMTEgQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuOwogICogQE1FTUJMT0NLX1JTUlZfS0VSTjogbWVtb3J5IHJlZ2lvbiB0aGF0IGlzIHJlc2VydmVkIGZvciBrZXJuZWwgdXNlLAogICogZWl0aGVyIGV4cGxpY3RpdGx5IHdpdGggbWVtYmxvY2tfcmVzZXJ2ZV9rZXJuKCkgb3IgdmlhIG1lbWJsb2NrCiAgKiBhbGxvY2F0aW9uIEFQSXMuIEFsbCBtZW1ibG9jayBhbGxvY2F0aW9ucyBzZXQgdGhpcyBmbGFnLgotICogQE1FTUJMT0NLX0tIT19TQ1JBVENIOiBtZW1vcnkgcmVnaW9uIHRoYXQga2V4ZWMgY2FuIHBhc3MgdG8gdGhlIG5leHQKLSAqIGtlcm5lbCBpbiBoYW5kb3ZlciBtb2RlLiBEdXJpbmcgZWFybHkgYm9vdCwgd2UgZG8gbm90IGtub3cgYWJvdXQgYWxsCi0gKiBtZW1vcnkgcmVzZXJ2YXRpb25zIHlldCwgc28gd2UgZ2V0IHNjcmF0Y2ggbWVtb3J5IGZyb20gdGhlIHByZXZpb3VzCi0gKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdAotICogYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tIGluIHRoaXMgcGhhc2UuCiYjNDM7ICogQE1FTUJMT0NLX0tIT19OT1BSU1JWOiBtZW1vcnkgcmVnaW9uIHdpdGggbm8gcHJlc2VydmF0aW9uIGZyb20ga2V4ZWMKJiM0MzsgKiBoYW5kb3Zlci4gRHVyaW5nIGVhcmx5IGJvb3QsIHdlIGRvIG5vdCBrbm93IGFib3V0IGFsbCBtZW1vcnkgcHJlc2VydmF0aW9ucwomIzQzOyAqIHlldCwgc28gd2UgZ2V0IG1lbW9yeSB3aXRoIG5vIHByZXNlcnZhdGlvbnMgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsIHRoYXQgd2UKJiM0MzsgKiBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdCBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20KJiM0MzsgKiBpbiB0aGlzIHBoYXNlLgogICogQE1FTUJMT0NLX1JTUlZfSFVHRVRMQjogbWVtb3J5IGlzIHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzCiAgKi8KIGVudW0gbWVtYmxvY2tfZmxhZ3MgewpAQCAtNjEsNyAmIzQzOzYxLDcgQEAgZW51bSBtZW1ibG9ja19mbGFncyB7CiAJTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQgPSAweDgsCS8qIGFsd2F5cyBkZXRlY3RlZCB2aWEgYSBkcml2ZXIgKi8KIAlNRU1CTE9DS19SU1JWX05PSU5JVAk9IDB4MTAsCS8qIGRvbiYjMzk7dCBpbml0aWFsaXplIHN0cnVjdCBwYWdlcyAqLwogCU1FTUJMT0NLX1JTUlZfS0VSTgk9IDB4MjAsCS8qIG1lbW9yeSByZXNlcnZlZCBmb3Iga2VybmVsIHVzZSAqLwotCU1FTUJMT0NLX0tIT19TQ1JBVENICT0gMHg0MCwJLyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovCiYjNDM7CU1FTUJMT0NLX0tIT19OT1BSU1JWCT0gMHg0MCwJLyogbWVtb3J5IHdpdGggbm8gS0hPIHByZXNlcnZhdGlvbnMgKi8KIAlNRU1CTE9DS19SU1JWX0hVR0VUTEIJPSAweDgwLCAvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXMgKi8KIH07CiAKQEAgLTE1OCw4ICYjNDM7MTU4LDggQEAgaW50IG1lbWJsb2NrX21hcmtfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiBpbnQgbWVtYmxvY2tfY2xlYXJfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiBpbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19ub2luaXQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiBpbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwotaW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7Ci1pbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiYjNDM7aW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7CiYjNDM7aW50IG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogCiB2b2lkIG1lbWJsb2NrX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiB2b2lkIHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKHZvaWQpOwpAQCAtMzAxLDkgJiM0MzszMDEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtYmxvY2tfaXNfZHJpdmVyX21hbmFnZWQoc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqbSkKIAlyZXR1cm4gbS0mZ3Q7ZmxhZ3MgJmFtcDsgTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fc2NyYXRjaChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fbm9wcnNydihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKQogewotCXJldHVybiBtLSZndDtmbGFncyAmYW1wOyBNRU1CTE9DS19LSE9fU0NSQVRDSDsKJiM0MzsJcmV0dXJuIG0tJmd0O2ZsYWdzICZhbXA7IE1FTUJMT0NLX0tIT19OT1BSU1JWOwogfQogCiBpbnQgbWVtYmxvY2tfc2VhcmNoX3Bmbl9uaWQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgKnN0YXJ0X3BmbiwKQEAgLTYxNCwxMiAmIzQzOzYxNCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfbWVtdGVzdChwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW10ZXN0X3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkgeyB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSAotdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTsKLXZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTsKJiM0MzsjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSCiYjNDM7dm9pZCBtZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSh2b2lkKTsKJiM0Mzt2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNldl9vbmx5KHZvaWQpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydl9vbmx5KHZvaWQpIHsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfTUVNQkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWcKaW5kZXggYzEzYWYzOGJhMjNhYi4uZjUwZGFlZThlZmYwNyAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnCkBAIC01LDcgJiM0Mzs1LDYgQEAgbWVudSAmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlciYjMzQ7CiBjb25maWcgS0VYRUNfSEFORE9WRVIKIAlib29sICYjMzQ7a2V4ZWMgaGFuZG92ZXImIzM0OwogCWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19LRVhFQ19IQU5ET1ZFUiAmYW1wOyZhbXA7IEFSQ0hfU1VQUE9SVFNfS0VYRUNfRklMRQotCXNlbGVjdCBNRU1CTE9DS19LSE9fU0NSQVRDSAogCXNlbGVjdCBLRVhFQ19GSUxFCiAJc2VsZWN0IExJQkZEVAogCXNlbGVjdCBDTUEKZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCmluZGV4IGZlNmYyYWM3ZTQ1ODMuLmRhOGQ1ZWNiOTE1YjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwpAQCAtNDEsMTIgJiM0Mzs0MSwxMiBAQAogLyoKICAqIFRoaXMgaXMgdGhlIG1pbmltYWwgYWxpZ25tZW50IHJlcXVpcmVkIGJ5IGRlZmVycmVkIHN0cnVjdCBwYWdlIGluaXQuCiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3MKLSAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uCi0gKiBJZiBLSE8gc2NyYXRjaCBpcyBub3QgYWxpZ25lZCB0byB0aGF0IHZhbHVlLCBidWRkeSBjYW4gYWNjZXNzIHVuaW5pdGlhbGl6ZWQKLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guCiYjNDM7ICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS4gSWYgS0hPIGJvb3RtZW0KJiM0MzsgKiBpcyBub3QgYWxpZ25lZCB0byB0aGF0IHZhbHVlLCBidWRkeSBjYW4gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2VzLAomIzQzOyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLgogICovCi0jZGVmaW5lIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpCi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTICZndDs9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTsKJiM0MzsjZGVmaW5lIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpCiYjNDM7c3RhdGljX2Fzc2VydChCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyAmZ3Q7PSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7CiAKIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovCiAjZGVmaW5lIEtIT19QQUdFX01BR0lDIDB4NGI0ODRmNTBVIC8qIEFTQ0lJIGZvciAmIzM5O0tIT1AmIzM5OyAqLwpAQCAtOTYsNyAmIzQzOzk2LDcgQEAgc3RhdGljIHN0cnVjdCBraG9fb3V0IGtob19vdXQgPSB7CiAKIHN0cnVjdCBraG9faW4gewogCXBoeXNfYWRkcl90IGZkdF9waHlzOwotCXBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5czsKJiM0MzsJcGh5c19hZGRyX3QgYm9vdG1lbV9waHlzOwogCWNoYXIgcHJldmlvdXNfcmVsZWFzZVtfX05FV19VVFNfTEVOICYjNDM7IDFdOwogCXUzMiBrZXhlY19jb3VudDsKIAlzdHJ1Y3Qga2hvX2RlYnVnZnMgZGJnOwpAQCAtNjU2LDM0ICYjNDM7NjU2LDM0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCAqa2hvX2dldF9tZW1fbWFwKGNvbnN0IHZvaWQgKmZkdCkKIAogLyoKICAqIFdpdGggS0hPIGVuYWJsZWQsIG1lbW9yeSBjYW4gYmVjb21lIGZyYWdtZW50ZWQgYmVjYXVzZSBLSE8gcmVnaW9ucyBtYXkKLSAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBzY3JhdGNoIHJlZ2lvbnMgZ2l2ZSB1cyBhCiYjNDM7ICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIGJvb3RtZW0gcmVnaW9ucyBnaXZlIHVzIGEKICAqIHNhZmUgem9uZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIHNlZSBLSE8gYWxsb2NhdGlvbnMgZnJvbS4gVGhpcyBpcyB3aGVyZSB3ZQotICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBzY3JhdGNoCiYjNDM7ICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBib290bWVtCiAgKiBhcmVhIGZvciBlYXJseSBhbGxvY2F0aW9ucyB0aGF0IGhhcHBlbiBiZWZvcmUgcGFnZSBhbGxvY2F0b3IgaXMKICAqIGluaXRpYWxpemVkLgogICovCi1zdHJ1Y3Qga2hvX3NjcmF0Y2ggKmtob19zY3JhdGNoOwotdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDsKJiM0MztzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtOwomIzQzO3Vuc2lnbmVkIGludCBraG9fYm9vdG1lbV9jbnQ7CiAKIC8qCi0gKiBUaGUgc2NyYXRjaCBhcmVhcyBhcmUgc2NhbGVkIGJ5IGRlZmF1bHQgYXMgcGVyY2VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb20KJiM0MzsgKiBUaGUgYm9vdG1lbSBhcmVhcyBhcmUgc2NhbGVkIGJ5IGRlZmF1bHQgYXMgcGVyY2VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb20KICAqIG1lbWJsb2NrLiBBIHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBzY2FsZSB3aXRoIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXI6CiAgKgotICoga2hvX3NjcmF0Y2g9TiUKJiM0MzsgKiBraG9fYm9vdG1lbT1OJQogICoKICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBmb3IgYSBsb3dtZW0sIGEgZ2xvYmFsIGFuZAotICogcGVyLW5vZGUgc2NyYXRjaCBhcmVhczoKJiM0MzsgKiBwZXItbm9kZSBib290bWVtIGFyZWFzOgogICoKLSAqIGtob19zY3JhdGNoPWxbS01HXSxuW0tNR10sbVtLTUddCiYjNDM7ICoga2hvX2Jvb3RtZW09bFtLTUddLG5bS01HXSxtW0tNR10KICAqCiAgKiBUaGUgZXhwbGljaXQgc2l6ZSBkZWZpbml0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzY2FsZSBkZWZpbml0aW9uLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNjcmF0Y2hfc2NhbGUgX19pbml0ZGF0YSA9IDIwMDsKLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7Ci1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX3Blcm5vZGUgX19pbml0ZGF0YTsKLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfbG93bWVtIF9faW5pdGRhdGE7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBib290bWVtX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7CiYjNDM7c3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9nbG9iYWwgX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgYm9vdG1lbV9zaXplX3Blcm5vZGUgX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgcGh5c19hZGRyX3QgYm9vdG1lbV9zaXplX2xvd21lbSBfX2luaXRkYXRhOwogCi1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApCiYjNDM7c3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZShjaGFyICpwKQogewogCXNpemVfdCBsZW47CiAJdW5zaWduZWQgbG9uZyBzaXplc1szXTsKQEAgLTcwNyw5ICYjNDM7NzA3LDkgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJbWVtY3B5KHNfc2NhbGUsIHAsIGxlbiAtIDEpOwotCQlyZXQgPSBrc3RydG91aW50KHNfc2NhbGUsIDEwLCAmYW1wO3NjcmF0Y2hfc2NhbGUpOwomIzQzOwkJcmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgJmFtcDtib290bWVtX3NjYWxlKTsKIAkJaWYgKCFyZXQpCi0JCQlwcl9ub3RpY2UoJiMzNDtzY3JhdGNoIHNjYWxlIGlzICVkJSVcbiYjMzQ7LCBzY3JhdGNoX3NjYWxlKTsKJiM0MzsJCQlwcl9ub3RpY2UoJiMzNDtib290bWVtIHNjYWxlIGlzICVkJSVcbiYjMzQ7LCBib290bWVtX3NjYWxlKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTczNyw4MSAmIzQzOzczNyw4MSBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApCiAJaWYgKCpwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplc1swXTsKLQlzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07Ci0Jc2NyYXRjaF9zaXplX3Blcm5vZGUgPSBzaXplc1syXTsKLQlzY3JhdGNoX3NjYWxlID0gMDsKJiM0MzsJYm9vdG1lbV9zaXplX2xvd21lbSA9IHNpemVzWzBdOwomIzQzOwlib290bWVtX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07CiYjNDM7CWJvb3RtZW1fc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07CiYjNDM7CWJvb3RtZW1fc2NhbGUgPSAwOwogCi0JcHJfbm90aWNlKCYjMzQ7c2NyYXRjaCBhcmVhczogbG93bWVtOiAlbGx1TWlCIGdsb2JhbDogJWxsdU1pQiBwZXJub2RlOiAlbGxkTWlCXG4mIzM0OywKLQkJICAodTY0KShzY3JhdGNoX3NpemVfbG93bWVtICZndDsmZ3Q7IDIwKSwKLQkJICAodTY0KShzY3JhdGNoX3NpemVfZ2xvYmFsICZndDsmZ3Q7IDIwKSwKLQkJICAodTY0KShzY3JhdGNoX3NpemVfcGVybm9kZSAmZ3Q7Jmd0OyAyMCkpOwomIzQzOwlwcl9ub3RpY2UoJiMzNDtib290bWVtIGFyZWFzOiBsb3dtZW06ICVsbHVNaUIgZ2xvYmFsOiAlbGx1TWlCIHBlcm5vZGU6ICVsbGRNaUJcbiYjMzQ7LAomIzQzOwkJICAodTY0KShib290bWVtX3NpemVfbG93bWVtICZndDsmZ3Q7IDIwKSwKJiM0MzsJCSAgKHU2NCkoYm9vdG1lbV9zaXplX2dsb2JhbCAmZ3Q7Jmd0OyAyMCksCiYjNDM7CQkgICh1NjQpKGJvb3RtZW1fc2l6ZV9wZXJub2RlICZndDsmZ3Q7IDIwKSk7CiAKIAlyZXR1cm4gMDsKIH0KLWVhcmx5X3BhcmFtKCYjMzQ7a2hvX3NjcmF0Y2gmIzM0Oywga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZSk7CiYjNDM7ZWFybHlfcGFyYW0oJiMzNDtraG9fYm9vdG1lbSYjMzQ7LCBraG9fcGFyc2VfYm9vdG1lbV9zaXplKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZCkKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9zaXplX3VwZGF0ZSh2b2lkKQogewogCS8qCiAJICogSWYgZml4ZWQgc2l6ZXMgYXJlIG5vdCBwcm92aWRlZCB2aWEgY29tbWFuZCBsaW5lLCBjYWxjdWxhdGUgdGhlbSBub3cuCiAJICogUmVtb3ZlIEh1Z2VUTEIgYWxsb2NhdGlvbnMgZnJvbSBpdCBiZWNhdXNlIHRoZXkgbmV2ZXIgZ2V0IGFsbG9jYXRlZAotCSAqIGZyb20gc2NyYXRjaC4KJiM0MzsJICogZnJvbSBib290bWVtLgogCSAqLwotCWlmIChzY3JhdGNoX3NjYWxlKSB7CiYjNDM7CWlmIChib290bWVtX3NjYWxlKSB7CiAJCXBoeXNfYWRkcl90IHNpemU7CiAKIAkJc2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShBUkNIX0xPV19BRERSRVNTX0xJTUlULAogCQkJCQkJICAgTlVNQV9OT19OT0RFKTsKIAkJc2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoQVJDSF9MT1dfQUREUkVTU19MSU1JVCwKIAkJCQkJCSAgICAgICBOVU1BX05PX05PREUpOwotCQlzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7Ci0JCXNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplOwomIzQzOwkJc2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwOwomIzQzOwkJYm9vdG1lbV9zaXplX2xvd21lbSA9IHNpemU7CiAKIAkJc2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSwKIAkJCQkJCSAgIE5VTUFfTk9fTk9ERSk7CiAJCXNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLAogCQkJCQkJICAgICAgIE5VTUFfTk9fTk9ERSk7Ci0JCXNpemUgPSBzaXplICogc2NyYXRjaF9zY2FsZSAvIDEwMCAtIHNjcmF0Y2hfc2l6ZV9sb3dtZW07Ci0JCXNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSBzaXplOwomIzQzOwkJc2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwIC0gYm9vdG1lbV9zaXplX2xvd21lbTsKJiM0MzsJCWJvb3RtZW1fc2l6ZV9nbG9iYWwgPSBzaXplOwogCX0KIAogCS8qCi0JICogU2NyYXRjaCBhcmVhcyBhcmUgcmVsZWFzZWQgYXMgTUlHUkFURV9DTUEuIFJvdW5kIHRoZW0gdXAgdG8gdGhlIHJpZ2h0CiYjNDM7CSAqIGJvb3RtZW0gYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodAogCSAqIHNpemUuCiAJICovCi0Jc2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTsKLQlzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpOwomIzQzOwlib290bWVtX3NpemVfbG93bWVtID0gcm91bmRfdXAoYm9vdG1lbV9zaXplX2xvd21lbSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpOwomIzQzOwlib290bWVtX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoYm9vdG1lbV9zaXplX2dsb2JhbCwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpOwogfQogCi1zdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpCiYjNDM7c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBib290bWVtX3NpemVfbm9kZShpbnQgbmlkKQogewogCXBoeXNfYWRkcl90IHNpemU7CiAKLQlpZiAoc2NyYXRjaF9zY2FsZSkgewomIzQzOwlpZiAoYm9vdG1lbV9zY2FsZSkgewogCQlzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLAogCQkJCQkJICAgbmlkKTsKIAkJLyogRG8gbm90IGNvdW50IEh1Z2VUTEIgcGFnZXMuICovCiAJCXNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLAogCQkJCQkJICAgICAgIG5pZCk7Ci0JCXNpemUgPSBzaXplICogc2NyYXRjaF9zY2FsZSAvIDEwMDsKJiM0MzsJCXNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDsKIAl9IGVsc2UgewotCQlzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7CiYjNDM7CQlzaXplID0gYm9vdG1lbV9zaXplX3Blcm5vZGU7CiAJfQogCi0JcmV0dXJuIHJvdW5kX3VwKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTsKIH0KIAotYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKQomIzQzO2Jvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSkKIHsKLQlwaHlzX2FkZHJfdCBzY3JhdGNoX3N0YXJ0LCBzY3JhdGNoX2VuZDsKJiM0MzsJcGh5c19hZGRyX3QgYm9vdG1lbV9zdGFydCwgYm9vdG1lbV9lbmQ7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykgewotCQlzY3JhdGNoX3N0YXJ0ID0ga2hvX3NjcmF0Y2hbaV0uYWRkcjsKLQkJc2NyYXRjaF9lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICYjNDM7IGtob19zY3JhdGNoW2ldLnNpemU7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBraG9fYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib290bWVtX3N0YXJ0ID0ga2hvX2Jvb3RtZW1baV0uYWRkcjsKJiM0MzsJCWJvb3RtZW1fZW5kID0ga2hvX2Jvb3RtZW1baV0uYWRkciAmIzQzOyBraG9fYm9vdG1lbVtpXS5zaXplOwogCi0JCWlmIChwaHlzICZsdDsgc2NyYXRjaF9lbmQgJmFtcDsmYW1wOyAocGh5cyAmIzQzOyBzaXplKSAmZ3Q7IHNjcmF0Y2hfc3RhcnQpCiYjNDM7CQlpZiAocGh5cyAmbHQ7IGJvb3RtZW1fZW5kICZhbXA7JmFtcDsgKHBoeXMgJiM0Mzsgc2l6ZSkgJmd0OyBib290bWVtX3N0YXJ0KQogCQkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC04MTksNyAmIzQzOzgxOSw3IEBAIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSkKIH0KIAogLyoqCi0gKiBraG9fcmVzZXJ2ZV9zY3JhdGNoIC0gUmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IGZvciBrZXhlYwomIzQzOyAqIGtob19yZXNlcnZlX2Jvb3RtZW0gLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjCiAgKgogICogV2l0aCBLSE8gd2UgY2FuIHByZXNlcnZlIGFyYml0cmFyeSBwYWdlcyBpbiB0aGUgc3lzdGVtLiBUbyBlbnN1cmUgd2Ugc3RpbGwKICAqIGhhdmUgYSBsYXJnZSBjb250aWd1b3VzIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiB3ZSBzZWFyY2ggdGhlIHBoeXNpY2FsIGFkZHJlc3MKQEAgLTgyNyw3ICYjNDM7ODI3LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKQogICogYWN0aXZlLiBUaGlzIENNQSByZWdpb24gd2lsbCBvbmx5IGJlIHVzZWQgZm9yIG1vdmFibGUgcGFnZXMgd2hpY2ggYXJlIG5vdCBhCiAgKiBwcm9ibGVtIGZvciB1cyBkdXJpbmcgS0hPIGJlY2F1c2Ugd2UgY2FuIGp1c3QgbW92ZSB0aGVtIHNvbWV3aGVyZSBlbHNlLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9ib290bWVtKHZvaWQpCiB7CiAJcGh5c19hZGRyX3QgYWRkciwgc2l6ZTsKIAlpbnQgbmlkLCBpID0gMDsKQEAgLTgzNSw3MyAmIzQzOzgzNSw3MyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQogCWlmICgha2hvX2VuYWJsZSkKIAkJcmV0dXJuOwogCi0Jc2NyYXRjaF9zaXplX3VwZGF0ZSgpOwomIzQzOwlib290bWVtX3NpemVfdXBkYXRlKCk7CiAKIAkvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovCi0Ja2hvX3NjcmF0Y2hfY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgJiM0MzsgMjsKLQlzaXplID0ga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCk7Ci0Ja2hvX3NjcmF0Y2ggPSBtZW1ibG9ja19hbGxvYyhzaXplLCBQQUdFX1NJWkUpOwotCWlmICgha2hvX3NjcmF0Y2gpIHsKLQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxuJiMzNDspOwomIzQzOwlraG9fYm9vdG1lbV9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyOwomIzQzOwlzaXplID0ga2hvX2Jvb3RtZW1fY250ICogc2l6ZW9mKCpraG9fYm9vdG1lbSk7CiYjNDM7CWtob19ib290bWVtID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTsKJiM0MzsJaWYgKCFraG9fYm9vdG1lbSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgYm9vdG1lbSBhcnJheVxuJiMzNDspOwogCQlnb3RvIGVycl9kaXNhYmxlX2tobzsKIAl9CiAKIAkvKgotCSAqIHJlc2VydmUgc2NyYXRjaCBhcmVhIGluIGxvdyBtZW1vcnkgZm9yIGxvd21lbSBhbGxvY2F0aW9ucyBpbiB0aGUKJiM0MzsJICogcmVzZXJ2ZSBib290bWVtIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZQogCSAqIG5leHQga2VybmVsCiAJICovCi0Jc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07Ci0JYWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsCiYjNDM7CXNpemUgPSBib290bWVtX3NpemVfbG93bWVtOwomIzQzOwlhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywgMCwKIAkJCQkJIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpOwogCWlmICghYWRkcikgewotCQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcbiYjMzQ7KTsKLQkJZ290byBlcnJfZnJlZV9zY3JhdGNoX2Rlc2M7CiYjNDM7CQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfZnJlZV9ib290bWVtX2Rlc2M7CiAJfQogCi0Ja2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7Ci0Ja2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7CiYjNDM7CWtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyOwomIzQzOwlraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTsKIAlpJiM0MzsmIzQzOzsKIAogCS8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqLwotCXNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsOwotCWFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTsKJiM0MzsJc2l6ZSA9IGJvb3RtZW1fc2l6ZV9nbG9iYWw7CiYjNDM7CWFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTsKIAlpZiAoIWFkZHIpIHsKLQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIHNjcmF0Y2ggYnVmZmVyXG4mIzM0Oyk7Ci0JCWdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhczsKJiM0MzsJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBib290bWVtXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGVycl9mcmVlX2Jvb3RtZW1fYXJlYXM7CiAJfQogCi0Ja2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7Ci0Ja2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7CiYjNDM7CWtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyOwomIzQzOwlraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTsKIAlpJiM0MzsmIzQzOzsKIAogCS8qCiAJICogTG9vcCBvdmVyIG5vZGVzIHRoYXQgaGF2ZSBib3RoIG1lbW9yeSBhbmQgYXJlIG9ubGluZS4gU2tpcAotCSAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS4KJiM0MzsJICogbWVtb3J5bGVzcyBub2RlcywgYXMgd2UgY2FuIG5vdCBhbGxvY2F0ZSBib290bWVtIGFyZWFzIHRoZXJlLgogCSAqLwogCWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgewotCQlzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTsKLQkJYWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywKJiM0MzsJCXNpemUgPSBib290bWVtX3NpemVfbm9kZShuaWQpOwomIzQzOwkJYWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywKIAkJCQkJCTAsIE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsCiAJCQkJCQluaWQsIHRydWUpOwogCQlpZiAoIWFkZHIpIHsKLQkJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIG5pZCAlZCBzY3JhdGNoIGJ1ZmZlclxuJiMzNDssIG5pZCk7Ci0JCQlnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgbmlkICVkIGJvb3RtZW1cbiYjMzQ7LCBuaWQpOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhczsKIAkJfQogCi0JCWtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyOwotCQlraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTsKJiM0MzsJCWtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyOwomIzQzOwkJa2hvX2Jvb3RtZW1baV0uc2l6ZSA9IHNpemU7CiAJCWkmIzQzOyYjNDM7OwogCX0KIAogCXJldHVybjsKIAotZXJyX2ZyZWVfc2NyYXRjaF9hcmVhczoKJiM0MztlcnJfZnJlZV9ib290bWVtX2FyZWFzOgogCWZvciAoaS0tOyBpICZndDs9IDA7IGktLSkKLQkJbWVtYmxvY2tfcGh5c19mcmVlKGtob19zY3JhdGNoW2ldLmFkZHIsIGtob19zY3JhdGNoW2ldLnNpemUpOwotZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOgotCW1lbWJsb2NrX2ZyZWUoa2hvX3NjcmF0Y2gsIGtob19zY3JhdGNoX2NudCAqIHNpemVvZigqa2hvX3NjcmF0Y2gpKTsKJiM0MzsJCW1lbWJsb2NrX3BoeXNfZnJlZShraG9fYm9vdG1lbVtpXS5hZGRyLCBraG9fYm9vdG1lbVtpXS5zaXplKTsKJiM0MztlcnJfZnJlZV9ib290bWVtX2Rlc2M6CiYjNDM7CW1lbWJsb2NrX2ZyZWUoa2hvX2Jvb3RtZW0sIGtob19ib290bWVtX2NudCAqIHNpemVvZigqa2hvX2Jvb3RtZW0pKTsKIGVycl9kaXNhYmxlX2tobzoKLQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcmVhLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcbiYjMzQ7KTsKJiM0MzsJcHJfd2FybigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGJvb3RtZW0sIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxuJiMzNDspOwogCWtob19lbmFibGUgPSBmYWxzZTsKIH0KIApAQCAtOTExLDExICYjNDM7OTExLDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpCiAgKiBvbiBzbWFsbGVyIHN5c3RlbXMuIFRoZSBhbGdvcml0aG0gaXRzZWxmIGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHZhbHVlLAogICogc28gaXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBkaWZmZXJlbnQgaGV1cmlzdGljIGxhdGVyIGlmIG5lZWRlZC4KICAqLwotI2RlZmluZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRQkJU1pfMUcKLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUCWNvbnN0X2lsb2cyKEtIT19TQ1JBVENIX0VYVF9CTEtTSVpFKQomIzQzOyNkZWZpbmUgS0hPX0RJU0NPVkVSX0JMS1NJWkUJCVNaXzFHCiYjNDM7I2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0hJRlQJY29uc3RfaWxvZzIoS0hPX0RJU0NPVkVSX0JMS1NJWkUpCiAKIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovCi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSkKJiM0MztzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBraG9fcmFkaXhfdHJlZSAqYnVzeV9ibG9ja3MgPSBkYXRhOwogCXBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7CkBAIC05MzAsNTQgJiM0Mzs5MzAsNTcgQEAgc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX2xlYWYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpCiAJZW5kID0gc3RhcnQgJiM0MzsgKDFVTCAmbHQ7Jmx0OyAob3JkZXIgJiM0MzsgUEFHRV9TSElGVCkpOwogCiAJd2hpbGUgKHN0YXJ0ICZsdDsgZW5kKSB7Ci0JCWVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCAmZ3Q7Jmd0OyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQpOwomIzQzOwkJZXJyID0ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHN0YXJ0ICZndDsmZ3Q7IEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCXN0YXJ0ICYjNDM7PSAoMVVMICZsdDsmbHQ7IEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7CiYjNDM7CQlzdGFydCAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBLSE9fRElTQ09WRVJfQkxLU0hJRlQpOwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKiBDYWxsZWQgZm9yIHRoZSBLSE8gcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlLiAqLwotc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSkKJiM0MztzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfd2Fsa19ub2RlKHBoeXNfYWRkcl90IHBoeXMsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGtob19yYWRpeF90cmVlICpidXN5X2Jsb2NrcyA9IGRhdGE7CiAKLQlyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHBoeXMgJmd0OyZndDsgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTsKJiM0MzsJcmV0dXJuIGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBwaHlzICZndDsmZ3Q7IEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7CiB9CiAKIC8qIENhbGxlZCBmb3IgdGhlIGJ1c3kgYmxvY2sgcmFkaXggdHJlZS4gKi8KLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKQomIzQzO3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl9tYXJrX25vcHJzcnYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpCiB7CiAJcGh5c19hZGRyX3QgKnByZXZfZW5kID0gZGF0YTsKLQlwaHlzX2FkZHJfdCBzdGFydCA9IGtleSAmbHQ7Jmx0OyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQ7CiYjNDM7CXBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5ICZsdDsmbHQ7IEtIT19ESVNDT1ZFUl9CTEtTSElGVDsKIAlpbnQgZXJyOwogCiAJaWYgKHN0YXJ0ICZndDsgKnByZXZfZW5kKSB7Ci0JCWVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7CiYjNDM7CQllcnIgPSBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQkqcHJldl9lbmQgPSBzdGFydCAmIzQzOyAoMVVMICZsdDsmbHQ7IEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7CiYjNDM7CSpwcmV2X2VuZCA9IHN0YXJ0ICYjNDM7ICgxVUwgJmx0OyZsdDsgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIGtob19leHRlbmRfc2NyYXRjaCAtIEV4dGVuZCB0aGUgc2NyYXRjaCByZWdpb25zCiYjNDM7ICoga2hvX2Rpc2NvdmVyX25vcHJzcnYgLSBEaXNjb3ZlciBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zCiYjNDM7ICoKJiM0MzsgKiBEaXNjb3ZlcnMgbWVtb3J5IHJhbmdlcyB3aXRoIG5vIHByZXNlcnZlZCBtZW1vcnkgYW5kIG1hcmtzIGl0IGFzIE5PUFJTUlYuCiYjNDM7ICogVGhpcyBsZXRzIG1lbWJsb2NrIGFsbG9jYXRlIG1lbW9yeSBmcm9tIGFyZWFzIG91dHNpZGUgS0hPIGJvb3RtZW0uCiAgKgogICogVGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUgbWl4ZXMgYm90aCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlcgogICogaW50byBhIHNpbmdsZSBrZXkuIFRoaXMgbWFrZXMgaXQgaGFyZCB0byBsb29rIGZvciBmcmVlIHJhbmdlcyBkaXJlY3RseS4gVGhpcwogICogZnVuY3Rpb24gZmlyc3Qgd2Fsa3MgdGhlIHJhZGl4IHRyZWUgYW5kIGRpZ2VzdHMgaXQgZG93biBpbnRvIGFub3RoZXIgcmFkaXgKLSAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkUgd2hpY2gKLSAqIGNvbnRhaW4gcHJlc2VydmVkIG1lbW9yeS4KJiM0MzsgKiB0cmVlLCB3aG9zZSBrZXlzIGlkZW50aWZ5IGJsb2NrcyBvZiBzaXplIEtIT19ESVNDT1ZFUl9CTEtTSVpFIHdoaWNoIGNvbnRhaW4KJiM0MzsgKiBwcmVzZXJ2ZWQgbWVtb3J5LgogICoKICAqIFRoZW4gaXQgd2Fsa3MgdGhlIGRpZ2VzdGVkIHJhZGl4IHRyZWUgYW5kIG1hcmtzIGV2ZXJ5dGhpbmcgdGhhdCBkb2VzbiYjMzk7dCBoYXZlCi0gKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIHNjcmF0Y2guCiYjNDM7ICogcHJlc2VydmVkIG1lbW9yeSBhcyBOT1BSU1JWLgogICoKLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gc2NyYXRjaCBoYXMKJiM0MzsgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGJvb3RtZW0gaGFzCiAgKiBhdmFpbGFibGUgc3BhY2UuCiAgKgogICogTk9URTogVGhlIHBhZ2VzIG9mIHRoZSBLSE8gcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlIHRhYmxlcyBhcmUgbm90IG1hcmtlZApAQCAtOTg2LDE4ICYjNDM7OTg5LDE4IEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKQogICogdGhlbSB0byBiZSAmIzM0O3ByZXNlcnZlZCBtZW1vcnkmIzM0OyBhbmQgbWFya3MgdGhlaXIgYmxvY2tzIGFzIGJ1c3kuCiAgKgogICogTk9URTogZWZpX2luaXQoKTo6cmVzZXJ2ZV9yZWdpb25zKCkgcmVtb3ZlcyBhbGwgcmVnaW9ucyBleGNlcHQKLSAqIE1FTUJMT0NLX0tIT19TQ1JBVENILiBUaGlzIGZ1bmN0aW9uIGFkZHMgc3VjaCByZWdpb25zIGJ1dCB0aGV5IGFyZSBub3QgS0hPCi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZQomIzQzOyAqIE1FTUJMT0NLX0tIT19OT1BSU1JWLiBUaGlzIGZ1bmN0aW9uIGFkZHMgc3VjaCByZWdpb25zIGJ1dCB0aGV5IGFyZSBub3QgS0hPCiYjNDM7ICogYm9vdCBtZW1vcnksIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUKICAqIGNhbGxlZCBhZnRlciByZXNlcnZlX3JlZ2lvbnMoKS4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKQogewogCWNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7Ci0JCS5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsCi0JCS5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsCiYjNDM7CQkubGVhZiA9IGtob19kaXNjb3Zlcl93YWxrX2xlYWYsCiYjNDM7CQkubm9kZSA9IGtob19kaXNjb3Zlcl93YWxrX25vZGUsCiAJfTsKIAljb25zdCBzdHJ1Y3Qga2hvX3JhZGl4X3dhbGtfY2IgZXh0X2NiID0gewotCQkubGVhZiA9IGtob19leHRfbWFya19zY3JhdGNoLAomIzQzOwkJLmxlYWYgPSBraG9fZGlzY292ZXJfbWFya19ub3Byc3J2LAogCX07CiAJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidXN5X3JhZGl4X2NsYXNzOwogCXN0cnVjdCBraG9fcmFkaXhfdHJlZSBidXN5X2Jsb2NrczsKQEAgLTEwMjIsMjEgJiM0MzsxMDI1LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fZXh0ZW5kX3NjcmF0Y2godm9pZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCS8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIHNjcmF0Y2guICovCiYjNDM7CS8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIG5vcHJzcnYuICovCiAJZXJyID0ga2hvX3JhZGl4X3dhbGtfdHJlZSgmYW1wO2J1c3lfYmxvY2tzLCAmYW1wO2V4dF9jYiwgJmFtcDtwcmV2X2VuZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAkvKiBNYXJrIGV2ZXJ5dGhpbmcgZnJvbSBsYXN0IGJ1c3kgYmxvY2sgdG8gZW5kIG9mIERSQU0uICovCiAJaWYgKHByZXZfZW5kICZsdDsgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSkKLQkJZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTsKJiM0MzsJCWVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7CiAKIAkvKiBmYWxsdGhyb3VnaCAqLwogb3V0OgogCWtob19yYWRpeF9kZXN0cm95X3RyZWUoJmFtcDtidXN5X2Jsb2Nrcyk7CiBwcmludDoKIAlpZiAoZXJyKQotCQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gZXh0ZW5kIHNjcmF0Y2g6ICVwZVxuJiMzNDssIEVSUl9QVFIoZXJyKSk7CiYjNDM7CQlwcl9lcnIoJiMzNDtGYWlsZWQgdG8gZGlzY292ZXIgZXh0cmEgYWxsb2NhdGFibGUgbWVtb3J5OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKGVycikpOwogfQogCiAvKioKQEAgLTExNTAsNyAmIzQzOzExNTMsNyBAQCBpbnQga2hvX3ByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJY29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSAmYW1wOyZhbXA7Ci0JICAgIFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gJmx0OyZsdDsgUEFHRV9TSElGVCwgUEFHRV9TSVpFICZsdDsmbHQ7IG9yZGVyKSkpCiYjNDM7CSAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBraG9fcmFkaXhfYWRkX2tleSh0cmVlLCBraG9fZW5jb2RlX3JhZGl4X2tleShQRk5fUEhZUyhwZm4pLApAQCAtMTIyOCw3ICYjNDM7MTIzMSw3IEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAJaW50IGVyciA9IDA7CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpICZhbXA7JmFtcDsKLQkgICAgV0FSTl9PTihraG9fc2NyYXRjaF9vdmVybGFwKHN0YXJ0X3BmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkgICAgV0FSTl9PTihraG9fYm9vdG1lbV9vdmVybGFwKHN0YXJ0X3BmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULAogCQkJCQlucl9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTgyNSw3ICYjNDM7MTgyOCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpCiAKIAllcnIgPSBraG9fcmFkaXhfaW5pdF90cmVlKHRyZWUsIE5VTEwpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfc2NyYXRjaDsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfYm9vdG1lbTsKIAogCWtob19vdXQuZmR0ID0ga2hvX2FsbG9jX3ByZXNlcnZlKFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihraG9fb3V0LmZkdCkpIHsKQEAgLTE4NTQsOSAmIzQzOzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlX3BmbiA9IFBIWVNfUEZOKGtob19zY3JhdGNoW2ldLmFkZHIpOwotCQl1bnNpZ25lZCBsb25nIGNvdW50ID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fYm9vdG1lbVtpXS5hZGRyKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fYm9vdG1lbVtpXS5zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXVuc2lnbmVkIGxvbmcgcGZuOwogCiAJCS8qCkBAIC0xODY0LDEwICYjNDM7MTg2NywxMCBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKQogCQkgKiBjb3JyZXNwb25kaW5nIFBSRVNFTlQgYml0IGluIHRoZSBrZXJuZWwgcGFnZSB0YWJsZS4KIAkJICogU3Vic2VxdWVudCBrbWVtbGVhayBzY2FucyBvZiB0aGVzZSBwYWdlcyBjYXVzZSB0aGUKIAkJICogbm9uLVBSRVNFTlQgcGFnZSBmYXVsdHMuCi0JCSAqIE1hcmsgc2NyYXRjaCBhcmVhcyB3aXRoIGttZW1sZWFrX2lnbm9yZV9waHlzKCkgdG8gZXhjbHVkZQomIzQzOwkJICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlCiAJCSAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy4KIAkJICovCi0JCWttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpOwomIzQzOwkJa21lbWxlYWtfaWdub3JlX3BoeXMoa2hvX2Jvb3RtZW1baV0uYWRkcik7CiAJCWZvciAocGZuID0gYmFzZV9wZm47IHBmbiAmbHQ7IGJhc2VfcGZuICYjNDM7IGNvdW50OwogCQkgICAgIHBmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKQogCQkJaW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHBmbl90b19wYWdlKHBmbikpOwpAQCAtMTg4MywxMSAmIzQzOzE4ODYsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZCkKIAlraG9fdW5wcmVzZXJ2ZV9mcmVlKGtob19vdXQuZmR0KTsKIGVycl9mcmVlX2tob19yYWRpeF90cmVlOgogCWtob19yYWRpeF9kZXN0cm95X3RyZWUodHJlZSk7Ci1lcnJfZnJlZV9zY3JhdGNoOgomIzQzO2Vycl9mcmVlX2Jvb3RtZW06CiAJa2hvX291dC5mZHQgPSBOVUxMOwotCWZvciAoaW50IGkgPSAwOyBpICZsdDsga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykgewotCQl2b2lkICpzdGFydCA9IF9fdmEoa2hvX3NjcmF0Y2hbaV0uYWRkcik7Ci0JCXZvaWQgKmVuZCA9IHN0YXJ0ICYjNDM7IGtob19zY3JhdGNoW2ldLnNpemU7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpOwomIzQzOwkJdm9pZCAqZW5kID0gc3RhcnQgJiM0Mzsga2hvX2Jvb3RtZW1baV0uc2l6ZTsKIAogCQlmcmVlX3Jlc2VydmVkX2FyZWEoc3RhcnQsIGVuZCwgLTEsICYjMzQ7JiMzNDspOwogCX0KQEAgLTE5MDYsNyAmIzQzOzE5MDksNyBAQCB2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkKIAogCS8qCiAJICoga2hvX2dldF9tZW1fbWFwKCkgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBJZiBpdCBmYWlscywga2hvX3BvcHVsYXRlKCkKLQkgKiBjYXRjaGVzIHRoYXQgYW5kIG5ldmVyIHNldHMga2hvX2luLnNjcmF0Y2hfcGh5cywgd2hpY2ggc3RvcHMgbWVtb3J5CiYjNDM7CSAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uYm9vdG1lbV9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnkKIAkgKiByZXRyaWV2YWwuCiAJICovCiAJbWVtX21hcCA9IGtob19nZXRfbWVtX21hcChmZHQpOwpAQCAtMTkxNCw0MSAmIzQzOzE5MTcsNDAgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpCiAJCWdvdG8gZXJyOwogCiAJLyoKLQkgKiBraG9fc2NyYXRjaF9vdmVybGFwKCkgbmVlZHMga2hvX3NjcmF0Y2ggdG8gYmUgaW5pdGlhbGl6ZWQuIEl0Ci0JICogaXMgdXNlZCBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdAotCSAqIGVhcmx5LgomIzQzOwkgKiBraG9fYm9vdG1lbV9vdmVybGFwKCkgbmVlZHMga2hvX2Jvb3RtZW0gdG8gYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIHVzZWQKJiM0MzsJICogYnkgZnJlZV9hcmVhX2luaXQoKSBvbiBLSE8gYm9vdHMsIHNvIGluaXRpYWxpemUgaXQgZWFybHkuCiAJICovCi0Ja2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7CiYjNDM7CWtob19ib290bWVtID0gcGh5c190b192aXJ0KGtob19pbi5ib290bWVtX3BoeXMpOwogCiAJaWYgKGtob19yYWRpeF9pbml0X3RyZWUoJmFtcDtraG9faW4ucmFkaXhfdHJlZSwgbWVtX21hcCkpCiAJCWdvdG8gZXJyOwogCi0Ja2hvX2V4dGVuZF9zY3JhdGNoKCk7CiYjNDM7CWtob19kaXNjb3Zlcl9ub3Byc3J2KCk7CiAKIAlyZXR1cm47CiAKIGVycjoKIAkvKgogCSAqIEZhaWxlZCB0byBpbml0aWFsaXplIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gQ2xlYXIgRkRUCi0JICogYW5kIHNjcmF0Y2ggc28gS0hPIHVzZXJzIGRvbiYjMzk7dCB0cmVhdCBpdCBhcyBhIEtITyBib290LgomIzQzOwkgKiBhbmQgYm9vdG1lbSBzbyBLSE8gdXNlcnMgZG9uJiMzOTt0IHRyZWF0IGl0IGFzIGEgS0hPIGJvb3QuCiAJICovCiAJa2hvX2luLmZkdF9waHlzID0gMDsKLQlraG9faW4uc2NyYXRjaF9waHlzID0gMDsKJiM0MzsJa2hvX2luLmJvb3RtZW1fcGh5cyA9IDA7CiB9CiAKIHZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdCh2b2lkKQogewotCWlmIChraG9faW4uc2NyYXRjaF9waHlzKQomIzQzOwlpZiAoa2hvX2luLmJvb3RtZW1fcGh5cykKIAkJa2hvX21lbV9yZXRyaWV2ZSgpOwogCWVsc2UKLQkJa2hvX3Jlc2VydmVfc2NyYXRjaCgpOwomIzQzOwkJa2hvX3Jlc2VydmVfYm9vdG1lbSgpOwogfQogCiB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLAotCQkJIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cywgdTY0IHNjcmF0Y2hfbGVuKQomIzQzOwkJCSBwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbikKIHsKLQl1bnNpZ25lZCBpbnQgc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2xlbiAvIHNpemVvZigqa2hvX3NjcmF0Y2gpOwotCXN0cnVjdCBraG9fc2NyYXRjaCAqc2NyYXRjaCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGludCBib290bWVtX2NudCA9IGJvb3RtZW1fbGVuIC8gc2l6ZW9mKCpraG9fYm9vdG1lbSk7CiYjNDM7CXN0cnVjdCBraG9fYm9vdG1lbSAqYm9vdG1lbSA9IE5VTEw7CiAJcGh5c19hZGRyX3QgbWVtX21hcF9waHlzOwogCXZvaWQgKmZkdCA9IE5VTEw7CiAJYm9vbCBwb3B1bGF0ZWQgPSBmYWxzZTsKQEAgLTE5NzcsNTIgJiM0MzsxOTc5LDUyIEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sCiAJaWYgKCFtZW1fbWFwX3BoeXMpCiAJCWdvdG8gdW5tYXBfZmR0OwogCi0Jc2NyYXRjaCA9IGVhcmx5X21lbXJlbWFwKHNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pOwotCWlmICghc2NyYXRjaCkgewotCQlwcl93YXJuKCYjMzQ7c2V0dXA6IGZhaWxlZCB0byBtZW1yZW1hcCBzY3JhdGNoIChwaHlzPTB4JWxseCwgbGVuPSVsbGQpXG4mIzM0OywKLQkJCXNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pOwomIzQzOwlib290bWVtID0gZWFybHlfbWVtcmVtYXAoYm9vdG1lbV9waHlzLCBib290bWVtX2xlbik7CiYjNDM7CWlmICghYm9vdG1lbSkgewomIzQzOwkJcHJfd2FybigmIzM0O3NldHVwOiBmYWlsZWQgdG8gbWVtcmVtYXAgYm9vdG1lbSAocGh5cz0weCVsbHgsIGxlbj0lbGxkKVxuJiMzNDssCiYjNDM7CQkJYm9vdG1lbV9waHlzLCBib290bWVtX2xlbik7CiAJCWdvdG8gdW5tYXBfZmR0OwogCX0KIAogCS8qCi0JICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHRvIHVzZSBmb3IgZWFybHkgYm9vdAotCSAqIHB1cnBvcnNlcyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgc28gdGhhdCB3ZSBjYW4gcmVzaXplIHRoZQotCSAqIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC4KJiM0MzsJICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyB0bwomIzQzOwkgKiB1c2UgZm9yIGVhcmx5IGJvb3QgcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhbgomIzQzOwkgKiByZXNpemUgdGhlIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC4KIAkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmFyZWEgPSAmYW1wO3NjcmF0Y2hbaV07CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSAmYW1wO2Jvb3RtZW1baV07CiAJCXU2NCBzaXplID0gYXJlYS0mZ3Q7c2l6ZTsKIAogCQltZW1ibG9ja19hZGQoYXJlYS0mZ3Q7YWRkciwgc2l6ZSk7Ci0JCWVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS0mZ3Q7YWRkciwgc2l6ZSk7CiYjNDM7CQllcnIgPSBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KGFyZWEtJmd0O2FkZHIsIHNpemUpOwogCQlpZiAoZXJyKSB7Ci0JCQlwcl93YXJuKCYjMzQ7ZmFpbGVkIHRvIG1hcmsgdGhlIHNjcmF0Y2ggcmVnaW9uIDB4JXBhJiM0MzsweCVwYTogJXBlJiMzNDssCiYjNDM7CQkJcHJfd2FybigmIzM0O2ZhaWxlZCB0byBtYXJrIHRoZSBib290bWVtIHJlZ2lvbiAweCVwYSYjNDM7MHglcGE6ICVwZSYjMzQ7LAogCQkJCSZhbXA7YXJlYS0mZ3Q7YWRkciwgJmFtcDtzaXplLCBFUlJfUFRSKGVycikpOwotCQkJZ290byB1bm1hcF9zY3JhdGNoOwomIzQzOwkJCWdvdG8gdW5tYXBfYm9vdG1lbTsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgc2NyYXRjaCYjMzQ7LCAmYW1wO2FyZWEtJmd0O2FkZHIsICZhbXA7c2l6ZSk7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O01hcmtlZCAweCVwYSYjNDM7MHglcGEgYXMgYm9vdG1lbSYjMzQ7LCAmYW1wO2FyZWEtJmd0O2FkZHIsICZhbXA7c2l6ZSk7CiAJfQogCi0JbWVtYmxvY2tfcmVzZXJ2ZShzY3JhdGNoX3BoeXMsIHNjcmF0Y2hfbGVuKTsKJiM0MzsJbWVtYmxvY2tfcmVzZXJ2ZShib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTsKIAogCS8qCi0JICogTm93IHRoYXQgd2UgaGF2ZSBhIHZpYWJsZSByZWdpb24gb2Ygc2NyYXRjaCBtZW1vcnksIGxldCYjMzk7cyB0ZWxsCiYjNDM7CSAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIGJvb3QgbWVtb3J5LCBsZXQmIzM5O3MgdGVsbAogCSAqIHRoZSBtZW1ibG9ja3MgYWxsb2NhdG9yIHRvIG9ubHkgdXNlIHRoYXQgZm9yIGFueSBhbGxvY2F0aW9ucy4KIAkgKiBUaGF0IHdheSB3ZSBlbnN1cmUgdGhhdCBub3RoaW5nIHNjcmliYmxlcyBvdmVyIGluIHVzZSBkYXRhIHdoaWxlCiAJICogd2UgaW5pdGlhbGl6ZSB0aGUgcGFnZSB0YWJsZXMgd2hpY2ggd2Ugd2lsbCBuZWVkIHRvIGluZ2VzdCBhbGwKIAkgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC4KIAkgKi8KLQltZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSgpOwomIzQzOwltZW1ibG9ja19zZXRfa2hvX25vcHJzcnZfb25seSgpOwogCiAJa2hvX2luLmZkdF9waHlzID0gZmR0X3BoeXM7Ci0Ja2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5czsKLQlraG9fc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2NudDsKJiM0MzsJa2hvX2luLmJvb3RtZW1fcGh5cyA9IGJvb3RtZW1fcGh5czsKJiM0MzsJa2hvX2Jvb3RtZW1fY250ID0gYm9vdG1lbV9jbnQ7CiAKIAlwb3B1bGF0ZWQgPSB0cnVlOwogCXByX2luZm8oJiMzNDtmb3VuZCBrZXhlYyBoYW5kb3ZlciBkYXRhLlxuJiMzNDspOwogCi11bm1hcF9zY3JhdGNoOgotCWVhcmx5X21lbXVubWFwKHNjcmF0Y2gsIHNjcmF0Y2hfbGVuKTsKJiM0Mzt1bm1hcF9ib290bWVtOgomIzQzOwllYXJseV9tZW11bm1hcChib290bWVtLCBib290bWVtX2xlbik7CiB1bm1hcF9mZHQ6CiAJZWFybHlfbWVtdW5tYXAoZmR0LCBmZHRfbGVuKTsKIHJlcG9ydDoKQEAgLTIwMzQsNDcgJiM0MzsyMDM2LDQ3IEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sCiAKIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiB7Ci0Jc3NpemVfdCBzY3JhdGNoX3NpemU7CiYjNDM7CXNzaXplX3QgYm9vdG1lbV9zaXplOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBrZXhlY19idWYgc2NyYXRjaDsKJiM0MzsJc3RydWN0IGtleGVjX2J1ZiBib290bWVtOwogCiAJaWYgKCFraG9fZW5hYmxlIHx8IGltYWdlLSZndDt0eXBlID09IEtFWEVDX1RZUEVfQ1JBU0gpCiAJCXJldHVybiAwOwogCiAJaW1hZ2UtJmd0O2toby5mZHQgPSB2aXJ0X3RvX3BoeXMoa2hvX291dC5mZHQpOwogCi0Jc2NyYXRjaF9zaXplID0gc2l6ZW9mKCpraG9fc2NyYXRjaCkgKiBraG9fc2NyYXRjaF9jbnQ7Ci0Jc2NyYXRjaCA9IChzdHJ1Y3Qga2V4ZWNfYnVmKXsKJiM0MzsJYm9vdG1lbV9zaXplID0gc2l6ZW9mKCpraG9fYm9vdG1lbSkgKiBraG9fYm9vdG1lbV9jbnQ7CiYjNDM7CWJvb3RtZW0gPSAoc3RydWN0IGtleGVjX2J1Zil7CiAJCS5pbWFnZSA9IGltYWdlLAotCQkuYnVmZmVyID0ga2hvX3NjcmF0Y2gsCi0JCS5idWZzeiA9IHNjcmF0Y2hfc2l6ZSwKJiM0MzsJCS5idWZmZXIgPSBraG9fYm9vdG1lbSwKJiM0MzsJCS5idWZzeiA9IGJvb3RtZW1fc2l6ZSwKIAkJLm1lbSA9IEtFWEVDX0JVRl9NRU1fVU5LTk9XTiwKLQkJLm1lbXN6ID0gc2NyYXRjaF9zaXplLAomIzQzOwkJLm1lbXN6ID0gYm9vdG1lbV9zaXplLAogCQkuYnVmX2FsaWduID0gU1pfNjRLLCAvKiBNYWtlcyBpdCBlYXNpZXIgdG8gbWFwICovCiAJCS5idWZfbWF4ID0gVUxPTkdfTUFYLAogCQkudG9wX2Rvd24gPSB0cnVlLAogCX07Ci0JZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcigmYW1wO3NjcmF0Y2gpOwomIzQzOwllcnIgPSBrZXhlY19hZGRfYnVmZmVyKCZhbXA7Ym9vdG1lbSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQlpbWFnZS0mZ3Q7a2hvLnNjcmF0Y2ggPSAmYW1wO2ltYWdlLSZndDtzZWdtZW50W2ltYWdlLSZndDtucl9zZWdtZW50cyAtIDFdOwomIzQzOwlpbWFnZS0mZ3Q7a2hvLmJvb3RtZW0gPSAmYW1wO2ltYWdlLSZndDtzZWdtZW50W2ltYWdlLSZndDtucl9zZWdtZW50cyAtIDFdOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga2hvX3dhbGtfc2NyYXRjaChzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAomIzQzO3N0YXRpYyBpbnQga2hvX3dhbGtfYm9vdG1lbShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogCQkJICAgIGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKQogewogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGtob19ib290bWVtX2NudDsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHJlc291cmNlIHJlcyA9IHsKLQkJCS5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsCi0JCQkuZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciAmIzQzOyBraG9fc2NyYXRjaFtpXS5zaXplIC0gMSwKJiM0MzsJCQkuc3RhcnQgPSBraG9fYm9vdG1lbVtpXS5hZGRyLAomIzQzOwkJCS5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICYjNDM7IGtob19ib290bWVtW2ldLnNpemUgLSAxLAogCQl9OwogCi0JCS8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gc2NyYXRjaCByZWdpb24gKi8KJiM0MzsJCS8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gYm9vdG1lbSByZWdpb24gKi8KIAkJcmV0ID0gZnVuYygmYW1wO3Jlcywga2J1Zik7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTIwOTEsNyAmIzQzOzIwOTMsNyBAQCBpbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLAogCWlmICgha2hvX2VuYWJsZSB8fCBrYnVmLSZndDtpbWFnZS0mZ3Q7dHlwZSA9PSBLRVhFQ19UWVBFX0NSQVNIKQogCQlyZXR1cm4gMTsKIAotCXJldCA9IGtob193YWxrX3NjcmF0Y2goa2J1ZiwgZnVuYyk7CiYjNDM7CXJldCA9IGtob193YWxrX2Jvb3RtZW0oa2J1ZiwgZnVuYyk7CiAKIAlyZXR1cm4gcmV0ID09IDEgPyAwIDogLUVBRERSTk9UQVZBSUw7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMKaW5kZXggMjU3ZWU4YTUyYmU2Ni4uN2Q3NDQ3N2RhMGI3OSAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYwpAQCAtNzcsMjMgJiM0Mzs3NywyMyBAQCB2b2lkIGtob19kZWJ1Z2ZzX2Jsb2JfcmVtb3ZlKHN0cnVjdCBraG9fZGVidWdmcyAqZGJnLCB2b2lkICpibG9iKQogCX0KIH0KIAotc3RhdGljIGludCBzY3JhdGNoX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiYjNDM7c3RhdGljIGludCBib290bWVtX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KQotCQlzZXFfcHJpbnRmKG0sICYjMzQ7MHglbGx4XG4mIzM0Oywga2hvX3NjcmF0Y2hbaV0uYWRkcik7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsga2hvX2Jvb3RtZW1fY250OyBpJiM0MzsmIzQzOykKJiM0MzsJCXNlcV9wcmludGYobSwgJiMzNDsweCVsbHhcbiYjMzQ7LCBraG9fYm9vdG1lbVtpXS5hZGRyKTsKIAogCXJldHVybiAwOwogfQotREVGSU5FX1NIT1dfQVRUUklCVVRFKHNjcmF0Y2hfcGh5cyk7CiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGJvb3RtZW1fcGh5cyk7CiAKLXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiYjNDM7c3RhdGljIGludCBib290bWVtX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspCi0JCXNlcV9wcmludGYobSwgJiMzNDsweCVsbHhcbiYjMzQ7LCBraG9fc2NyYXRjaFtpXS5zaXplKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBraG9fYm9vdG1lbV9jbnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJc2VxX3ByaW50ZihtLCAmIzM0OzB4JWxseFxuJiMzNDssIGtob19ib290bWVtW2ldLnNpemUpOwogCiAJcmV0dXJuIDA7CiB9Ci1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9sZW4pOwomIzQzO0RFRklORV9TSE9XX0FUVFJJQlVURShib290bWVtX2xlbik7CiAKIF9faW5pdCB2b2lkIGtob19pbl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcsIGNvbnN0IHZvaWQgKmZkdCkKIHsKQEAgLTE4NiwxMyAmIzQzOzE4NiwxMyBAQCBfX2luaXQgaW50IGtob19vdXRfZGVidWdmc19pbml0KHN0cnVjdCBraG9fZGVidWdmcyAqZGJnKQogCWlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKQogCQlnb3RvIGVycl9ybWRpcjsKIAotCWYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2NyYXRjaF9waHlzJiMzNDssIDA0MDAsIGRpciwgTlVMTCwKLQkJCQkmYW1wO3NjcmF0Y2hfcGh5c19mb3BzKTsKJiM0MzsJZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtib290bWVtX3BoeXMmIzM0OywgMDQwMCwgZGlyLCBOVUxMLAomIzQzOwkJCQkmYW1wO2Jvb3RtZW1fcGh5c19mb3BzKTsKIAlpZiAoSVNfRVJSKGYpKQogCQlnb3RvIGVycl9ybWRpcjsKIAotCWYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2NyYXRjaF9sZW4mIzM0OywgMDQwMCwgZGlyLCBOVUxMLAotCQkJCSZhbXA7c2NyYXRjaF9sZW5fZm9wcyk7CiYjNDM7CWYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7Ym9vdG1lbV9sZW4mIzM0OywgMDQwMCwgZGlyLCBOVUxMLAomIzQzOwkJCQkmYW1wO2Jvb3RtZW1fbGVuX2ZvcHMpOwogCWlmIChJU19FUlIoZikpCiAJCWdvdG8gZXJyX3JtZGlyOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaAppbmRleCA4MDVkMmE3NmMzODgxLi5lOTY4NWUxZWY2ZDc4IDEwMDY0NAotLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgKQEAgLTE5LDggJiM0MzsxOSw4IEBAIHN0cnVjdCBraG9fZGVidWdmcyB7CiBzdHJ1Y3Qga2hvX2RlYnVnZnMge307CiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7Ci1leHRlcm4gdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDsKJiM0MztleHRlcm4gc3RydWN0IGtob19ib290bWVtICpraG9fYm9vdG1lbTsKJiM0MztleHRlcm4gdW5zaWduZWQgaW50IGtob19ib290bWVtX2NudDsKIAogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTCiBpbnQga2hvX2RlYnVnZnNfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTQuLjU0MTVlMGIzOGI1ZDUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtNDg1LDEwICYjNDM7NDg1LDYgQEAgY29uZmlnIEhBVkVfR1VQX0ZBU1QKIAlkZXBlbmRzIG9uIE1NVQogCWJvb2wKIAotIyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3ZlcgotY29uZmlnIE1FTUJMT0NLX0tIT19TQ1JBVENICi0JYm9vbAotCiAjIERvbiYjMzk7dCBkaXNjYXJkIGFsbG9jYXRlZCBtZW1vcnkgdXNlZCB0byB0cmFjayAmIzM0O21lbW9yeSYjMzQ7IGFuZCAmIzM0O3Jlc2VydmVkJiMzNDsgbWVtYmxvY2tzCiAjIGFmdGVyIGVhcmx5IGJvb3QsIHNvIGl0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIHRlc3QgZm9yIHZhbGlkaXR5IG9mIG1lbW9yeS4KICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLgpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggMzdlMDZlNzBjMWQwMC4uMDM1MTkxM2NlNzliMCAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1ibG9jay5jCkBAIC0xMTIsMTEgJiM0MzsxMTIsMTEgQEAgdW5zaWduZWQgbG9uZyBtaW5fbG93X3BmbjsKIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuOwogCi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENICi0vKiBXaGVuIHNldCB0byB0cnVlLCBvbmx5IGFsbG9jYXRlIGZyb20gTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggcmFuZ2VzICovCi1zdGF0aWMgYm9vbCBraG9fc2NyYXRjaF9vbmx5OwomIzQzOyNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIKJiM0MzsvKiBXaGVuIHNldCB0byB0cnVlLCBvbmx5IGFsbG9jYXRlIGZyb20gTUVNQkxPQ0tfS0hPX05PUFJTUlYgcmFuZ2VzICovCiYjNDM7c3RhdGljIGJvb2wga2hvX25vcHJzcnZfb25seTsKICNlbHNlCi0jZGVmaW5lIGtob19zY3JhdGNoX29ubHkgZmFsc2UKJiM0MzsjZGVmaW5lIGtob19ub3Byc3J2X29ubHkgZmFsc2UKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiBtZW1ibG9ja19tZW1vcnlfaW5pdF9yZWdpb25zW0lOSVRfTUVNQkxPQ0tfTUVNT1JZX1JFR0lPTlNdIF9faW5pdGRhdGFfbWVtYmxvY2s7CkBAIC0xNzgsOSAmIzQzOzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZCkKIAogc3RhdGljIGVudW0gbWVtYmxvY2tfZmxhZ3MgX19pbml0X21lbWJsb2NrIGNob29zZV9tZW1ibG9ja19mbGFncyh2b2lkKQogewotCS8qIHNraXAgbm9uLXNjcmF0Y2ggbWVtb3J5IGZvciBraG8gZWFybHkgYm9vdCBhbGxvY2F0aW9ucyAqLwotCWlmIChraG9fc2NyYXRjaF9vbmx5KQotCQlyZXR1cm4gTUVNQkxPQ0tfS0hPX1NDUkFUQ0g7CiYjNDM7CS8qIG9ubHkgdXNlIEtIT19OT1BSU1JWIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi8KJiM0MzsJaWYgKGtob19ub3Byc3J2X29ubHkpCiYjNDM7CQlyZXR1cm4gTUVNQkxPQ0tfS0hPX05PUFJTUlY7CiAKIAlyZXR1cm4gc3lzdGVtX2hhc19zb21lX21pcnJvciA/IE1FTUJMT0NLX01JUlJPUiA6IE1FTUJMT0NLX05PTkU7CiB9CkBAIC0xMTc0LDMzICYjNDM7MTE3NCwzMyBAQCBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaQogfQogCiAvKioKLSAqIG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2ggLSBNYXJrIGEgbWVtb3J5IHJlZ2lvbiBhcyBNRU1CTE9DS19LSE9fU0NSQVRDSC4KJiM0MzsgKiBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2IC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX05PUFJTUlYuCiAgKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb24KICAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCiAgKgotICogT25seSBtZW1vcnkgcmVnaW9ucyBtYXJrZWQgd2l0aCAlTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggd2lsbCBiZSBjb25zaWRlcmVkCiYjNDM7ICogT25seSBtZW1vcnkgcmVnaW9ucyBtYXJrZWQgd2l0aCAlTUVNQkxPQ0tfS0hPX05PUFJTUlYgd2lsbCBiZSBjb25zaWRlcmVkCiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KLV9faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQomIzQzO19faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewogCXJldHVybiBtZW1ibG9ja19zZXRjbHJfZmxhZygmYW1wO21lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSwgMSwKLQkJCQkgICAgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpOwomIzQzOwkJCQkgICAgTUVNQkxPQ0tfS0hPX05PUFJTUlYpOwogfQogCiAvKioKLSAqIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoIC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggZmxhZyBmb3IgYQomIzQzOyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYQogICogc3BlY2lmaWVkIHJlZ2lvbi4KICAqIEBiYXNlOiB0aGUgYmFzZSBwaHlzIGFkZHIgb2YgdGhlIHJlZ2lvbgogICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb24KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KLV9faW5pdCBpbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKJiM0MztfX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiB7CiAJcmV0dXJuIG1lbWJsb2NrX3NldGNscl9mbGFnKCZhbXA7bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAwLAotCQkJCSAgICBNRU1CTE9DS19LSE9fU0NSQVRDSCk7CiYjNDM7CQkJCSAgICBNRU1CTE9DS19LSE9fTk9QUlNSVik7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSwKQEAgLTEyMzYsOSAmIzQzOzEyMzYsOSBAQCBzdGF0aWMgYm9vbCBzaG91bGRfc2tpcF9yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAKIAkvKgogCSAqIEluIGVhcmx5IGFsbG9jIGR1cmluZyBrZXhlYyBoYW5kb3Zlciwgd2UgY2FuIG9ubHkgY29uc2lkZXIKLQkgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnMKJiM0MzsJICogTUVNQkxPQ0tfS0hPX05PUFJTUlYgcmVnaW9ucyBmb3IgdGhlIGFsbG9jYXRpb25zCiAJICovCi0JaWYgKChmbGFncyAmYW1wOyBNRU1CTE9DS19LSE9fU0NSQVRDSCkgJmFtcDsmYW1wOyAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpCiYjNDM7CWlmICgoZmxhZ3MgJmFtcDsgTUVNQkxPQ0tfS0hPX05PUFJTUlYpICZhbXA7JmFtcDsgIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KG0pKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTE3OTMsNyAmIzQzOzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpCiAJaWYgKG51bWFfdmFsaWRfbm9kZShuaWQpICZhbXA7JmFtcDsgIWV4YWN0X25pZCkgewogCQluaWQgPSBOVU1BX05PX05PREU7CiAJCS8qCi0JCSAqIElmIGEgcHJldmlvdXMgY2FuZGlkYXRlIG92ZXJsYXBwZWQgd2l0aCBLSE8gc2NyYXRjaCwgaXQgd291bGQKJiM0MzsJCSAqIElmIGEgcHJldmlvdXMgY2FuZGlkYXRlIG92ZXJsYXBwZWQgd2l0aCBLSE8gYm9vdG1lbSwgaXQgd291bGQKIAkJICogdXBkYXRlIHN0YXJ0IG9yIGVuZC4gTm93IHRoYXQgdGhlIHNlYXJjaCBpcyBvcGVuaW5nIHRvIGFsbAogCQkgKiBub2RlcywgcmVzZXQgdGhlbS4KIAkJICovCkBAIC0xODA5LDEyICYjNDM7MTgwOSwxMiBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpCiBmb3VuZDoKIAkvKgogCSAqIEh1Z2VUTEIgcGFnZXMgY2FuIGJlIHByZXNlcnZlZCB3aXRoIEtITyBhbmQgbm8gcHJlc2VydmVkIG1lbW9yeSBjYW4KLQkgKiBiZSBpbiBzY3JhdGNoLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggc2NyYXRjaC4KJiM0MzsJICogYmUgaW4gYm9vdG1lbS4gU28gcmV0cnkgaWYgZm91bmQgYWRkcmVzcyBvdmVybGFwcyB3aXRoIGJvb3RtZW0uCiAJICoKLQkgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJiMzOTt0IHRha2UgdG9vCiYjNDM7CSAqIEJvb3RtZW0gYXJlYXMgYXJlIG5vcm1hbGx5IG5vdCB2ZXJ5IGxhcmdlLCBzbyB0aGlzIHNob3VsZG4mIzM5O3QgdGFrZSB0b28KIAkgKiBtYW55IHJldHJpZXMuCiAJICovCi0JaWYgKGtob19zY3JhdGNoX292ZXJsYXAoYWRkciwgc2l6ZSkpIHsKJiM0MzsJaWYgKGtob19ib290bWVtX292ZXJsYXAoYWRkciwgc2l6ZSkpIHsKIAkJaWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKQogCQkJc3RhcnQgPSBhZGRyICYjNDM7IHNpemU7CiAJCWVsc2UKQEAgLTI0OTksNyAmIzQzOzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKQogCWZyZWVfdW51c2VkX21lbW1hcCgpOwogCXJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKCk7CiAKLQltZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KCk7CiYjNDM7CW1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkoKTsKIAlwYWdlcyA9IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KCk7CiAJdG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTsKIH0KQEAgLTI1OTcsMTUgJiM0MzsyNTk3LDE1IEBAIGludCByZXNlcnZlX21lbV9yZWxlYXNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKIAlyZXR1cm4gMTsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSAotX19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZCkKJiM0MzsjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSCiYjNDM7X19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCkKIHsKLQlraG9fc2NyYXRjaF9vbmx5ID0gdHJ1ZTsKJiM0MzsJa2hvX25vcHJzcnZfb25seSA9IHRydWU7CiB9CiAKLV9faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkKJiM0MztfX2luaXQgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydl9vbmx5KHZvaWQpCiB7Ci0Ja2hvX3NjcmF0Y2hfb25seSA9IGZhbHNlOwomIzQzOwlraG9fbm9wcnNydl9vbmx5ID0gZmFsc2U7CiB9CiAjZW5kaWYKIApAQCAtMjg2MSw3ICYjNDM7Mjg2MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVfbWVtKGNoYXIgKnApCiAJaWYgKHJlc2VydmVfbWVtX2tob19yZXZpdmUobmFtZSwgc2l6ZSwgYWxpZ24pKQogCQlyZXR1cm4gMTsKIAotCS8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIHNjcmF0Y2ggcmVnaW9uICovCiYjNDM7CS8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqLwogCXN0YXJ0ID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBhbGlnbik7CiAJaWYgKCFzdGFydCkgewogCQlwcl9lcnIoJiMzNDtyZXNlcnZlX21lbTogbWVtYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKQEAgLTI4ODYsNyAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7CiAJW2lsb2cyKE1FTUJMT0NLX0RSSVZFUl9NQU5BR0VEKV0gPSAmIzM0O0RSVl9NTkcmIzM0OywKIAlbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9ICYjMzQ7UlNWX05JVCYjMzQ7LAogCVtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9ICYjMzQ7UlNWX0tFUk4mIzM0OywKLQlbaWxvZzIoTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpXSA9ICYjMzQ7S0hPX1NDUkFUQ0gmIzM0OywKJiM0MzsJW2lsb2cyKE1FTUJMT0NLX0tIT19OT1BSU1JWKV0gPSAmIzM0O0tIT19OT1BSU1JWJiMzNDssCiB9OwogCiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKQpkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDc4ZDYzNzg5YTk2OTAuLmQwMzE1NmJlMGUxMDQgMTAwNjQ0Ci0tLSBhL21tL21tX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmMKQEAgLTY4MSw3ICYjNDM7NjgxLDcgQEAgc3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gcGZuICYjNDM7IG5yX3BhZ2VzOwogCiAJZm9yIChwZm4gPSBwYWdlYmxvY2tfYWxpZ24ocGZuKTsgcGZuICZsdDsgZW5kOyBwZm4gJiM0Mzs9IHBhZ2VibG9ja19ucl9wYWdlcykgewotCQllbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7CiYjNDM7CQllbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7CiAKIAkJaW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGZuX3RvX3BhZ2UocGZuKSwgbXQsIGZhbHNlKTsKIAkJaWYgKCFhdG9taWMgJmFtcDsmYW1wOyBJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKQpAQCAtNzY0LDcgJiM0Mzs3NjQsNyBAQCBzdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAKIAlpZiAocGFnZWJsb2NrX2FsaWduZWQocGZuKSkgewogCQllbnVtIG1pZ3JhdGV0eXBlIG10ID0KLQkJCWtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgTUlHUkFURV9NT1ZBQkxFKTsKJiM0MzsJCQlraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIE1JR1JBVEVfTU9WQUJMRSk7CiAJCWluaXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBmbl90b19wYWdlKHBmbiksIG10LCBmYWxzZSk7CiAJfQogfQpAQCAtOTI0LDcgJiM0Mzs5MjQsNyBAQCB2b2lkIF9fbWVtaW5pdCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZQogCQkgKiBvdmVyIHRoZSBwbGFjZSBkdXJpbmcgc3lzdGVtIGJvb3QuCiAJCSAqLwogCQlpZiAocGFnZWJsb2NrX2FsaWduZWQocGZuKSkgewotCQkJZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpOwomIzQzOwkJCWVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTsKIAogCQkJaW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgbXQsIGlzb2xhdGVfcGFnZWJsb2NrKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oCmluZGV4IGU4NmJiOTAwMGIyMmYuLjQ2YzVhMTU2ZmNlNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgKQEAgLTY2LDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAKICNkZWZpbmUgX19TZXRQYWdlUmVzZXJ2ZWQocCkJKCh2b2lkKShwKSkKIAotc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE3MwoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiAxNTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktITyBTY3JhdGNoIHRvIEJvb3RtZW0vTk9QUlNWOiBBIFJlbmFtZSBhbmQgUmVmYWN0b3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBlc3NlbnRpYWxseSByZW5hbWluZyB0aGUgJiMzNDtraG9fc2NyYXRjaCYjMzQ7IGNvbmNlcHQgdG8gJiMzNDtraG9fYm9vdG1lbSYjMzQ7IG9yICYjMzQ7a2hvX25vcHJzcnYmIzM0OyB3aXRoaW4gdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIGZlYXR1cmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBzdHJhaWdodGZvcndhcmQgcmVuYW1lLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNvdWxkIGJlIGx1cmtpbmcuCgpGaXJzdCBwYXNzOiB0aGlzIHNlZW1zIGxpa2UgYSBjb21wbGV0ZSBzd2VlcCBvZiByZW5hbWluZyB2YXJpYWJsZXMsIHN0cnVjdCBtZW1iZXJzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1lbWJsb2NrIGZsYWdzLCBhbmQgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMuIFdlIGhhdmUgY2hhbmdlcyBhY3Jvc3MgZG9jdW1lbnRhdGlvbiwgeDg2IHNldHVwLCBFRkkgaW5pdGlhbGl6YXRpb24sIE9GIGtleGVjLCBLSE8gY29yZSBsb2dpYywgbWVtYmxvY2ssIGFuZCBtbV9pbml0LmMuIFRoZSBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIGBraG9fc2NyYXRjaD1gIGJlY29tZXMgYGtob19ib290bWVtPWAsIGBzdHJ1Y3Qga2hvX3NjcmF0Y2hgIGJlY29tZXMgYHN0cnVjdCBraG9fYm9vdG1lbWAsIGBNRU1CTE9DS19LSE9fU0NSQVRDSGAgaXMgbm93IGBNRU1CTE9DS19LSE9fTk9QUlNSVmAsIGFuZCBmdW5jdGlvbnMgbGlrZSBga2hvX2V4dGVuZF9zY3JhdGNoYCBhcmUgbm93IGBraG9fZGlzY292ZXJfbm9wcnNydmAsIGFuZCBzbyBvbi4gRXZlbiBkZWJ1Z2ZzIGVudHJpZXMgYXJlIHJlbmFtZWQsIGBzY3JhdGNoX3BoeXNgIHRvIGBib290bWVtX3BoeXNgLCB5b3UgZ2V0IHRoZSBpZGVhLiBBbHNvIHRoZSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzICYjMzQ7bGludXgsa2hvLXNjcmF0Y2gmIzM0OyB0byAmIzM0O2xpbnV4LGtoby1ib290bWVtJiMzNDsuIEFsbCB0aGUgdXN1YWwgc3VzcGVjdHMuCgpPa2F5LCBpcyB0aGVyZSBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCYjMzk7cyBhbGwgYSByZW5hbWUgc28gZmFyLiBObyBsb2dpYyBpcyBhbHRlcmVkLCBqdXN0IG5hbWUgY2hhbmdlcy4gVGhlIG9ubHkgdGhpbmcgcmVtb3RlbHkgaW50ZXJlc3RpbmcgaXMgdGhhdCB0aGUgYE1FTUJMT0NLX0tIT19TQ1JBVENIYCBjb25maWcgb3B0aW9uIHNlZW1zIHRvIGJlIGdvbmUuIEJ1dCwgaXQmIzM5O3MgcmVwbGFjZWQgYnkgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAsIHNvLCB0aGlzIGlzIG1vcmUgb2YgYSBzaW1wbGlmaWNhdGlvbiB0aGFuIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGEgZmV3IG9mIHRoZSBhZmZlY3RlZCBmaWxlcyB0byBjb25maXJtOiBJbiBga2hvX2V4dGVuZF9zY3JhdGNoYCAobm93IGBraG9fZGlzY292ZXJfbm9wcnNydmApIHRoZSBpbnRlcm5hbCBjb25zdGFudHMgcmVtYWluIHVuY2hhbmdlZCwganVzdCBhIHJlbmFtZS4gR29pbmcgdGhyb3VnaCBgYXJjaC94ODYva2VybmVsL2U4MjAuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jYCwgYGRyaXZlcnMvb2Yva2V4ZWMuY2AsIGFuZCBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AsIGl0JiMzOTtzIGp1c3QgYSByZW5hbWUsIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBJIHdhcyBhIGJpdCB3b3JyaWVkIHdoZW4gSSBzYXcgdGhhdCB0aGUgb2xkIGZ1bmN0aW9uIG5hbWVzIHdlcmUgcHJlc2VudC4KCk5vIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY291bGQgYmUgZnV6emVkIGhlcmUhIEkmIzM5O20gcHJldHR5IHN1cmUgd2UmIzM5O3JlIGdvb2QuIEl0JiMzOTtzIGEgcHVyZSByZW5hbWUvcmVmYWN0b3JpbmcgcGF0Y2guIFRoZSBleGVjdXRpb24gZmxvdyByZW1haW5zIGlkZW50aWNhbCwgYW5kIHRoZXJlJiMzOTtzIG5vIG5ldyBsb2dpYy4gVGhlcmUgYXJlIG5vIHNpZGUtZWZmZWN0cyBJIGNhbiBpZGVudGlmeSBhdCBhbGwuCgpKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O20gZG9pbmcgYSBmaW5hbCBzd2VlcCwgYnV0LCBpdCYjMzk7cyBqdXN0IG1vcmUgcmVuYW1lcy4gTm90aGluZyBvZiBpbnRlcmVzdCBoZXJlLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBzYWZlLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyBqdXN0IGEgcmVmYWN0b3JpbmcuIEkmIzM5O2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAmIzM5O3NjcmF0Y2gmIzM5OyBtZW1vcnkgY29uY2VwdCBpbiB0aGUgS2V4ZWMgSGFuZE92ZXIgKEtITykgZmVhdHVyZSB0byAmIzM5O2Jvb3RtZW0mIzM5OyBhbmQgJiMzOTtub3Byc3J2JiMzOTsuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgdGhlICYjMzk7c2NyYXRjaCYjMzk7IG1lbW9yeSBjb25jZXB0IGluIHRoZSBLZXhlYyBIYW5kT3ZlciAoS0hPKSBmZWF0dXJlIHRvICYjMzk7Ym9vdG1lbSYjMzk7IGFuZCAmIzM5O25vcHJzcnYmIzM5Oy4gSXQgcmVuYW1lcyBjb21tYW5kLWxpbmUgcGFyYW1ldGVycywgZGV2aWNlIHRyZWUgcHJvcGVydGllcywgZGVidWdmcyBmaWxlcywgc3RydWN0IG5hbWVzLCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgYW5kIGEgS2NvbmZpZyBvcHRpb24sIGJ1dCBkb2VzIG5vdCBhbHRlciBhbnkgZXhlY3V0aW9uIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDk6MTkuMTM2MTYzMzYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3ODQ0ODAwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAnc2NyYXRjaCcgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJ2Jvb3RtZW0nIGFuZCAnbm9wcnNydicuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ5OjE5LjEzNjE3MDkzMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1MjU5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODViZjU3NjZlZGNmY2ZkNTMyN2U0ZmNkOWVjYjc0Njg0ZDRlNDI3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0OToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTAzOTI3ZmZiODVkMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTI5ODksMTEgKzI5ODksMTIgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFx0XFx0XFx0XFxcIjBcXFwiIHwgXFxcIm9mZlxcXCIgfCBcXFwiblxcXCIgLSBrZXhlYyBoYW5kb3ZlciBpcyBkaXNhYmxlZFxcbiBcXHRcXHRcXHRcXFwiMVxcXCIgfCBcXFwib25cXFwiIHwgXFxcInlcXFwiIC0ga2V4ZWMgaGFuZG92ZXIgaXMgZW5hYmxlZFxcbiBcXG4tXFx0a2hvX3NjcmF0Y2g9XFx0W0tFWEVDLEVBUkxZXVxcbitcXHRraG9fYm9vdG1lbT1cXHRbS0VYRUMsRUFSTFldXFxuIFxcdFxcdFxcdEZvcm1hdDogbGxbS01HXSxtbVtLTUddLG5uW0tNR10gfCBubiVcXG4tXFx0XFx0XFx0RGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgS0hPIHNjcmF0Y2ggcmVnaW9uLiBUaGUgS0hPXFxuLVxcdFxcdFxcdHNjcmF0Y2ggcmVnaW9ucyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeVxcbi1cXHRcXHRcXHRyYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXFxuK1xcbitcXHRcXHRcXHREZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBLSE8gYm9vdCBtZW1vcnkgcmVnaW9uLiBUaGVcXG4rXFx0XFx0XFx0S0hPIGJvb3QgbWVtb3J5IHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xcbitcXHRcXHRcXHRtZW1vcnkgcmFuZ2VzIHRoYXQgY2FuIG9ubHkgYmUgdXNlZCBmb3Igbm9uLWtlcm5lbFxcbiBcXHRcXHRcXHRhbGxvY2F0aW9ucy4gVGhhdCB3YXksIGV2ZW4gd2hlbiBtZW1vcnkgaXMgaGVhdmlseVxcbiBcXHRcXHRcXHRmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZFxcbiBcXHRcXHRcXHRrZXJuZWwgd2lsbCBhbHdheXMgaGF2ZSBlbm91Z2ggY29udGlndW91cyByYW5nZXMgdG9cXG5AQCAtMzAwMiwxMCArMzAwMywxMCBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRcXHRcXHRJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBleGFjdCBhbW91bnQgb2ZcXG4gXFx0XFx0XFx0bWVtb3J5IGluIHRoZSBmb3JtIG9mIFxcXCJsbFtLTUddLG1tW0tNR10sbm5bS01HXVxcXCJcXG4gXFx0XFx0XFx0d2hlcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBkZWZpbmVzIHRoZSBzaXplIG9mIGEgbG93XFxuLVxcdFxcdFxcdG1lbW9yeSBzY3JhdGNoIGFyZWEsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGRlZmluZXNcXG4tXFx0XFx0XFx0dGhlIHNpemUgb2YgYSBnbG9iYWwgc2NyYXRjaCBhcmVhIGFuZCB0aGUgdGhpcmRcXG4rXFx0XFx0XFx0bWVtb3J5IGJvb3RtZW0gYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xcbitcXHRcXHRcXHR0aGUgc2l6ZSBvZiBhIGdsb2JhbCBib290bWVtIGFyZWEgYW5kIHRoZSB0aGlyZFxcbiBcXHRcXHRcXHRwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhZGRpdGlvbmFsIHBlci1ub2RlXFxuLVxcdFxcdFxcdHNjcmF0Y2ggYXJlYXMuICBUaGUgZm9ybSBcXFwibm4lXFxcIiBkZWZpbmVzIHNjYWxlIGZhY3RvclxcbitcXHRcXHRcXHRib290bWVtIGFyZWFzLiAgVGhlIGZvcm0gXFxcIm5uJVxcXCIgZGVmaW5lcyBzY2FsZSBmYWN0b3JcXG4gXFx0XFx0XFx0KGluIHBlcmNlbnRzKSBvZiBtZW1vcnkgdGhhdCB3YXMgdXNlZCBkdXJpbmcgYm9vdC5cXG4gXFxuIFxcdGttYWM9XFx0XFx0W01JUFNdIEtvcmluYSBldGhlcm5ldCBNQUMgYWRkcmVzcy5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0XFxuaW5kZXggMmMyNmU1NjBiZDc4YS4uZjE0YzhkOWFkNmE0NSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcXG5AQCAtMjAsMTAgKzIwLDEwIEBAIG5lZWQgdG8gZW5hYmxlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHByZXNlcnZlIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgYWNyb3NzXFxuIGtleGVjLlxcbiBcXG4gVG8gdXNlIEtITywgcGxlYXNlIGJvb3QgdGhlIGtlcm5lbCB3aXRoIHRoZSBgYGtobz1vbmBgIGNvbW1hbmQgbGluZVxcbi1wYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX3NjcmF0Y2hgYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXFxuLXNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcXG4tMTYgTWlCIGxvdyBtZW1vcnkgc2NyYXRjaCBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIHNjcmF0Y2ggcmVnaW9uLCBhbmQgMjU2IE1pQlxcbi1wZXIgTlVNQSBub2RlIHNjcmF0Y2ggcmVnaW9ucyBvbiBib290LlxcbitwYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX2Jvb3RtZW1gYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXFxuK2Jvb3QgbWVtb3J5IHJlZ2lvbnMuIEZvciBleGFtcGxlIGBga2hvX2Jvb3RtZW09MTZNLDUxMk0sMjU2TWBgIHdpbGwgcmVzZXJ2ZSBhXFxuKzE2IE1pQiBsb3cgbWVtb3J5IGJvb3RtZW0gYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBib290bWVtIHJlZ2lvbiwgYW5kIDI1NiBNaUJcXG4rcGVyIE5VTUEgbm9kZSBib290bWVtIHJlZ2lvbnMgb24gYm9vdC5cXG4gXFxuIFBlcmZvcm0gYSBLSE8ga2V4ZWNcXG4gPT09PT09PT09PT09PT09PT09PVxcbkBAIC05NiwxNSArOTYsMTUgQEAgc3RhYmlsaXplZC5cXG4gICAgIGN1cnJlbnQgS0hPIHN0YXRlIGluIHRoaXMgZmlsZS4gS2V4ZWMgdXNlciBzcGFjZSB0b29saW5nIGNhbiB1c2UgdGhpc1xcbiAgICAgYXMgaW5wdXQgZmlsZSBmb3IgdGhlIEtITyBwYXlsb2FkIGltYWdlLlxcbiBcXG4tYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3NjcmF0Y2hfbGVuYGBcXG4tICAgIExlbmd0aHMgb2YgS0hPIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xcbitgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvYm9vdG1lbV9sZW5gYFxcbisgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXFxuICAgICBtZW1vcnkgcmVnaW9ucyB0aGF0IHdpbGwgYWx3YXlzIHN0YXkgYXZhaWxhYmxlIGZvciBmdXR1cmUga2V4ZWNcXG4gICAgIGFsbG9jYXRpb25zLiBLZXhlYyB1c2VyIHNwYWNlIHRvb2xzIGNhbiB1c2UgdGhpcyBmaWxlIHRvIGRldGVybWluZVxcbiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cXG4gXFxuLWBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zY3JhdGNoX3BoeXNgYFxcbi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHNcXG4tICAgIGNhbiB1c2UgdGhpcyBmaWxlIGluIGNvbmp1bmN0aW9uIHRvIHNjcmF0Y2hfcGh5cyB0byBkZXRlcm1pbmUgd2hlcmVcXG4rYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fcGh5c2BgXFxuKyAgICBQaHlzaWNhbCBsb2NhdGlvbnMgb2YgS0hPIGJvb3RtZW0gcmVnaW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29sc1xcbisgICAgY2FuIHVzZSB0aGlzIGZpbGUgaW4gY29uanVuY3Rpb24gdG8gYm9vdG1lbV9waHlzIHRvIGRldGVybWluZSB3aGVyZVxcbiAgICAgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cXG4gXFxuIGBgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9zdWJfZmR0cy9gYFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3RcXG5pbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdFxcbkBAIC0xMyw4ICsxMyw4IEBAIEtleGVjIEhhbmRPdmVyIChLSE8pIGlzIGEgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIExpbnV4IHRvIHByZXNlcnZlIG1lbW9yeVxcbiByZWdpb25zLCB3aGljaCBjb3VsZCBjb250YWluIHNlcmlhbGl6ZWQgc3lzdGVtIHN0YXRlcywgYWNyb3NzIGtleGVjLlxcbiBcXG4gS0hPIHVzZXMgOnJlZjpgZmxhdHRlbmVkIGRldmljZSB0cmVlIChGRFQpIFxcdTAwM2NraG9fZmR0XFx1MDAzZWAgdG8gcGFzcyBpbmZvcm1hdGlvbiBhYm91dFxcbi10aGUgcHJlc2VydmVkIHN0YXRlIGZyb20gcHJlLWV4ZWMga2VybmVsIHRvIHBvc3Qta2V4ZWMga2VybmVsIGFuZCA6cmVmOmBzY3JhdGNoXFxuLW1lbW9yeSByZWdpb25zIFxcdTAwM2NraG9fc2NyYXRjaFxcdTAwM2VgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuXFxuK3RoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YGJvb3RcXG4rbWVtb3J5IHJlZ2lvbnMgXFx1MDAzY2tob19ib290bWVtXFx1MDAzZWAgdG8gZW5zdXJlIGludGVncml0eSBvZiB0aGUgcHJlc2VydmVkIG1lbW9yeS5cXG4gXFxuIC4uIF9raG9fZmR0OlxcbiBcXG5AQCAtNDAsMzEgKzQwLDMxIEBAIGFuZCBwb3N0LWtleGVjIGtlcm5lbHMuIFRoaXMgQUJJIGlzIGRlZmluZWQgYnkgaGVhZGVyIGZpbGVzIGluXFxuIFxcbiAgICBhYmkucnN0XFxuIFxcbi0uLiBfa2hvX3NjcmF0Y2g6XFxuKy4uIF9raG9fYm9vdG1lbTpcXG4gXFxuLVNjcmF0Y2ggUmVnaW9uc1xcbi09PT09PT09PT09PT09PT1cXG4rQm9vdCBNZW1vcnkgUmVnaW9uc1xcbis9PT09PT09PT09PT09PT09PT09XFxuIFxcbiBUbyBib290IGludG8ga2V4ZWMsIHdlIG5lZWQgdG8gaGF2ZSBhIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmFuZ2UgdGhhdFxcbiBjb250YWlucyBubyBoYW5kZWQgb3ZlciBtZW1vcnkuIEtleGVjIHRoZW4gcGxhY2VzIHRoZSB0YXJnZXQga2VybmVsIGFuZCBpbml0cmRcXG4gaW50byB0aGF0IHJlZ2lvbi4gVGhlIG5ldyBrZXJuZWwgZXhjbHVzaXZlbHkgdXNlcyB0aGlzIHJlZ2lvbiBmb3IgbWVtb3J5XFxuIGFsbG9jYXRpb25zIGJlZm9yZSBkdXJpbmcgYm9vdCB1cCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLlxcbiBcXG4tV2UgZ3VhcmFudGVlIHRoYXQgd2UgYWx3YXlzIGhhdmUgc3VjaCByZWdpb25zIHRocm91Z2ggdGhlIHNjcmF0Y2ggcmVnaW9uczogT25cXG4tZmlyc3QgYm9vdCBLSE8gYWxsb2NhdGVzIHNldmVyYWwgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb25zLiBTaW5jZVxcbitXZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uczpcXG4rT24gZmlyc3QgYm9vdCBLSE8gYWxsb2NhdGVzIHNldmVyYWwgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSByZWdpb25zLiBTaW5jZVxcbiBhZnRlciBrZXhlYyB0aGVzZSByZWdpb25zIHdpbGwgYmUgdXNlZCBieSBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbnMsIHRoZXJlIGlzIGFcXG4tc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9uc1xcbi1yZXF1ZXN0cyB0aGF0IGRvIG5vdCByZXF1aXJlIHBhcnRpY3VsYXIgTlVNQSBub2RlIGFzc2lnbm1lbnQuXFxuLUJ5IGRlZmF1bHQsIHNpemUgb2YgdGhlIHNjcmF0Y2ggcmVnaW9uIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYW1vdW50IG9mIG1lbW9yeVxcbi1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXFxuLXVzZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBvZiB0aGUgc2NyYXRjaCByZWdpb25zLlxcbi1UaGUgc2NyYXRjaCByZWdpb25zIGFyZSBkZWNsYXJlZCBhcyBDTUEgd2hlbiBwYWdlIGFsbG9jYXRvciBpcyBpbml0aWFsaXplZCBzb1xcbi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlXFxuLWd1YXJhbnRlZSB0aGF0IG5vIGhhbmRvdmVyIHBhZ2VzIGxhbmQgaW4gdGhhdCByZWdpb24sIGJlY2F1c2UgaGFuZG92ZXIgcGFnZXNcXG4tbXVzdCBiZSBhdCBhIHN0YXRpYyBwaHlzaWNhbCBtZW1vcnkgbG9jYXRpb24gYW5kIENNQSBlbmZvcmNlcyB0aGF0IG9ubHlcXG4tbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuXFxuLVxcbi1BZnRlciBLSE8ga2V4ZWMsIHdlIGlnbm9yZSB0aGUgYGBraG9fc2NyYXRjaGBgIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZFxcbitib290IG1lbW9yeSByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgYm9vdCBtZW1vcnkgcmVnaW9uIHRvIHNhdGlzZnlcXG4rYWxsb2NhdGlvbnMgcmVxdWVzdHMgdGhhdCBkbyBub3QgcmVxdWlyZSBwYXJ0aWN1bGFyIE5VTUEgbm9kZSBhc3NpZ25tZW50LiBCeVxcbitkZWZhdWx0LCBzaXplIG9mIHRoZSBib290IG1lbW9yeSByZWdpb24gaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBhbW91bnQgb2YgbWVtb3J5XFxuK2FsbG9jYXRlZCBkdXJpbmcgYm9vdC4gVGhlIGBga2hvX2Jvb3RtZW1gYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBtYXkgYmVcXG4rdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBib290IG1lbW9yeSByZWdpb25zLiBUaGUgYm9vdCBtZW1vcnlcXG4rcmVnaW9ucyBhcmUgZGVjbGFyZWQgYXMgQ01BIHdoZW4gcGFnZSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQgc28gdGhhdCB0aGVpclxcbittZW1vcnkgY2FuIGJlIHVzZWQgZHVyaW5nIHN5c3RlbSBsaWZldGltZS4gQ01BIGdpdmVzIHVzIHRoZSBndWFyYW50ZWUgdGhhdCBub1xcbitoYW5kb3ZlciBwYWdlcyBsYW5kIGluIHRoYXQgcmVnaW9uLCBiZWNhdXNlIGhhbmRvdmVyIHBhZ2VzIG11c3QgYmUgYXQgYSBzdGF0aWNcXG4rcGh5c2ljYWwgbWVtb3J5IGxvY2F0aW9uIGFuZCBDTUEgZW5mb3JjZXMgdGhhdCBvbmx5IG1vdmFibGUgcGFnZXMgY2FuIGJlIGxvY2F0ZWRcXG4raW5zaWRlLlxcbitcXG4rQWZ0ZXIgS0hPIGtleGVjLCB3ZSBpZ25vcmUgdGhlIGBga2hvX2Jvb3RtZW1gYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmRcXG4gaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXFxuIHVzIHRvIHJlY3Vyc2l2ZWx5IGV4ZWN1dGUgYW55IGFtb3VudCBvZiBLSE8ga2V4ZWNzLiBCZWNhdXNlIHdlIHVzZWQgdGhpcyByZWdpb25cXG4gZm9yIGJvb3QgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBhcyB0YXJnZXQgbWVtb3J5IGZvciBrZXhlYyBibG9icywgc29tZSBwYXJ0c1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXFxuaW5kZXggMjIyNjdhODNlMDY0YS4uMjkwMTUzODE4ZDBmMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuY1xcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXFxuQEAgLTc2NCwxMiArNzY0LDEyIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZTgyMF9lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcXG4gfVxcbiBcXG4gLypcXG4tICogSWYgS0hPIGlzIGFjdGl2ZSwgb25seSBwcm9jZXNzIGl0cyBzY3JhdGNoIGFyZWFzIHRvIGVuc3VyZSB3ZSBhcmUgbm90XFxuKyAqIElmIEtITyBpcyBhY3RpdmUsIG9ubHkgcHJvY2VzcyBpdHMgYm9vdG1lbSBhcmVhcyB0byBlbnN1cmUgd2UgYXJlIG5vdFxcbiAgKiBzdGVwcGluZyBvbnRvIHByZXNlcnZlZCBtZW1vcnkuXFxuICAqL1xcbiBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKVxcbiB7XFxuLVxcdHN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XFxuK1xcdHN0cnVjdCBraG9fYm9vdG1lbSAqa2hvX2Jvb3RtZW07XFxuIFxcdHN0cnVjdCBzZXR1cF9kYXRhICpwdHI7XFxuIFxcdHN0cnVjdCBraG9fZGF0YSAqa2hvO1xcbiBcXHRpbnQgaSwgbnJfYXJlYXMgPSAwO1xcbkBAIC03ODEsOCArNzgxLDggQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcXG4gXFx0d2hpbGUgKHB0cikge1xcbiBcXHRcXHRpZiAocHRyLVxcdTAwM2V0eXBlID09IFNFVFVQX0tFWEVDX0tITykge1xcbiBcXHRcXHRcXHRraG8gPSAoc3RydWN0IGtob19kYXRhICopKHVuc2lnbmVkIGxvbmcpcHRyLVxcdTAwM2VkYXRhO1xcbi1cXHRcXHRcXHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVxcdTAwM2VzY3JhdGNoX2FkZHI7XFxuLVxcdFxcdFxcdG5yX2FyZWFzID0ga2hvLVxcdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcXG4rXFx0XFx0XFx0a2hvX2Jvb3RtZW0gPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWtoby1cXHUwMDNlYm9vdG1lbV9hZGRyO1xcbitcXHRcXHRcXHRucl9hcmVhcyA9IGtoby1cXHUwMDNlYm9vdG1lbV9zaXplIC8gc2l6ZW9mKCpraG9fYm9vdG1lbSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC03OTMsNyArNzkzLDcgQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2FyZWFzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXFx1MDAyNmtob19zY3JhdGNoW2ldO1xcbitcXHRcXHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSBcXHUwMDI2a2hvX2Jvb3RtZW1baV07XFxuIFxcdFxcdHN0cnVjdCBtZW1fdmVjdG9yIHJlZ2lvbiA9IHtcXG4gXFx0XFx0XFx0LnN0YXJ0ID0gYXJlYS1cXHUwMDNlYWRkcixcXG4gXFx0XFx0XFx0LnNpemUgPSBhcmVhLVxcdTAwM2VzaXplLFxcbkBAIC04MjIsNyArODIyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9yYW5kb21fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogRHVyaW5nIGtleGVjIGhhbmRvdmVyIG9ubHkgcHJvY2VzcyBLSE8gc2NyYXRjaCBhcmVhcyB0aGF0IGFyZSBrbm93blxcbitcXHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duXFxuIFxcdCAqIG5vdCB0byBjb250YWluIGFueSBkYXRhIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxcbmluZGV4IDI2NzFjNGUxYjNhMGIuLjYxMDkwZGI1MDY1YzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxcbkBAIC04NSw4ICs4NSw4IEBAIHN0cnVjdCBpbWFfc2V0dXBfZGF0YSB7XFxuIHN0cnVjdCBraG9fZGF0YSB7XFxuIFxcdF9fdTY0IGZkdF9hZGRyO1xcbiBcXHRfX3U2NCBmZHRfc2l6ZTtcXG4tXFx0X191NjQgc2NyYXRjaF9hZGRyO1xcbi1cXHRfX3U2NCBzY3JhdGNoX3NpemU7XFxuK1xcdF9fdTY0IGJvb3RtZW1fYWRkcjtcXG4rXFx0X191NjQgYm9vdG1lbV9zaXplO1xcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xcbiBcXG4gI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcXG5pbmRleCBlYjcyNTM3YmMwYjE5Li4yYTZlMTlmOTUyNTE3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXFxuQEAgLTEzNjMsNyArMTM2Myw3IEBAIF9faW5pdCB2b2lkIGU4MjBfX21lbWJsb2NrX3NldHVwKHZvaWQpXFxuIFxcdCAqIEFmdGVyIHJlYWwgbW9kZSB0cmFtcG9saW5lIGlzIGFsbG9jYXRlZCwgd2UgY2xlYXIgdGhhdCBzY3JhdGNoXFxuIFxcdCAqIG1hcmtpbmcuXFxuIFxcdCAqL1xcbi1cXHRtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcXG4rXFx0bWVtYmxvY2tfbWFya19raG9fbm9wcnNydigwLCBTWl8xTSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiAzMi1iaXQgc3lzdGVtcyBhcmUgbGltaXRlZCB0byA0Qkcgb2YgbWVtb3J5IGV2ZW4gd2l0aCBISUdITUVNIGFuZFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcXG5pbmRleCA3ZTk4MGVhNDlkOGQ2Li4zYWE3NzAwNmFkYWIyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuY1xcbkBAIC0yODUsMTQgKzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLFxcbiBcXHRzZC1cXHUwMDNlbGVuID0gc2l6ZW9mKHN0cnVjdCBraG9fZGF0YSk7XFxuIFxcbiBcXHQvKiBPbmx5IGFkZCBpZiB3ZSBoYXZlIGFsbCBLSE8gaW1hZ2VzIGluIHBsYWNlICovXFxuLVxcdGlmICghaW1hZ2UtXFx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVxcdTAwM2VraG8uc2NyYXRjaClcXG4rXFx0aWYgKCFpbWFnZS1cXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXFx1MDAzZWtoby5ib290bWVtKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBBZGQgc2V0dXAgZGF0YSAqL1xcbiBcXHRraG8tXFx1MDAzZWZkdF9hZGRyID0gaW1hZ2UtXFx1MDAzZWtoby5mZHQ7XFxuIFxcdGtoby1cXHUwMDNlZmR0X3NpemUgPSBQQUdFX1NJWkU7XFxuLVxcdGtoby1cXHUwMDNlc2NyYXRjaF9hZGRyID0gaW1hZ2UtXFx1MDAzZWtoby5zY3JhdGNoLVxcdTAwM2VtZW07XFxuLVxcdGtoby1cXHUwMDNlc2NyYXRjaF9zaXplID0gaW1hZ2UtXFx1MDAzZWtoby5zY3JhdGNoLVxcdTAwM2VidWZzejtcXG4rXFx0a2hvLVxcdTAwM2Vib290bWVtX2FkZHIgPSBpbWFnZS1cXHUwMDNla2hvLmJvb3RtZW0tXFx1MDAzZW1lbTtcXG4rXFx0a2hvLVxcdTAwM2Vib290bWVtX3NpemUgPSBpbWFnZS1cXHUwMDNla2hvLmJvb3RtZW0tXFx1MDAzZWJ1ZnN6O1xcbiBcXHRzZC1cXHUwMDNlbmV4dCA9IHBhcmFtcy1cXHUwMDNlaGRyLnNldHVwX2RhdGE7XFxuIFxcdHBhcmFtcy1cXHUwMDNlaGRyLnNldHVwX2RhdGEgPSBwYXJhbXNfbG9hZF9hZGRyICsgc2V0dXBfZGF0YV9vZmZzZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xcbmluZGV4IDVlYmI1MjFlMTM2ZDcuLmQxNjE4YzRjZjdmYmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGtob19wb3B1bGF0ZShraG8tXFx1MDAzZWZkdF9hZGRyLCBraG8tXFx1MDAzZWZkdF9zaXplLCBraG8tXFx1MDAzZXNjcmF0Y2hfYWRkciwga2hvLVxcdTAwM2VzY3JhdGNoX3NpemUpO1xcbitcXHRraG9fcG9wdWxhdGUoa2hvLVxcdTAwM2VmZHRfYWRkciwga2hvLVxcdTAwM2VmZHRfc2l6ZSwga2hvLVxcdTAwM2Vib290bWVtX2FkZHIsIGtoby1cXHUwMDNlYm9vdG1lbV9zaXplKTtcXG4gXFxuIFxcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jIGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jXFxuaW5kZXggNjk0ZDgwYTVjNjhlMS4uNjUxMTBiMmVlMWExZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmNcXG4rKysgYi9hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmNcXG5AQCAtNjYsNyArNjYsNyBAQCB2b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0bWVtYmxvY2tfcmVzZXJ2ZSgwLCBTWl8xTSk7XFxuIFxcbi1cXHRtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaCgwLCBTWl8xTSk7XFxuK1xcdG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KDAsIFNaXzFNKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IHNtZV9zZXZfc2V0dXBfcmVhbF9tb2RlKHN0cnVjdCB0cmFtcG9saW5lX2hlYWRlciAqdGgpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXFxuaW5kZXggNjEwM2IxYTA4MmQyNC4uOWYwOWIwZDJkYWEwYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuY1xcbkBAIC0xNjUsMTAgKzE2NSwxMCBAQCBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpXFxuIFxcdFxcdHByX2luZm8oXFxcIlByb2Nlc3NpbmcgRUZJIG1lbW9yeSBtYXA6XFxcXG5cXFwiKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIERpc2NhcmQgbWVtYmxvY2tzIGRpc2NvdmVyZWQgc28gZmFyIGV4Y2VwdCBmb3IgS0hPIHNjcmF0Y2hcXG4rXFx0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gYm9vdG1lbVxcbiBcXHQgKiByZWdpb25zLiBNb3N0IG1lbWJsb2NrcyBhdCB0aGlzIHBvaW50IG9yaWdpbmF0ZSBmcm9tIG1lbW9yeSBub2Rlc1xcbiBcXHQgKiBpbiB0aGUgRFQgYW5kIFVFRkkgdXNlcyBpdHMgb3duIG1lbW9yeSBtYXAgaW5zdGVhZC4gSG93ZXZlciwgaWZcXG4tXFx0ICogS0hPIGlzIGVuYWJsZWQsIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XFxuK1xcdCAqIEtITyBpcyBlbmFibGVkLCBib290bWVtIHJlZ2lvbnMsIHdoaWNoIGFyZSBnb29kIGtub3duIG1lbW9yeVxcbiBcXHQgKiBtdXN0IGJlIHByZXNlcnZlZC5cXG4gXFx0ICovXFxuIFxcdG1lbWJsb2NrX2R1bXBfYWxsKCk7XFxuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpXFxuIFxcbiBcXHRcXHQvKiBSZW1vdmUgYWxsIG5vbi1LSE8gcmVnaW9ucyAqL1xcbiBcXHRcXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHtcXG4tXFx0XFx0XFx0aWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkge1xcbitcXHRcXHRcXHRpZiAoIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHIpKSB7XFxuIFxcdFxcdFxcdFxcdG1lbWJsb2NrX3JlbW92ZShyLVxcdTAwM2ViYXNlLCByLVxcdTAwM2VzaXplKTtcXG4gXFx0XFx0XFx0XFx0ci0tO1xcbiBcXHRcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yva2V4ZWMuYyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xcbmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jXFxuKysrIGIvZHJpdmVycy9vZi9rZXhlYy5jXFxuQEAgLTI2MSwyMyArMjYxLDIzIEBAIHN0YXRpYyBpbnQga2hvX2FkZF9jaG9zZW4oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmZkdCwgaW50IGNob3Nlbl9ub2RlXFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG4gXFx0cGh5c19hZGRyX3QgZmR0X21lbSA9IDA7XFxuIFxcdHBoeXNfYWRkcl90IGZkdF9sZW4gPSAwO1xcbi1cXHRwaHlzX2FkZHJfdCBzY3JhdGNoX21lbSA9IDA7XFxuLVxcdHBoeXNfYWRkcl90IHNjcmF0Y2hfbGVuID0gMDtcXG4rXFx0cGh5c19hZGRyX3QgYm9vdG1lbV9hcnIgPSAwO1xcbitcXHRwaHlzX2FkZHJfdCBib290bWVtX2xlbiA9IDA7XFxuIFxcbiBcXHRyZXQgPSBmZHRfZGVscHJvcChmZHQsIGNob3Nlbl9ub2RlLCBcXFwibGludXgsa2hvLWZkdFxcXCIpO1xcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0cmV0ID0gZmR0X2RlbHByb3AoZmR0LCBjaG9zZW5fbm9kZSwgXFxcImxpbnV4LGtoby1zY3JhdGNoXFxcIik7XFxuK1xcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFxcXCJsaW51eCxraG8tYm9vdG1lbVxcXCIpO1xcbiBcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmICghaW1hZ2UtXFx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVxcdTAwM2VraG8uc2NyYXRjaClcXG4rXFx0aWYgKCFpbWFnZS1cXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXFx1MDAzZWtoby5ib290bWVtKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZkdF9tZW0gPSBpbWFnZS1cXHUwMDNla2hvLmZkdDtcXG4gXFx0ZmR0X2xlbiA9IFBBR0VfU0laRTtcXG4tXFx0c2NyYXRjaF9tZW0gPSBpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gtXFx1MDAzZW1lbTtcXG4tXFx0c2NyYXRjaF9sZW4gPSBpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2gtXFx1MDAzZWJ1ZnN6O1xcbitcXHRib290bWVtX2FyciA9IGltYWdlLVxcdTAwM2VraG8uYm9vdG1lbS1cXHUwMDNlbWVtO1xcbitcXHRib290bWVtX2xlbiA9IGltYWdlLVxcdTAwM2VraG8uYm9vdG1lbS1cXHUwMDNlYnVmc3o7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiQWRkaW5nIGtobyBtZXRhZGF0YSB0byBEVFxcXCIpO1xcbiBcXG5AQCAtMjg1LDggKzI4NSw4IEBAIHN0YXRpYyBpbnQga2hvX2FkZF9jaG9zZW4oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmZkdCwgaW50IGNob3Nlbl9ub2RlXFxuIFxcdFxcdFxcdFxcdCAgICAgICBmZHRfbWVtLCBmZHRfbGVuKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0cmV0ID0gZmR0X2FwcGVuZHByb3BfYWRkcnJhbmdlKGZkdCwgMCwgY2hvc2VuX25vZGUsIFxcXCJsaW51eCxraG8tc2NyYXRjaFxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzY3JhdGNoX21lbSwgc2NyYXRjaF9sZW4pO1xcbitcXHRyZXQgPSBmZHRfYXBwZW5kcHJvcF9hZGRycmFuZ2UoZmR0LCAwLCBjaG9zZW5fbm9kZSwgXFxcImxpbnV4LGtoby1ib290bWVtXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb3RtZW1fYXJyLCBib290bWVtX2xlbik7XFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxcbmluZGV4IDUwODM5ZmI1ZWU4ZWQuLmNmNzNkOWIzNGMzYzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oXFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oXFxuQEAgLTQsNyArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuLXN0cnVjdCBraG9fc2NyYXRjaCB7XFxuK3N0cnVjdCBraG9fYm9vdG1lbSB7XFxuIFxcdHBoeXNfYWRkcl90IGFkZHI7XFxuIFxcdHBoeXNfYWRkcl90IHNpemU7XFxuIH07XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V4ZWMuaCBiL2luY2x1ZGUvbGludXgva2V4ZWMuaFxcbmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oXFxuQEAgLTQxOCw3ICs0MTgsNyBAQCBzdHJ1Y3Qga2ltYWdlIHtcXG4gI2VuZGlmXFxuIFxcbiBcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRzdHJ1Y3Qga2V4ZWNfc2VnbWVudCAqc2NyYXRjaDtcXG4rXFx0XFx0c3RydWN0IGtleGVjX3NlZ21lbnQgKmJvb3RtZW07XFxuIFxcdFxcdHBoeXNfYWRkcl90IGZkdDtcXG4gXFx0fSBraG87XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXG5pbmRleCA0NmRlODZkYzM0M2U5Li5lZjJiMTg4YzhlZDA5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbkBAIC0zNiwxNSArMzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xcbiB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKTtcXG4gdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCk7XFxuIFxcbi12b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cyxcXG4tXFx0XFx0ICB1NjQgc2NyYXRjaF9sZW4pO1xcbit2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cyxcXG4rXFx0XFx0ICB1NjQgYm9vdG1lbV9sZW4pO1xcbiBcXG4tYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG4rYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcXG4rc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZW51bSBtaWdyYXRldHlwZSBtdClcXG4ge1xcbi1cXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpXFxuK1xcdGlmIChraG9fYm9vdG1lbV9vdmVybGFwKFBGTl9QSFlTKHBmbiksIHBhZ2VibG9ja19ucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSlcXG4gXFx0XFx0cmV0dXJuIE1JR1JBVEVfQ01BO1xcbiBcXHRyZXR1cm4gbXQ7XFxuIH1cXG5AQCAtMTIzLDE2ICsxMjMsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKSB7IH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxcbi1cXHRcXHRcXHRcXHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcXG4rXFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYm9vdG1lbV9waHlzLCB1NjQgYm9vdG1lbV9sZW4pXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxcbitzdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxcbiB7XFxuIFxcdHJldHVybiBtdDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXFxuaW5kZXggZDYyZGI5ZTc3NmNmOS4uMTg2Yjk2NWNmYzg5NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcXG5AQCAtNDYsMTEgKzQ2LDExIEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcXG4gICogQE1FTUJMT0NLX1JTUlZfS0VSTjogbWVtb3J5IHJlZ2lvbiB0aGF0IGlzIHJlc2VydmVkIGZvciBrZXJuZWwgdXNlLFxcbiAgKiBlaXRoZXIgZXhwbGljdGl0bHkgd2l0aCBtZW1ibG9ja19yZXNlcnZlX2tlcm4oKSBvciB2aWEgbWVtYmxvY2tcXG4gICogYWxsb2NhdGlvbiBBUElzLiBBbGwgbWVtYmxvY2sgYWxsb2NhdGlvbnMgc2V0IHRoaXMgZmxhZy5cXG4tICogQE1FTUJMT0NLX0tIT19TQ1JBVENIOiBtZW1vcnkgcmVnaW9uIHRoYXQga2V4ZWMgY2FuIHBhc3MgdG8gdGhlIG5leHRcXG4tICoga2VybmVsIGluIGhhbmRvdmVyIG1vZGUuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGxcXG4tICogbWVtb3J5IHJlc2VydmF0aW9ucyB5ZXQsIHNvIHdlIGdldCBzY3JhdGNoIG1lbW9yeSBmcm9tIHRoZSBwcmV2aW91c1xcbi0gKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdFxcbi0gKiBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb20gaW4gdGhpcyBwaGFzZS5cXG4rICogQE1FTUJMT0NLX0tIT19OT1BSU1JWOiBtZW1vcnkgcmVnaW9uIHdpdGggbm8gcHJlc2VydmF0aW9uIGZyb20ga2V4ZWNcXG4rICogaGFuZG92ZXIuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGwgbWVtb3J5IHByZXNlcnZhdGlvbnNcXG4rICogeWV0LCBzbyB3ZSBnZXQgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwgdGhhdCB3ZVxcbisgKiBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdCBhbGxvY2F0aW9ucyBtYXkgaGFwcGVuIGZyb21cXG4rICogaW4gdGhpcyBwaGFzZS5cXG4gICogQE1FTUJMT0NLX1JTUlZfSFVHRVRMQjogbWVtb3J5IGlzIHJlc2VydmVkIGZvciBodWdldGxiIHBhZ2VzXFxuICAqL1xcbiBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcXG5AQCAtNjEsNyArNjEsNyBAQCBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcXG4gXFx0TUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQgPSAweDgsXFx0LyogYWx3YXlzIGRldGVjdGVkIHZpYSBhIGRyaXZlciAqL1xcbiBcXHRNRU1CTE9DS19SU1JWX05PSU5JVFxcdD0gMHgxMCxcXHQvKiBkb24ndCBpbml0aWFsaXplIHN0cnVjdCBwYWdlcyAqL1xcbiBcXHRNRU1CTE9DS19SU1JWX0tFUk5cXHQ9IDB4MjAsXFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXFxuLVxcdE1FTUJMT0NLX0tIT19TQ1JBVENIXFx0PSAweDQwLFxcdC8qIHNjcmF0Y2ggbWVtb3J5IGZvciBrZXhlYyBoYW5kb3ZlciAqL1xcbitcXHRNRU1CTE9DS19LSE9fTk9QUlNSVlxcdD0gMHg0MCxcXHQvKiBtZW1vcnkgd2l0aCBubyBLSE8gcHJlc2VydmF0aW9ucyAqL1xcbiBcXHRNRU1CTE9DS19SU1JWX0hVR0VUTEJcXHQ9IDB4ODAsIC8qIG1lbW9yeSByZXNlcnZlZCBmb3IgaHVnZXRsYiBwYWdlcyAqL1xcbiB9O1xcbiBcXG5AQCAtMTU4LDggKzE1OCw4IEBAIGludCBtZW1ibG9ja19tYXJrX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbiBpbnQgbWVtYmxvY2tfY2xlYXJfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuIGludCBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX25vaW5pdChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4gaW50IG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4taW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuLWludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4raW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuK2ludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4gXFxuIHZvaWQgbWVtYmxvY2tfZnJlZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcXG4gdm9pZCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKTtcXG5AQCAtMzAxLDkgKzMwMSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19kcml2ZXJfbWFuYWdlZChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxcbiBcXHRyZXR1cm4gbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRU1CTE9DS19EUklWRVJfTUFOQUdFRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2tob19zY3JhdGNoKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fbm9wcnNydihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxcbiB7XFxuLVxcdHJldHVybiBtLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1FTUJMT0NLX0tIT19TQ1JBVENIO1xcbitcXHRyZXR1cm4gbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcXG4gfVxcbiBcXG4gaW50IG1lbWJsb2NrX3NlYXJjaF9wZm5fbmlkKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXFxuQEAgLTYxNCwxMiArNjE0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9tZW10ZXN0KHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQpIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtdGVzdF9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pIHsgfVxcbiAjZW5kaWZcXG4gXFxuLSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4tdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTtcXG4tdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpO1xcbisjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuK3ZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCk7XFxuK3ZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNldl9vbmx5KHZvaWQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKSB7IH1cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX0xJTlVYX01FTUJMT0NLX0ggKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcXG5pbmRleCBjMTNhZjM4YmEyM2FiLi5mNTBkYWVlOGVmZjA3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnXFxuQEAgLTUsNyArNSw2IEBAIG1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG4gY29uZmlnIEtFWEVDX0hBTkRPVkVSXFxuIFxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyXFxcIlxcbiBcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVIgXFx1MDAyNlxcdTAwMjYgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXFxuLVxcdHNlbGVjdCBNRU1CTE9DS19LSE9fU0NSQVRDSFxcbiBcXHRzZWxlY3QgS0VYRUNfRklMRVxcbiBcXHRzZWxlY3QgTElCRkRUXFxuIFxcdHNlbGVjdCBDTUFcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5pbmRleCBmZTZmMmFjN2U0NTgzLi5kYThkNWVjYjkxNWI1IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuQEAgLTQxLDEyICs0MSwxMiBAQFxcbiAvKlxcbiAgKiBUaGlzIGlzIHRoZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBkZWZlcnJlZCBzdHJ1Y3QgcGFnZSBpbml0LlxcbiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3NcXG4tICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS5cXG4tICogSWYgS0hPIHNjcmF0Y2ggaXMgbm90IGFsaWduZWQgdG8gdGhhdCB2YWx1ZSwgYnVkZHkgY2FuIGFjY2VzcyB1bmluaXRpYWxpemVkXFxuLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXFxuKyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uIElmIEtITyBib290bWVtXFxuKyAqIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFnZXMsXFxuKyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxcbiAgKi9cXG4tI2RlZmluZSBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxcbi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFxcdTAwM2U9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rI2RlZmluZSBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxcbitzdGF0aWNfYXNzZXJ0KEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIFxcdTAwM2U9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4gXFxuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXFxuICNkZWZpbmUgS0hPX1BBR0VfTUFHSUMgMHg0YjQ4NGY1MFUgLyogQVNDSUkgZm9yICdLSE9QJyAqL1xcbkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qga2hvX291dCBraG9fb3V0ID0ge1xcbiBcXG4gc3RydWN0IGtob19pbiB7XFxuIFxcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xcbi1cXHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXM7XFxuK1xcdHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cztcXG4gXFx0Y2hhciBwcmV2aW91c19yZWxlYXNlW19fTkVXX1VUU19MRU4gKyAxXTtcXG4gXFx0dTMyIGtleGVjX2NvdW50O1xcbiBcXHRzdHJ1Y3Qga2hvX2RlYnVnZnMgZGJnO1xcbkBAIC02NTYsMzQgKzY1NiwzNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgKmtob19nZXRfbWVtX21hcChjb25zdCB2b2lkICpmZHQpXFxuIFxcbiAvKlxcbiAgKiBXaXRoIEtITyBlbmFibGVkLCBtZW1vcnkgY2FuIGJlY29tZSBmcmFnbWVudGVkIGJlY2F1c2UgS0hPIHJlZ2lvbnMgbWF5XFxuLSAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBzY3JhdGNoIHJlZ2lvbnMgZ2l2ZSB1cyBhXFxuKyAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBib290bWVtIHJlZ2lvbnMgZ2l2ZSB1cyBhXFxuICAqIHNhZmUgem9uZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIHNlZSBLSE8gYWxsb2NhdGlvbnMgZnJvbS4gVGhpcyBpcyB3aGVyZSB3ZVxcbi0gKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIHNjcmF0Y2hcXG4rICogY2FuIGxhdGVyIHNhZmVseSBsb2FkIG91ciBuZXcga2V4ZWMgaW1hZ2VzIGludG8gYW5kIHRoZW4gdXNlIHRoZSBib290bWVtXFxuICAqIGFyZWEgZm9yIGVhcmx5IGFsbG9jYXRpb25zIHRoYXQgaGFwcGVuIGJlZm9yZSBwYWdlIGFsbG9jYXRvciBpc1xcbiAgKiBpbml0aWFsaXplZC5cXG4gICovXFxuLXN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XFxuLXVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XFxuK3N0cnVjdCBraG9fYm9vdG1lbSAqa2hvX2Jvb3RtZW07XFxuK3Vuc2lnbmVkIGludCBraG9fYm9vdG1lbV9jbnQ7XFxuIFxcbiAvKlxcbi0gKiBUaGUgc2NyYXRjaCBhcmVhcyBhcmUgc2NhbGVkIGJ5IGRlZmF1bHQgYXMgcGVyY2VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZyb21cXG4rICogVGhlIGJvb3RtZW0gYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXFxuICAqIG1lbWJsb2NrLiBBIHVzZXIgY2FuIG92ZXJyaWRlIHRoZSBzY2FsZSB3aXRoIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXI6XFxuICAqXFxuLSAqIGtob19zY3JhdGNoPU4lXFxuKyAqIGtob19ib290bWVtPU4lXFxuICAqXFxuICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBmb3IgYSBsb3dtZW0sIGEgZ2xvYmFsIGFuZFxcbi0gKiBwZXItbm9kZSBzY3JhdGNoIGFyZWFzOlxcbisgKiBwZXItbm9kZSBib290bWVtIGFyZWFzOlxcbiAgKlxcbi0gKiBraG9fc2NyYXRjaD1sW0tNR10sbltLTUddLG1bS01HXVxcbisgKiBraG9fYm9vdG1lbT1sW0tNR10sbltLTUddLG1bS01HXVxcbiAgKlxcbiAgKiBUaGUgZXhwbGljaXQgc2l6ZSBkZWZpbml0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBzY2FsZSBkZWZpbml0aW9uLlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBzY3JhdGNoX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7XFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBzY3JhdGNoX3NpemVfcGVybm9kZSBfX2luaXRkYXRhO1xcbi1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX2xvd21lbSBfX2luaXRkYXRhO1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGJvb3RtZW1fc2NhbGUgX19pbml0ZGF0YSA9IDIwMDtcXG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9nbG9iYWwgX19pbml0ZGF0YTtcXG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9wZXJub2RlIF9faW5pdGRhdGE7XFxuK3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfbG93bWVtIF9faW5pdGRhdGE7XFxuIFxcbi1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXFxuK3N0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9ib290bWVtX3NpemUoY2hhciAqcClcXG4ge1xcbiBcXHRzaXplX3QgbGVuO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemVzWzNdO1xcbkBAIC03MDcsOSArNzA3LDkgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdG1lbWNweShzX3NjYWxlLCBwLCBsZW4gLSAxKTtcXG4tXFx0XFx0cmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgXFx1MDAyNnNjcmF0Y2hfc2NhbGUpO1xcbitcXHRcXHRyZXQgPSBrc3RydG91aW50KHNfc2NhbGUsIDEwLCBcXHUwMDI2Ym9vdG1lbV9zY2FsZSk7XFxuIFxcdFxcdGlmICghcmV0KVxcbi1cXHRcXHRcXHRwcl9ub3RpY2UoXFxcInNjcmF0Y2ggc2NhbGUgaXMgJWQlJVxcXFxuXFxcIiwgc2NyYXRjaF9zY2FsZSk7XFxuK1xcdFxcdFxcdHByX25vdGljZShcXFwiYm9vdG1lbSBzY2FsZSBpcyAlZCUlXFxcXG5cXFwiLCBib290bWVtX3NjYWxlKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtNzM3LDgxICs3MzcsODEgQEAgc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZShjaGFyICpwKVxcbiBcXHRpZiAoKnApXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHNpemVzWzBdO1xcbi1cXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07XFxuLVxcdHNjcmF0Y2hfc2l6ZV9wZXJub2RlID0gc2l6ZXNbMl07XFxuLVxcdHNjcmF0Y2hfc2NhbGUgPSAwO1xcbitcXHRib290bWVtX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XFxuK1xcdGJvb3RtZW1fc2l6ZV9nbG9iYWwgPSBzaXplc1sxXTtcXG4rXFx0Ym9vdG1lbV9zaXplX3Blcm5vZGUgPSBzaXplc1syXTtcXG4rXFx0Ym9vdG1lbV9zY2FsZSA9IDA7XFxuIFxcbi1cXHRwcl9ub3RpY2UoXFxcInNjcmF0Y2ggYXJlYXM6IGxvd21lbTogJWxsdU1pQiBnbG9iYWw6ICVsbHVNaUIgcGVybm9kZTogJWxsZE1pQlxcXFxuXFxcIixcXG4tXFx0XFx0ICAodTY0KShzY3JhdGNoX3NpemVfbG93bWVtIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4tXFx0XFx0ICAodTY0KShzY3JhdGNoX3NpemVfZ2xvYmFsIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4tXFx0XFx0ICAodTY0KShzY3JhdGNoX3NpemVfcGVybm9kZSBcXHUwMDNlXFx1MDAzZSAyMCkpO1xcbitcXHRwcl9ub3RpY2UoXFxcImJvb3RtZW0gYXJlYXM6IGxvd21lbTogJWxsdU1pQiBnbG9iYWw6ICVsbHVNaUIgcGVybm9kZTogJWxsZE1pQlxcXFxuXFxcIixcXG4rXFx0XFx0ICAodTY0KShib290bWVtX3NpemVfbG93bWVtIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4rXFx0XFx0ICAodTY0KShib290bWVtX3NpemVfZ2xvYmFsIFxcdTAwM2VcXHUwMDNlIDIwKSxcXG4rXFx0XFx0ICAodTY0KShib290bWVtX3NpemVfcGVybm9kZSBcXHUwMDNlXFx1MDAzZSAyMCkpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tZWFybHlfcGFyYW0oXFxcImtob19zY3JhdGNoXFxcIiwga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZSk7XFxuK2Vhcmx5X3BhcmFtKFxcXCJraG9fYm9vdG1lbVxcXCIsIGtob19wYXJzZV9ib290bWVtX3NpemUpO1xcbiBcXG4tc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcXG4rc3RhdGljIHZvaWQgX19pbml0IGJvb3RtZW1fc2l6ZV91cGRhdGUodm9pZClcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBJZiBmaXhlZCBzaXplcyBhcmUgbm90IHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUsIGNhbGN1bGF0ZSB0aGVtIG5vdy5cXG4gXFx0ICogUmVtb3ZlIEh1Z2VUTEIgYWxsb2NhdGlvbnMgZnJvbSBpdCBiZWNhdXNlIHRoZXkgbmV2ZXIgZ2V0IGFsbG9jYXRlZFxcbi1cXHQgKiBmcm9tIHNjcmF0Y2guXFxuK1xcdCAqIGZyb20gYm9vdG1lbS5cXG4gXFx0ICovXFxuLVxcdGlmIChzY3JhdGNoX3NjYWxlKSB7XFxuK1xcdGlmIChib290bWVtX3NjYWxlKSB7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHNpemU7XFxuIFxcbiBcXHRcXHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIE5VTUFfTk9fTk9ERSk7XFxuIFxcdFxcdHNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOVU1BX05PX05PREUpO1xcbi1cXHRcXHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7XFxuLVxcdFxcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplO1xcbitcXHRcXHRzaXplID0gc2l6ZSAqIGJvb3RtZW1fc2NhbGUgLyAxMDA7XFxuK1xcdFxcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSBzaXplO1xcbiBcXG4gXFx0XFx0c2l6ZSA9IG1lbWJsb2NrX3Jlc2VydmVkX2tlcm5fc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgTlVNQV9OT19OT0RFKTtcXG4gXFx0XFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOVU1BX05PX05PREUpO1xcbi1cXHRcXHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDAgLSBzY3JhdGNoX3NpemVfbG93bWVtO1xcbi1cXHRcXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZTtcXG4rXFx0XFx0c2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwIC0gYm9vdG1lbV9zaXplX2xvd21lbTtcXG4rXFx0XFx0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHNpemU7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodFxcbitcXHQgKiBib290bWVtIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcXG4gXFx0ICogc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuLVxcdHNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSByb3VuZF91cChzY3JhdGNoX3NpemVfZ2xvYmFsLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSByb3VuZF91cChib290bWVtX3NpemVfbG93bWVtLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdGJvb3RtZW1fc2l6ZV9nbG9iYWwgPSByb3VuZF91cChib290bWVtX3NpemVfZ2xvYmFsLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZClcXG4rc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBib290bWVtX3NpemVfbm9kZShpbnQgbmlkKVxcbiB7XFxuIFxcdHBoeXNfYWRkcl90IHNpemU7XFxuIFxcbi1cXHRpZiAoc2NyYXRjaF9zY2FsZSkge1xcbitcXHRpZiAoYm9vdG1lbV9zY2FsZSkge1xcbiBcXHRcXHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBuaWQpO1xcbiBcXHRcXHQvKiBEbyBub3QgY291bnQgSHVnZVRMQiBwYWdlcy4gKi9cXG4gXFx0XFx0c2l6ZSAtPSBtZW1ibG9ja19yZXNlcnZlZF9odWdldGxiX3NpemUoTUVNQkxPQ0tfQUxMT0NfQU5ZV0hFUkUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBuaWQpO1xcbi1cXHRcXHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7XFxuK1xcdFxcdHNpemUgPSBzaXplICogYm9vdG1lbV9zY2FsZSAvIDEwMDtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9wZXJub2RlO1xcbitcXHRcXHRzaXplID0gYm9vdG1lbV9zaXplX3Blcm5vZGU7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdHJldHVybiByb3VuZF91cChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuIH1cXG4gXFxuLWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4rYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiB7XFxuLVxcdHBoeXNfYWRkcl90IHNjcmF0Y2hfc3RhcnQsIHNjcmF0Y2hfZW5kO1xcbitcXHRwaHlzX2FkZHJfdCBib290bWVtX3N0YXJ0LCBib290bWVtX2VuZDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG4tXFx0XFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XFxuLVxcdFxcdHNjcmF0Y2hfZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciArIGtob19zY3JhdGNoW2ldLnNpemU7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBraG9fYm9vdG1lbV9jbnQ7IGkrKykge1xcbitcXHRcXHRib290bWVtX3N0YXJ0ID0ga2hvX2Jvb3RtZW1baV0uYWRkcjtcXG4rXFx0XFx0Ym9vdG1lbV9lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICsga2hvX2Jvb3RtZW1baV0uc2l6ZTtcXG4gXFxuLVxcdFxcdGlmIChwaHlzIFxcdTAwM2Mgc2NyYXRjaF9lbmQgXFx1MDAyNlxcdTAwMjYgKHBoeXMgKyBzaXplKSBcXHUwMDNlIHNjcmF0Y2hfc3RhcnQpXFxuK1xcdFxcdGlmIChwaHlzIFxcdTAwM2MgYm9vdG1lbV9lbmQgXFx1MDAyNlxcdTAwMjYgKHBoeXMgKyBzaXplKSBcXHUwMDNlIGJvb3RtZW1fc3RhcnQpXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC04MTksNyArODE5LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiB9XFxuIFxcbiAvKipcXG4tICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG4rICoga2hvX3Jlc2VydmVfYm9vdG1lbSAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG4gICpcXG4gICogV2l0aCBLSE8gd2UgY2FuIHByZXNlcnZlIGFyYml0cmFyeSBwYWdlcyBpbiB0aGUgc3lzdGVtLiBUbyBlbnN1cmUgd2Ugc3RpbGxcXG4gICogaGF2ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSB3aGVuIHdlIHNlYXJjaCB0aGUgcGh5c2ljYWwgYWRkcmVzc1xcbkBAIC04MjcsNyArODI3LDcgQEAgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbiAgKiBhY3RpdmUuIFRoaXMgQ01BIHJlZ2lvbiB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgbW92YWJsZSBwYWdlcyB3aGljaCBhcmUgbm90IGFcXG4gICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9ib290bWVtKHZvaWQpXFxuIHtcXG4gXFx0cGh5c19hZGRyX3QgYWRkciwgc2l6ZTtcXG4gXFx0aW50IG5pZCwgaSA9IDA7XFxuQEAgLTgzNSw3MyArODM1LDczIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuIFxcdGlmICgha2hvX2VuYWJsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0c2NyYXRjaF9zaXplX3VwZGF0ZSgpO1xcbitcXHRib290bWVtX3NpemVfdXBkYXRlKCk7XFxuIFxcbiBcXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXFxuLVxcdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcXG4tXFx0c2l6ZSA9IGtob19zY3JhdGNoX2NudCAqIHNpemVvZigqa2hvX3NjcmF0Y2gpO1xcbi1cXHRraG9fc2NyYXRjaCA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XFxuLVxcdGlmICgha2hvX3NjcmF0Y2gpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFycmF5XFxcXG5cXFwiKTtcXG4rXFx0a2hvX2Jvb3RtZW1fY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgKyAyO1xcbitcXHRzaXplID0ga2hvX2Jvb3RtZW1fY250ICogc2l6ZW9mKCpraG9fYm9vdG1lbSk7XFxuK1xcdGtob19ib290bWVtID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcXG4rXFx0aWYgKCFraG9fYm9vdG1lbSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byByZXNlcnZlIGJvb3RtZW0gYXJyYXlcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2tobztcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG4tXFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxcbitcXHQgKiByZXNlcnZlIGJvb3RtZW0gYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlXFxuIFxcdCAqIG5leHQga2VybmVsXFxuIFxcdCAqL1xcbi1cXHRzaXplID0gc2NyYXRjaF9zaXplX2xvd21lbTtcXG4tXFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXFxuK1xcdHNpemUgPSBib290bWVtX3NpemVfbG93bWVtO1xcbitcXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUywgMCxcXG4gXFx0XFx0XFx0XFx0XFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xcbiBcXHRpZiAoIWFkZHIpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXFxcblxcXCIpO1xcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfZGVzYztcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9kZXNjO1xcbiBcXHR9XFxuIFxcbi1cXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4tXFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XFxuK1xcdGtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyO1xcbitcXHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcXG4gXFx0aSsrO1xcbiBcXG4gXFx0LyogcmVzZXJ2ZSBsYXJnZSBjb250aWd1b3VzIGFyZWEgZm9yIGFsbG9jYXRpb25zIHdpdGhvdXQgbmlkICovXFxuLVxcdHNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsO1xcbi1cXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdHNpemUgPSBib290bWVtX3NpemVfZ2xvYmFsO1xcbitcXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XFxuIFxcdGlmICghYWRkcikge1xcbi1cXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgYm9vdG1lbVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcXG4gXFx0fVxcbiBcXG4tXFx0a2hvX3NjcmF0Y2hbaV0uYWRkciA9IGFkZHI7XFxuLVxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbitcXHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcXG4rXFx0a2hvX2Jvb3RtZW1baV0uc2l6ZSA9IHNpemU7XFxuIFxcdGkrKztcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIExvb3Agb3ZlciBub2RlcyB0aGF0IGhhdmUgYm90aCBtZW1vcnkgYW5kIGFyZSBvbmxpbmUuIFNraXBcXG4tXFx0ICogbWVtb3J5bGVzcyBub2RlcywgYXMgd2UgY2FuIG5vdCBhbGxvY2F0ZSBzY3JhdGNoIGFyZWFzIHRoZXJlLlxcbitcXHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIGJvb3RtZW0gYXJlYXMgdGhlcmUuXFxuIFxcdCAqL1xcbiBcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG4tXFx0XFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XFxuLVxcdFxcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsXFxuK1xcdFxcdHNpemUgPSBib290bWVtX3NpemVfbm9kZShuaWQpO1xcbitcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRuaWQsIHRydWUpO1xcbiBcXHRcXHRpZiAoIWFkZHIpIHtcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgc2NyYXRjaCBidWZmZXJcXFxcblxcXCIsIG5pZCk7XFxuLVxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgYm9vdG1lbVxcXFxuXFxcIiwgbmlkKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9ib290bWVtX2FyZWFzO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4tXFx0XFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XFxuK1xcdFxcdGtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyO1xcbitcXHRcXHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcXG4gXFx0XFx0aSsrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm47XFxuIFxcbi1lcnJfZnJlZV9zY3JhdGNoX2FyZWFzOlxcbitlcnJfZnJlZV9ib290bWVtX2FyZWFzOlxcbiBcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuLVxcdFxcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fc2NyYXRjaFtpXS5hZGRyLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcXG4tZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOlxcbi1cXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XFxuK1xcdFxcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fYm9vdG1lbVtpXS5hZGRyLCBraG9fYm9vdG1lbVtpXS5zaXplKTtcXG4rZXJyX2ZyZWVfYm9vdG1lbV9kZXNjOlxcbitcXHRtZW1ibG9ja19mcmVlKGtob19ib290bWVtLCBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKSk7XFxuIGVycl9kaXNhYmxlX2tobzpcXG4tXFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcmVhLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXFxcblxcXCIpO1xcbitcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBib290bWVtLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXFxcblxcXCIpO1xcbiBcXHRraG9fZW5hYmxlID0gZmFsc2U7XFxuIH1cXG4gXFxuQEAgLTkxMSwxMSArOTExLDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuICAqIG9uIHNtYWxsZXIgc3lzdGVtcy4gVGhlIGFsZ29yaXRobSBpdHNlbGYgZG9lc24ndCBkZXBlbmQgb24gdGhlIGFjdHVhbCB2YWx1ZSxcXG4gICogc28gaXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBkaWZmZXJlbnQgaGV1cmlzdGljIGxhdGVyIGlmIG5lZWRlZC5cXG4gICovXFxuLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkVcXHRcXHRTWl8xR1xcbi0jZGVmaW5lIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVFxcdGNvbnN0X2lsb2cyKEtIT19TQ1JBVENIX0VYVF9CTEtTSVpFKVxcbisjZGVmaW5lIEtIT19ESVNDT1ZFUl9CTEtTSVpFXFx0XFx0U1pfMUdcXG4rI2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0hJRlRcXHRjb25zdF9pbG9nMihLSE9fRElTQ09WRVJfQkxLU0laRSlcXG4gXFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXFxuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxcbitzdGF0aWMgaW50IF9faW5pdCBraG9fZGlzY292ZXJfd2Fsa19sZWFmKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqYnVzeV9ibG9ja3MgPSBkYXRhO1xcbiBcXHRwaHlzX2FkZHJfdCBzdGFydCwgZW5kO1xcbkBAIC05MzAsNTQgKzkzMCw1NyBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4gXFx0ZW5kID0gc3RhcnQgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChvcmRlciArIFBBR0VfU0hJRlQpKTtcXG4gXFxuIFxcdHdoaWxlIChzdGFydCBcXHUwMDNjIGVuZCkge1xcbi1cXHRcXHRlcnIgPSBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2Nrcywgc3RhcnQgXFx1MDAzZVxcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcXG4rXFx0XFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHN0YXJ0IFxcdTAwM2VcXHUwMDNlIEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRcXHRzdGFydCArPSAoMVVMIFxcdTAwM2NcXHUwMDNjIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7XFxuK1xcdFxcdHN0YXJ0ICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXFxuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfd2Fsa19ub2RlKHBoeXNfYWRkcl90IHBoeXMsIHZvaWQgKmRhdGEpXFxuK3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcXG4gXFxuLVxcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcXHUwMDNlXFx1MDAzZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQpO1xcbitcXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHBoeXMgXFx1MDAzZVxcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcXG4gfVxcbiBcXG4gLyogQ2FsbGVkIGZvciB0aGUgYnVzeSBibG9jayByYWRpeCB0cmVlLiAqL1xcbi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X21hcmtfc2NyYXRjaCh1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4rc3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX21hcmtfbm9wcnNydih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRwaHlzX2FkZHJfdCAqcHJldl9lbmQgPSBkYXRhO1xcbi1cXHRwaHlzX2FkZHJfdCBzdGFydCA9IGtleSBcXHUwMDNjXFx1MDAzYyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQ7XFxuK1xcdHBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5IFxcdTAwM2NcXHUwMDNjIEtIT19ESVNDT1ZFUl9CTEtTSElGVDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmIChzdGFydCBcXHUwMDNlICpwcmV2X2VuZCkge1xcbi1cXHRcXHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xcbitcXHRcXHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHQqcHJldl9lbmQgPSBzdGFydCArICgxVUwgXFx1MDAzY1xcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcXG4rXFx0KnByZXZfZW5kID0gc3RhcnQgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbi0gKiBraG9fZXh0ZW5kX3NjcmF0Y2ggLSBFeHRlbmQgdGhlIHNjcmF0Y2ggcmVnaW9uc1xcbisgKiBraG9fZGlzY292ZXJfbm9wcnNydiAtIERpc2NvdmVyIG1lbW9yeSB3aXRoIG5vIHByZXNlcnZhdGlvbnNcXG4rICpcXG4rICogRGlzY292ZXJzIG1lbW9yeSByYW5nZXMgd2l0aCBubyBwcmVzZXJ2ZWQgbWVtb3J5IGFuZCBtYXJrcyBpdCBhcyBOT1BSU1JWLlxcbisgKiBUaGlzIGxldHMgbWVtYmxvY2sgYWxsb2NhdGUgbWVtb3J5IGZyb20gYXJlYXMgb3V0c2lkZSBLSE8gYm9vdG1lbS5cXG4gICpcXG4gICogVGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUgbWl4ZXMgYm90aCBwaHlzaWNhbCBhZGRyZXNzIGFuZCBvcmRlclxcbiAgKiBpbnRvIGEgc2luZ2xlIGtleS4gVGhpcyBtYWtlcyBpdCBoYXJkIHRvIGxvb2sgZm9yIGZyZWUgcmFuZ2VzIGRpcmVjdGx5LiBUaGlzXFxuICAqIGZ1bmN0aW9uIGZpcnN0IHdhbGtzIHRoZSByYWRpeCB0cmVlIGFuZCBkaWdlc3RzIGl0IGRvd24gaW50byBhbm90aGVyIHJhZGl4XFxuLSAqIHRyZWUsIHdob3NlIGtleXMgaWRlbnRpZnkgYmxvY2tzIG9mIHNpemUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NJWkUgd2hpY2hcXG4tICogY29udGFpbiBwcmVzZXJ2ZWQgbWVtb3J5LlxcbisgKiB0cmVlLCB3aG9zZSBrZXlzIGlkZW50aWZ5IGJsb2NrcyBvZiBzaXplIEtIT19ESVNDT1ZFUl9CTEtTSVpFIHdoaWNoIGNvbnRhaW5cXG4rICogcHJlc2VydmVkIG1lbW9yeS5cXG4gICpcXG4gICogVGhlbiBpdCB3YWxrcyB0aGUgZGlnZXN0ZWQgcmFkaXggdHJlZSBhbmQgbWFya3MgZXZlcnl0aGluZyB0aGF0IGRvZXNuJ3QgaGF2ZVxcbi0gKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIHNjcmF0Y2guXFxuKyAqIHByZXNlcnZlZCBtZW1vcnkgYXMgTk9QUlNSVi5cXG4gICpcXG4tICogTk9URTogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBzY3JhdGNoIGhhc1xcbisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGJvb3RtZW0gaGFzXFxuICAqIGF2YWlsYWJsZSBzcGFjZS5cXG4gICpcXG4gICogTk9URTogVGhlIHBhZ2VzIG9mIHRoZSBLSE8gcHJlc2VydmVkIG1lbW9yeSByYWRpeCB0cmVlIHRhYmxlcyBhcmUgbm90IG1hcmtlZFxcbkBAIC05ODYsMTggKzk4OSwxOCBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X21hcmtfc2NyYXRjaCh1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcXG4gICogdGhlbSB0byBiZSBcXFwicHJlc2VydmVkIG1lbW9yeVxcXCIgYW5kIG1hcmtzIHRoZWlyIGJsb2NrcyBhcyBidXN5LlxcbiAgKlxcbiAgKiBOT1RFOiBlZmlfaW5pdCgpOjpyZXNlcnZlX3JlZ2lvbnMoKSByZW1vdmVzIGFsbCByZWdpb25zIGV4Y2VwdFxcbi0gKiBNRU1CTE9DS19LSE9fU0NSQVRDSC4gVGhpcyBmdW5jdGlvbiBhZGRzIHN1Y2ggcmVnaW9ucyBidXQgdGhleSBhcmUgbm90IEtIT1xcbi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxcbisgKiBNRU1CTE9DS19LSE9fTk9QUlNSVi4gVGhpcyBmdW5jdGlvbiBhZGRzIHN1Y2ggcmVnaW9ucyBidXQgdGhleSBhcmUgbm90IEtIT1xcbisgKiBib290IG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxcbiAgKiBjYWxsZWQgYWZ0ZXIgcmVzZXJ2ZV9yZWdpb25zKCkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2V4dGVuZF9zY3JhdGNoKHZvaWQpXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7XFxuLVxcdFxcdC5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsXFxuLVxcdFxcdC5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsXFxuK1xcdFxcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZixcXG4rXFx0XFx0Lm5vZGUgPSBraG9fZGlzY292ZXJfd2Fsa19ub2RlLFxcbiBcXHR9O1xcbiBcXHRjb25zdCBzdHJ1Y3Qga2hvX3JhZGl4X3dhbGtfY2IgZXh0X2NiID0ge1xcbi1cXHRcXHQubGVhZiA9IGtob19leHRfbWFya19zY3JhdGNoLFxcbitcXHRcXHQubGVhZiA9IGtob19kaXNjb3Zlcl9tYXJrX25vcHJzcnYsXFxuIFxcdH07XFxuIFxcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnVzeV9yYWRpeF9jbGFzcztcXG4gXFx0c3RydWN0IGtob19yYWRpeF90cmVlIGJ1c3lfYmxvY2tzO1xcbkBAIC0xMDIyLDIxICsxMDI1LDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fZXh0ZW5kX3NjcmF0Y2godm9pZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBzY3JhdGNoLiAqL1xcbitcXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBub3Byc3J2LiAqL1xcbiBcXHRlcnIgPSBraG9fcmFkaXhfd2Fsa190cmVlKFxcdTAwMjZidXN5X2Jsb2NrcywgXFx1MDAyNmV4dF9jYiwgXFx1MDAyNnByZXZfZW5kKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiBNYXJrIGV2ZXJ5dGhpbmcgZnJvbSBsYXN0IGJ1c3kgYmxvY2sgdG8gZW5kIG9mIERSQU0uICovXFxuIFxcdGlmIChwcmV2X2VuZCBcXHUwMDNjIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpXFxuLVxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XFxuK1xcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XFxuIFxcbiBcXHQvKiBmYWxsdGhyb3VnaCAqL1xcbiBvdXQ6XFxuIFxcdGtob19yYWRpeF9kZXN0cm95X3RyZWUoXFx1MDAyNmJ1c3lfYmxvY2tzKTtcXG4gcHJpbnQ6XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGV4dGVuZCBzY3JhdGNoOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIoZXJyKSk7XFxuK1xcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGRpc2NvdmVyIGV4dHJhIGFsbG9jYXRhYmxlIG1lbW9yeTogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKGVycikpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTE1MCw3ICsxMTUzLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpKVxcbitcXHQgICAgV0FSTl9PTihraG9fYm9vdG1lbV9vdmVybGFwKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9rZXkodHJlZSwga2hvX2VuY29kZV9yYWRpeF9rZXkoUEZOX1BIWVMocGZuKSxcXG5AQCAtMTIyOCw3ICsxMjMxLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAoc3RhcnRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuK1xcdCAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAoc3RhcnRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdFxcdG5yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSkge1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC0xODI1LDcgKzE4MjgsNyBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxcbiBcXG4gXFx0ZXJyID0ga2hvX3JhZGl4X2luaXRfdHJlZSh0cmVlLCBOVUxMKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX2Jvb3RtZW07XFxuIFxcbiBcXHRraG9fb3V0LmZkdCA9IGtob19hbGxvY19wcmVzZXJ2ZShQQUdFX1NJWkUpO1xcbiBcXHRpZiAoSVNfRVJSKGtob19vdXQuZmR0KSkge1xcbkBAIC0xODU0LDkgKzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGJhc2VfcGZuID0gUEhZU19QRk4oa2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fc2NyYXRjaFtpXS5zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBiYXNlX3BmbiA9IFBIWVNfUEZOKGtob19ib290bWVtW2ldLmFkZHIpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0ga2hvX2Jvb3RtZW1baV0uc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE4NjQsMTAgKzE4NjcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcXG4gXFx0XFx0ICogY29ycmVzcG9uZGluZyBQUkVTRU5UIGJpdCBpbiB0aGUga2VybmVsIHBhZ2UgdGFibGUuXFxuIFxcdFxcdCAqIFN1YnNlcXVlbnQga21lbWxlYWsgc2NhbnMgb2YgdGhlc2UgcGFnZXMgY2F1c2UgdGhlXFxuIFxcdFxcdCAqIG5vbi1QUkVTRU5UIHBhZ2UgZmF1bHRzLlxcbi1cXHRcXHQgKiBNYXJrIHNjcmF0Y2ggYXJlYXMgd2l0aCBrbWVtbGVha19pZ25vcmVfcGh5cygpIHRvIGV4Y2x1ZGVcXG4rXFx0XFx0ICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlXFxuIFxcdFxcdCAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpO1xcbitcXHRcXHRrbWVtbGVha19pZ25vcmVfcGh5cyhraG9fYm9vdG1lbVtpXS5hZGRyKTtcXG4gXFx0XFx0Zm9yIChwZm4gPSBiYXNlX3BmbjsgcGZuIFxcdTAwM2MgYmFzZV9wZm4gKyBjb3VudDtcXG4gXFx0XFx0ICAgICBwZm4gKz0gcGFnZWJsb2NrX25yX3BhZ2VzKVxcbiBcXHRcXHRcXHRpbml0X2NtYV9yZXNlcnZlZF9wYWdlYmxvY2socGZuX3RvX3BhZ2UocGZuKSk7XFxuQEAgLTE4ODMsMTEgKzE4ODYsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcXG4gXFx0a2hvX3VucHJlc2VydmVfZnJlZShraG9fb3V0LmZkdCk7XFxuIGVycl9mcmVlX2tob19yYWRpeF90cmVlOlxcbiBcXHRraG9fcmFkaXhfZGVzdHJveV90cmVlKHRyZWUpO1xcbi1lcnJfZnJlZV9zY3JhdGNoOlxcbitlcnJfZnJlZV9ib290bWVtOlxcbiBcXHRraG9fb3V0LmZkdCA9IE5VTEw7XFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG4tXFx0XFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xcbi1cXHRcXHR2b2lkICplbmQgPSBzdGFydCArIGtob19zY3JhdGNoW2ldLnNpemU7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcXG4rXFx0XFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpO1xcbitcXHRcXHR2b2lkICplbmQgPSBzdGFydCArIGtob19ib290bWVtW2ldLnNpemU7XFxuIFxcbiBcXHRcXHRmcmVlX3Jlc2VydmVkX2FyZWEoc3RhcnQsIGVuZCwgLTEsIFxcXCJcXFwiKTtcXG4gXFx0fVxcbkBAIC0xOTA2LDcgKzE5MDksNyBAQCB2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZClcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGtob19nZXRfbWVtX21hcCgpIHNob3VsZCBhbHdheXMgc3VjY2VlZC4gSWYgaXQgZmFpbHMsIGtob19wb3B1bGF0ZSgpXFxuLVxcdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uc2NyYXRjaF9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcXG4rXFx0ICogY2F0Y2hlcyB0aGF0IGFuZCBuZXZlciBzZXRzIGtob19pbi5ib290bWVtX3BoeXMsIHdoaWNoIHN0b3BzIG1lbW9yeVxcbiBcXHQgKiByZXRyaWV2YWwuXFxuIFxcdCAqL1xcbiBcXHRtZW1fbWFwID0ga2hvX2dldF9tZW1fbWFwKGZkdCk7XFxuQEAgLTE5MTQsNDEgKzE5MTcsNDAgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0LypcXG4tXFx0ICoga2hvX3NjcmF0Y2hfb3ZlcmxhcCgpIG5lZWRzIGtob19zY3JhdGNoIHRvIGJlIGluaXRpYWxpemVkLiBJdFxcbi1cXHQgKiBpcyB1c2VkIGJ5IGZyZWVfYXJlYV9pbml0KCkgb24gS0hPIGJvb3RzLCBzbyBpbml0aWFsaXplIGl0XFxuLVxcdCAqIGVhcmx5LlxcbitcXHQgKiBraG9fYm9vdG1lbV9vdmVybGFwKCkgbmVlZHMga2hvX2Jvb3RtZW0gdG8gYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIHVzZWRcXG4rXFx0ICogYnkgZnJlZV9hcmVhX2luaXQoKSBvbiBLSE8gYm9vdHMsIHNvIGluaXRpYWxpemUgaXQgZWFybHkuXFxuIFxcdCAqL1xcbi1cXHRraG9fc2NyYXRjaCA9IHBoeXNfdG9fdmlydChraG9faW4uc2NyYXRjaF9waHlzKTtcXG4rXFx0a2hvX2Jvb3RtZW0gPSBwaHlzX3RvX3ZpcnQoa2hvX2luLmJvb3RtZW1fcGh5cyk7XFxuIFxcbiBcXHRpZiAoa2hvX3JhZGl4X2luaXRfdHJlZShcXHUwMDI2a2hvX2luLnJhZGl4X3RyZWUsIG1lbV9tYXApKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuLVxcdGtob19leHRlbmRfc2NyYXRjaCgpO1xcbitcXHRraG9fZGlzY292ZXJfbm9wcnNydigpO1xcbiBcXG4gXFx0cmV0dXJuO1xcbiBcXG4gZXJyOlxcbiBcXHQvKlxcbiBcXHQgKiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuIENsZWFyIEZEVFxcbi1cXHQgKiBhbmQgc2NyYXRjaCBzbyBLSE8gdXNlcnMgZG9uJ3QgdHJlYXQgaXQgYXMgYSBLSE8gYm9vdC5cXG4rXFx0ICogYW5kIGJvb3RtZW0gc28gS0hPIHVzZXJzIGRvbid0IHRyZWF0IGl0IGFzIGEgS0hPIGJvb3QuXFxuIFxcdCAqL1xcbiBcXHRraG9faW4uZmR0X3BoeXMgPSAwO1xcbi1cXHRraG9faW4uc2NyYXRjaF9waHlzID0gMDtcXG4rXFx0a2hvX2luLmJvb3RtZW1fcGh5cyA9IDA7XFxuIH1cXG4gXFxuIHZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdGlmIChraG9faW4uc2NyYXRjaF9waHlzKVxcbitcXHRpZiAoa2hvX2luLmJvb3RtZW1fcGh5cylcXG4gXFx0XFx0a2hvX21lbV9yZXRyaWV2ZSgpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGtob19yZXNlcnZlX3NjcmF0Y2goKTtcXG4rXFx0XFx0a2hvX3Jlc2VydmVfYm9vdG1lbSgpO1xcbiB9XFxuIFxcbiB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxcbi1cXHRcXHRcXHQgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLCB1NjQgc2NyYXRjaF9sZW4pXFxuK1xcdFxcdFxcdCBwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsIHU2NCBib290bWVtX2xlbilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2xlbiAvIHNpemVvZigqa2hvX3NjcmF0Y2gpO1xcbi1cXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBpbnQgYm9vdG1lbV9jbnQgPSBib290bWVtX2xlbiAvIHNpemVvZigqa2hvX2Jvb3RtZW0pO1xcbitcXHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmJvb3RtZW0gPSBOVUxMO1xcbiBcXHRwaHlzX2FkZHJfdCBtZW1fbWFwX3BoeXM7XFxuIFxcdHZvaWQgKmZkdCA9IE5VTEw7XFxuIFxcdGJvb2wgcG9wdWxhdGVkID0gZmFsc2U7XFxuQEAgLTE5NzcsNTIgKzE5NzksNTIgQEAgdm9pZCBfX2luaXQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcXG4gXFx0aWYgKCFtZW1fbWFwX3BoeXMpXFxuIFxcdFxcdGdvdG8gdW5tYXBfZmR0O1xcbiBcXG4tXFx0c2NyYXRjaCA9IGVhcmx5X21lbXJlbWFwKHNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pO1xcbi1cXHRpZiAoIXNjcmF0Y2gpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwic2V0dXA6IGZhaWxlZCB0byBtZW1yZW1hcCBzY3JhdGNoIChwaHlzPTB4JWxseCwgbGVuPSVsbGQpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRzY3JhdGNoX3BoeXMsIHNjcmF0Y2hfbGVuKTtcXG4rXFx0Ym9vdG1lbSA9IGVhcmx5X21lbXJlbWFwKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xcbitcXHRpZiAoIWJvb3RtZW0pIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic2V0dXA6IGZhaWxlZCB0byBtZW1yZW1hcCBib290bWVtIChwaHlzPTB4JWxseCwgbGVuPSVsbGQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcXG4gXFx0XFx0Z290byB1bm1hcF9mZHQ7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFdlIHBhc3MgYSBzYWZlIGNvbnRpZ3VvdXMgYmxvY2tzIG9mIG1lbW9yeSB0byB1c2UgZm9yIGVhcmx5IGJvb3RcXG4tXFx0ICogcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhbiByZXNpemUgdGhlXFxuLVxcdCAqIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cXG4rXFx0ICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHdpdGggbm8gcHJlc2VydmF0aW9ucyB0b1xcbitcXHQgKiB1c2UgZm9yIGVhcmx5IGJvb3QgcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhblxcbitcXHQgKiByZXNpemUgdGhlIG1lbWJsb2NrIGFycmF5IGFzIG5lZWRlZC5cXG4gXFx0ICovXFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2NyYXRjaF9jbnQ7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmFyZWEgPSBcXHUwMDI2c2NyYXRjaFtpXTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBib290bWVtX2NudDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBraG9fYm9vdG1lbSAqYXJlYSA9IFxcdTAwMjZib290bWVtW2ldO1xcbiBcXHRcXHR1NjQgc2l6ZSA9IGFyZWEtXFx1MDAzZXNpemU7XFxuIFxcbiBcXHRcXHRtZW1ibG9ja19hZGQoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxuLVxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxuK1xcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIG1hcmsgdGhlIHNjcmF0Y2ggcmVnaW9uIDB4JXBhKzB4JXBhOiAlcGVcXFwiLFxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJmYWlsZWQgdG8gbWFyayB0aGUgYm9vdG1lbSByZWdpb24gMHglcGErMHglcGE6ICVwZVxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjZhcmVhLVxcdTAwM2VhZGRyLCBcXHUwMDI2c2l6ZSwgRVJSX1BUUihlcnIpKTtcXG4tXFx0XFx0XFx0Z290byB1bm1hcF9zY3JhdGNoO1xcbitcXHRcXHRcXHRnb3RvIHVubWFwX2Jvb3RtZW07XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHJfZGVidWcoXFxcIk1hcmtlZCAweCVwYSsweCVwYSBhcyBzY3JhdGNoXFxcIiwgXFx1MDAyNmFyZWEtXFx1MDAzZWFkZHIsIFxcdTAwMjZzaXplKTtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIk1hcmtlZCAweCVwYSsweCVwYSBhcyBib290bWVtXFxcIiwgXFx1MDAyNmFyZWEtXFx1MDAzZWFkZHIsIFxcdTAwMjZzaXplKTtcXG4gXFx0fVxcbiBcXG4tXFx0bWVtYmxvY2tfcmVzZXJ2ZShzY3JhdGNoX3BoeXMsIHNjcmF0Y2hfbGVuKTtcXG4rXFx0bWVtYmxvY2tfcmVzZXJ2ZShib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIHNjcmF0Y2ggbWVtb3J5LCBsZXQncyB0ZWxsXFxuK1xcdCAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIGJvb3QgbWVtb3J5LCBsZXQncyB0ZWxsXFxuIFxcdCAqIHRoZSBtZW1ibG9ja3MgYWxsb2NhdG9yIHRvIG9ubHkgdXNlIHRoYXQgZm9yIGFueSBhbGxvY2F0aW9ucy5cXG4gXFx0ICogVGhhdCB3YXkgd2UgZW5zdXJlIHRoYXQgbm90aGluZyBzY3JpYmJsZXMgb3ZlciBpbiB1c2UgZGF0YSB3aGlsZVxcbiBcXHQgKiB3ZSBpbml0aWFsaXplIHRoZSBwYWdlIHRhYmxlcyB3aGljaCB3ZSB3aWxsIG5lZWQgdG8gaW5nZXN0IGFsbFxcbiBcXHQgKiBtZW1vcnkgcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC5cXG4gXFx0ICovXFxuLVxcdG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KCk7XFxuK1xcdG1lbWJsb2NrX3NldF9raG9fbm9wcnNydl9vbmx5KCk7XFxuIFxcbiBcXHRraG9faW4uZmR0X3BoeXMgPSBmZHRfcGh5cztcXG4tXFx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5cztcXG4tXFx0a2hvX3NjcmF0Y2hfY250ID0gc2NyYXRjaF9jbnQ7XFxuK1xcdGtob19pbi5ib290bWVtX3BoeXMgPSBib290bWVtX3BoeXM7XFxuK1xcdGtob19ib290bWVtX2NudCA9IGJvb3RtZW1fY250O1xcbiBcXG4gXFx0cG9wdWxhdGVkID0gdHJ1ZTtcXG4gXFx0cHJfaW5mbyhcXFwiZm91bmQga2V4ZWMgaGFuZG92ZXIgZGF0YS5cXFxcblxcXCIpO1xcbiBcXG4tdW5tYXBfc2NyYXRjaDpcXG4tXFx0ZWFybHlfbWVtdW5tYXAoc2NyYXRjaCwgc2NyYXRjaF9sZW4pO1xcbit1bm1hcF9ib290bWVtOlxcbitcXHRlYXJseV9tZW11bm1hcChib290bWVtLCBib290bWVtX2xlbik7XFxuIHVubWFwX2ZkdDpcXG4gXFx0ZWFybHlfbWVtdW5tYXAoZmR0LCBmZHRfbGVuKTtcXG4gcmVwb3J0OlxcbkBAIC0yMDM0LDQ3ICsyMDM2LDQ3IEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXFxuIFxcbiBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbiB7XFxuLVxcdHNzaXplX3Qgc2NyYXRjaF9zaXplO1xcbitcXHRzc2l6ZV90IGJvb3RtZW1fc2l6ZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuLVxcdHN0cnVjdCBrZXhlY19idWYgc2NyYXRjaDtcXG4rXFx0c3RydWN0IGtleGVjX2J1ZiBib290bWVtO1xcbiBcXG4gXFx0aWYgKCFraG9fZW5hYmxlIHx8IGltYWdlLVxcdTAwM2V0eXBlID09IEtFWEVDX1RZUEVfQ1JBU0gpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aW1hZ2UtXFx1MDAzZWtoby5mZHQgPSB2aXJ0X3RvX3BoeXMoa2hvX291dC5mZHQpO1xcbiBcXG4tXFx0c2NyYXRjaF9zaXplID0gc2l6ZW9mKCpraG9fc2NyYXRjaCkgKiBraG9fc2NyYXRjaF9jbnQ7XFxuLVxcdHNjcmF0Y2ggPSAoc3RydWN0IGtleGVjX2J1Zil7XFxuK1xcdGJvb3RtZW1fc2l6ZSA9IHNpemVvZigqa2hvX2Jvb3RtZW0pICoga2hvX2Jvb3RtZW1fY250O1xcbitcXHRib290bWVtID0gKHN0cnVjdCBrZXhlY19idWYpe1xcbiBcXHRcXHQuaW1hZ2UgPSBpbWFnZSxcXG4tXFx0XFx0LmJ1ZmZlciA9IGtob19zY3JhdGNoLFxcbi1cXHRcXHQuYnVmc3ogPSBzY3JhdGNoX3NpemUsXFxuK1xcdFxcdC5idWZmZXIgPSBraG9fYm9vdG1lbSxcXG4rXFx0XFx0LmJ1ZnN6ID0gYm9vdG1lbV9zaXplLFxcbiBcXHRcXHQubWVtID0gS0VYRUNfQlVGX01FTV9VTktOT1dOLFxcbi1cXHRcXHQubWVtc3ogPSBzY3JhdGNoX3NpemUsXFxuK1xcdFxcdC5tZW1zeiA9IGJvb3RtZW1fc2l6ZSxcXG4gXFx0XFx0LmJ1Zl9hbGlnbiA9IFNaXzY0SywgLyogTWFrZXMgaXQgZWFzaWVyIHRvIG1hcCAqL1xcbiBcXHRcXHQuYnVmX21heCA9IFVMT05HX01BWCxcXG4gXFx0XFx0LnRvcF9kb3duID0gdHJ1ZSxcXG4gXFx0fTtcXG4tXFx0ZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcihcXHUwMDI2c2NyYXRjaCk7XFxuK1xcdGVyciA9IGtleGVjX2FkZF9idWZmZXIoXFx1MDAyNmJvb3RtZW0pO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRpbWFnZS1cXHUwMDNla2hvLnNjcmF0Y2ggPSBcXHUwMDI2aW1hZ2UtXFx1MDAzZXNlZ21lbnRbaW1hZ2UtXFx1MDAzZW5yX3NlZ21lbnRzIC0gMV07XFxuK1xcdGltYWdlLVxcdTAwM2VraG8uYm9vdG1lbSA9IFxcdTAwMjZpbWFnZS1cXHUwMDNlc2VnbWVudFtpbWFnZS1cXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcXG4rc3RhdGljIGludCBraG9fd2Fsa19ib290bWVtKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuIFxcdFxcdFxcdCAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9pZCAqKSlcXG4ge1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtob19ib290bWVtX2NudDsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXMgPSB7XFxuLVxcdFxcdFxcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXFxuLVxcdFxcdFxcdC5lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICsga2hvX3NjcmF0Y2hbaV0uc2l6ZSAtIDEsXFxuK1xcdFxcdFxcdC5zdGFydCA9IGtob19ib290bWVtW2ldLmFkZHIsXFxuK1xcdFxcdFxcdC5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICsga2hvX2Jvb3RtZW1baV0uc2l6ZSAtIDEsXFxuIFxcdFxcdH07XFxuIFxcbi1cXHRcXHQvKiBUcnkgdG8gZml0IHRoZSBraW1hZ2UgaW50byBvdXIgS0hPIHNjcmF0Y2ggcmVnaW9uICovXFxuK1xcdFxcdC8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gYm9vdG1lbSByZWdpb24gKi9cXG4gXFx0XFx0cmV0ID0gZnVuYyhcXHUwMDI2cmVzLCBrYnVmKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIwOTEsNyArMjA5Myw3IEBAIGludCBraG9fbG9jYXRlX21lbV9ob2xlKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuIFxcdGlmICgha2hvX2VuYWJsZSB8fCBrYnVmLVxcdTAwM2VpbWFnZS1cXHUwMDNldHlwZSA9PSBLRVhFQ19UWVBFX0NSQVNIKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdHJldCA9IGtob193YWxrX3NjcmF0Y2goa2J1ZiwgZnVuYyk7XFxuK1xcdHJldCA9IGtob193YWxrX2Jvb3RtZW0oa2J1ZiwgZnVuYyk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID09IDEgPyAwIDogLUVBRERSTk9UQVZBSUw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXFxuaW5kZXggMjU3ZWU4YTUyYmU2Ni4uN2Q3NDQ3N2RhMGI3OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmNcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmNcXG5AQCAtNzcsMjMgKzc3LDIzIEBAIHZvaWQga2hvX2RlYnVnZnNfYmxvYl9yZW1vdmUoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcsIHZvaWQgKmJsb2IpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGludCBzY3JhdGNoX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuK3N0YXRpYyBpbnQgYm9vdG1lbV9waHlzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiB7XFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXFxuLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspXFxuK1xcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX2Jvb3RtZW1baV0uYWRkcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9waHlzKTtcXG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGJvb3RtZW1fcGh5cyk7XFxuIFxcbi1zdGF0aWMgaW50IHNjcmF0Y2hfbGVuX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbitzdGF0aWMgaW50IGJvb3RtZW1fbGVuX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiB7XFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXFxuLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspXFxuK1xcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbi1ERUZJTkVfU0hPV19BVFRSSUJVVEUoc2NyYXRjaF9sZW4pO1xcbitERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9vdG1lbV9sZW4pO1xcbiBcXG4gX19pbml0IHZvaWQga2hvX2luX2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZywgY29uc3Qgdm9pZCAqZmR0KVxcbiB7XFxuQEAgLTE4NiwxMyArMTg2LDEzIEBAIF9faW5pdCBpbnQga2hvX291dF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcpXFxuIFxcdGlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKVxcbiBcXHRcXHRnb3RvIGVycl9ybWRpcjtcXG4gXFxuLVxcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzY3JhdGNoX3BoeXNcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZzY3JhdGNoX3BoeXNfZm9wcyk7XFxuK1xcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJib290bWVtX3BoeXNcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZib290bWVtX3BoeXNfZm9wcyk7XFxuIFxcdGlmIChJU19FUlIoZikpXFxuIFxcdFxcdGdvdG8gZXJyX3JtZGlyO1xcbiBcXG4tXFx0ZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNjcmF0Y2hfbGVuXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2c2NyYXRjaF9sZW5fZm9wcyk7XFxuK1xcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJib290bWVtX2xlblxcXCIsIDA0MDAsIGRpciwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmJvb3RtZW1fbGVuX2ZvcHMpO1xcbiBcXHRpZiAoSVNfRVJSKGYpKVxcbiBcXHRcXHRnb3RvIGVycl9ybWRpcjtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmggYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oXFxuaW5kZXggODA1ZDJhNzZjMzg4MS4uZTk2ODVlMWVmNmQ3OCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFxcbkBAIC0xOSw4ICsxOSw4IEBAIHN0cnVjdCBraG9fZGVidWdmcyB7XFxuIHN0cnVjdCBraG9fZGVidWdmcyB7fTtcXG4gI2VuZGlmXFxuIFxcbi1leHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcXG4tZXh0ZXJuIHVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XFxuK2V4dGVybiBzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xcbitleHRlcm4gdW5zaWduZWQgaW50IGtob19ib290bWVtX2NudDtcXG4gXFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbiBpbnQga2hvX2RlYnVnZnNfaW5pdCh2b2lkKTtcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li41NDE1ZTBiMzhiNWQ1IDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTQ4NSwxMCArNDg1LDYgQEAgY29uZmlnIEhBVkVfR1VQX0ZBU1RcXG4gXFx0ZGVwZW5kcyBvbiBNTVVcXG4gXFx0Ym9vbFxcbiBcXG4tIyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3Zlclxcbi1jb25maWcgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4tXFx0Ym9vbFxcbi1cXG4gIyBEb24ndCBkaXNjYXJkIGFsbG9jYXRlZCBtZW1vcnkgdXNlZCB0byB0cmFjayBcXFwibWVtb3J5XFxcIiBhbmQgXFxcInJlc2VydmVkXFxcIiBtZW1ibG9ja3NcXG4gIyBhZnRlciBlYXJseSBib290LCBzbyBpdCBjYW4gc3RpbGwgYmUgdXNlZCB0byB0ZXN0IGZvciB2YWxpZGl0eSBvZiBtZW1vcnkuXFxuICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxcbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xcbmluZGV4IDM3ZTA2ZTcwYzFkMDAuLjAzNTE5MTNjZTc5YjAgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtYmxvY2suY1xcbisrKyBiL21tL21lbWJsb2NrLmNcXG5AQCAtMTEyLDExICsxMTIsMTEgQEAgdW5zaWduZWQgbG9uZyBtaW5fbG93X3BmbjtcXG4gdW5zaWduZWQgbG9uZyBtYXhfcGZuO1xcbiB1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcXG4gXFxuLSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4tLyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19TQ1JBVENIIHJhbmdlcyAqL1xcbi1zdGF0aWMgYm9vbCBraG9fc2NyYXRjaF9vbmx5O1xcbisjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuKy8qIFdoZW4gc2V0IHRvIHRydWUsIG9ubHkgYWxsb2NhdGUgZnJvbSBNRU1CTE9DS19LSE9fTk9QUlNSViByYW5nZXMgKi9cXG4rc3RhdGljIGJvb2wga2hvX25vcHJzcnZfb25seTtcXG4gI2Vsc2VcXG4tI2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXFxuKyNkZWZpbmUga2hvX25vcHJzcnZfb25seSBmYWxzZVxcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uIG1lbWJsb2NrX21lbW9yeV9pbml0X3JlZ2lvbnNbSU5JVF9NRU1CTE9DS19NRU1PUllfUkVHSU9OU10gX19pbml0ZGF0YV9tZW1ibG9jaztcXG5AQCAtMTc4LDkgKzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZClcXG4gXFxuIHN0YXRpYyBlbnVtIG1lbWJsb2NrX2ZsYWdzIF9faW5pdF9tZW1ibG9jayBjaG9vc2VfbWVtYmxvY2tfZmxhZ3Modm9pZClcXG4ge1xcbi1cXHQvKiBza2lwIG5vbi1zY3JhdGNoIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cXG4tXFx0aWYgKGtob19zY3JhdGNoX29ubHkpXFxuLVxcdFxcdHJldHVybiBNRU1CTE9DS19LSE9fU0NSQVRDSDtcXG4rXFx0Lyogb25seSB1c2UgS0hPX05PUFJTUlYgbWVtb3J5IGZvciBraG8gZWFybHkgYm9vdCBhbGxvY2F0aW9ucyAqL1xcbitcXHRpZiAoa2hvX25vcHJzcnZfb25seSlcXG4rXFx0XFx0cmV0dXJuIE1FTUJMT0NLX0tIT19OT1BSU1JWO1xcbiBcXG4gXFx0cmV0dXJuIHN5c3RlbV9oYXNfc29tZV9taXJyb3IgPyBNRU1CTE9DS19NSVJST1IgOiBNRU1CTE9DS19OT05FO1xcbiB9XFxuQEAgLTExNzQsMzMgKzExNzQsMzMgQEAgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2lcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2ggLSBNYXJrIGEgbWVtb3J5IHJlZ2lvbiBhcyBNRU1CTE9DS19LSE9fU0NSQVRDSC5cXG4rICogbWVtYmxvY2tfbWFya19raG9fbm9wcnNydiAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19OT1BSU1JWLlxcbiAgKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb25cXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cXG4gICpcXG4tICogT25seSBtZW1vcnkgcmVnaW9ucyBtYXJrZWQgd2l0aCAlTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggd2lsbCBiZSBjb25zaWRlcmVkXFxuKyAqIE9ubHkgbWVtb3J5IHJlZ2lvbnMgbWFya2VkIHdpdGggJU1FTUJMT0NLX0tIT19OT1BSU1JWIHdpbGwgYmUgY29uc2lkZXJlZFxcbiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiAgKi9cXG4tX19pbml0IGludCBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuK19faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbiB7XFxuIFxcdHJldHVybiBtZW1ibG9ja19zZXRjbHJfZmxhZyhcXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAxLFxcbi1cXHRcXHRcXHRcXHQgICAgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpO1xcbitcXHRcXHRcXHRcXHQgICAgTUVNQkxPQ0tfS0hPX05PUFJTUlYpO1xcbiB9XFxuIFxcbiAvKipcXG4tICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXFxuKyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYVxcbiAgKiBzcGVjaWZpZWQgcmVnaW9uLlxcbiAgKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb25cXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiAgKi9cXG4tX19pbml0IGludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbitfX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIG1lbWJsb2NrX3NldGNscl9mbGFnKFxcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIDAsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1CTE9DS19LSE9fU0NSQVRDSCk7XFxuK1xcdFxcdFxcdFxcdCAgICBNRU1CTE9DS19LSE9fTk9QUlNSVik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG5AQCAtMTIzNiw5ICsxMjM2LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX3NraXBfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogSW4gZWFybHkgYWxsb2MgZHVyaW5nIGtleGVjIGhhbmRvdmVyLCB3ZSBjYW4gb25seSBjb25zaWRlclxcbi1cXHQgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcXG4rXFx0ICogTUVNQkxPQ0tfS0hPX05PUFJTUlYgcmVnaW9ucyBmb3IgdGhlIGFsbG9jYXRpb25zXFxuIFxcdCAqL1xcbi1cXHRpZiAoKGZsYWdzIFxcdTAwMjYgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpIFxcdTAwMjZcXHUwMDI2ICFtZW1ibG9ja19pc19raG9fc2NyYXRjaChtKSlcXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IE1FTUJMT0NLX0tIT19OT1BSU1JWKSBcXHUwMDI2XFx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX25vcHJzcnYobSkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXFxuIFxcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSBcXHUwMDI2XFx1MDAyNiAhZXhhY3RfbmlkKSB7XFxuIFxcdFxcdG5pZCA9IE5VTUFfTk9fTk9ERTtcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgYSBwcmV2aW91cyBjYW5kaWRhdGUgb3ZlcmxhcHBlZCB3aXRoIEtITyBzY3JhdGNoLCBpdCB3b3VsZFxcbitcXHRcXHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIGJvb3RtZW0sIGl0IHdvdWxkXFxuIFxcdFxcdCAqIHVwZGF0ZSBzdGFydCBvciBlbmQuIE5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgb3BlbmluZyB0byBhbGxcXG4gXFx0XFx0ICogbm9kZXMsIHJlc2V0IHRoZW0uXFxuIFxcdFxcdCAqL1xcbkBAIC0xODA5LDEyICsxODA5LDEyIEBAIHZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcXG4gZm91bmQ6XFxuIFxcdC8qXFxuIFxcdCAqIEh1Z2VUTEIgcGFnZXMgY2FuIGJlIHByZXNlcnZlZCB3aXRoIEtITyBhbmQgbm8gcHJlc2VydmVkIG1lbW9yeSBjYW5cXG4tXFx0ICogYmUgaW4gc2NyYXRjaC4gU28gcmV0cnkgaWYgZm91bmQgYWRkcmVzcyBvdmVybGFwcyB3aXRoIHNjcmF0Y2guXFxuK1xcdCAqIGJlIGluIGJvb3RtZW0uIFNvIHJldHJ5IGlmIGZvdW5kIGFkZHJlc3Mgb3ZlcmxhcHMgd2l0aCBib290bWVtLlxcbiBcXHQgKlxcbi1cXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJ3QgdGFrZSB0b29cXG4rXFx0ICogQm9vdG1lbSBhcmVhcyBhcmUgbm9ybWFsbHkgbm90IHZlcnkgbGFyZ2UsIHNvIHRoaXMgc2hvdWxkbid0IHRha2UgdG9vXFxuIFxcdCAqIG1hbnkgcmV0cmllcy5cXG4gXFx0ICovXFxuLVxcdGlmIChraG9fc2NyYXRjaF9vdmVybGFwKGFkZHIsIHNpemUpKSB7XFxuK1xcdGlmIChraG9fYm9vdG1lbV9vdmVybGFwKGFkZHIsIHNpemUpKSB7XFxuIFxcdFxcdGlmIChtZW1ibG9ja19ib3R0b21fdXAoKSlcXG4gXFx0XFx0XFx0c3RhcnQgPSBhZGRyICsgc2l6ZTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0yNDk5LDcgKzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKVxcbiBcXHRmcmVlX3VudXNlZF9tZW1tYXAoKTtcXG4gXFx0cmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKTtcXG4gXFxuLVxcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkoKTtcXG4rXFx0bWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSgpO1xcbiBcXHRwYWdlcyA9IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KCk7XFxuIFxcdHRvdGFscmFtX3BhZ2VzX2FkZChwYWdlcyk7XFxuIH1cXG5AQCAtMjU5NywxNSArMjU5NywxNSBAQCBpbnQgcmVzZXJ2ZV9tZW1fcmVsZWFzZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXFxuLV9faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXFxuKyNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG4rX19pbml0IHZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZClcXG4ge1xcbi1cXHRraG9fc2NyYXRjaF9vbmx5ID0gdHJ1ZTtcXG4rXFx0a2hvX25vcHJzcnZfb25seSA9IHRydWU7XFxuIH1cXG4gXFxuLV9faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZClcXG4rX19pbml0IHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKVxcbiB7XFxuLVxcdGtob19zY3JhdGNoX29ubHkgPSBmYWxzZTtcXG4rXFx0a2hvX25vcHJzcnZfb25seSA9IGZhbHNlO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtMjg2MSw3ICsyODYxLDcgQEAgc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9tZW0oY2hhciAqcClcXG4gXFx0aWYgKHJlc2VydmVfbWVtX2tob19yZXZpdmUobmFtZSwgc2l6ZSwgYWxpZ24pKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIHNjcmF0Y2ggcmVnaW9uICovXFxuK1xcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqL1xcbiBcXHRzdGFydCA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgYWxpZ24pO1xcbiBcXHRpZiAoIXN0YXJ0KSB7XFxuIFxcdFxcdHByX2VycihcXFwicmVzZXJ2ZV9tZW06IG1lbWJsb2NrIGFsbG9jYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtMjg4Niw3ICsyODg2LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xcbiBcXHRbaWxvZzIoTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQpXSA9IFxcXCJEUlZfTU5HXFxcIixcXG4gXFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSBcXFwiUlNWX05JVFxcXCIsXFxuIFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFxcXCJSU1ZfS0VSTlxcXCIsXFxuLVxcdFtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gXFxcIktIT19TQ1JBVENIXFxcIixcXG4rXFx0W2lsb2cyKE1FTUJMT0NLX0tIT19OT1BSU1JWKV0gPSBcXFwiS0hPX05PUFJTUlZcXFwiLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggNzhkNjM3ODlhOTY5MC4uZDAzMTU2YmUwZTEwNCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtNjgxLDcgKzY4MSw3IEBAIHN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBwZm4gKyBucl9wYWdlcztcXG4gXFxuIFxcdGZvciAocGZuID0gcGFnZWJsb2NrX2FsaWduKHBmbik7IHBmbiBcXHUwMDNjIGVuZDsgcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xcbi1cXHRcXHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XFxuK1xcdFxcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcXG4gXFxuIFxcdFxcdGluaXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBmbl90b19wYWdlKHBmbiksIG10LCBmYWxzZSk7XFxuIFxcdFxcdGlmICghYXRvbWljIFxcdTAwMjZcXHUwMDI2IElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuQEAgLTc2NCw3ICs3NjQsNyBAQCBzdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuIFxcbiBcXHRpZiAocGFnZWJsb2NrX2FsaWduZWQocGZuKSkge1xcbiBcXHRcXHRlbnVtIG1pZ3JhdGV0eXBlIG10ID1cXG4tXFx0XFx0XFx0a2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xcbitcXHRcXHRcXHRraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIE1JR1JBVEVfTU9WQUJMRSk7XFxuIFxcdFxcdGluaXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBmbl90b19wYWdlKHBmbiksIG10LCBmYWxzZSk7XFxuIFxcdH1cXG4gfVxcbkBAIC05MjQsNyArOTI0LDcgQEAgdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHpvbmVcXG4gXFx0XFx0ICogb3ZlciB0aGUgcGxhY2UgZHVyaW5nIHN5c3RlbSBib290LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHBhZ2VibG9ja19hbGlnbmVkKHBmbikpIHtcXG4tXFx0XFx0XFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xcbitcXHRcXHRcXHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX2Jvb3RtZW1fbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XFxuIFxcbiBcXHRcXHRcXHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLCBtdCwgaXNvbGF0ZV9wYWdlYmxvY2spO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oXFxuaW5kZXggZTg2YmI5MDAwYjIyZi4uNDZjNWExNTZmY2U0MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmhcXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxcbiBcXG4gI2RlZmluZSBfX1NldFBhZ2VSZXNlcnZlZChwKVxcdCgodm9pZCkocCkpXFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4rc3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ5OjE5LjYzMjI1NzkxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2Mjg4MTMzMzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAnc2NyYXRjaCcgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJ2Jvb3RtZW0nIGFuZCAnbm9wcnNydicuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1YmY1NzY2ZWRjZmNmZDUzMjdlNGZjZDllY2I3NDY4NGQ0ZTQyNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0OToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjguLmEwMzkyN2ZmYjg1ZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0yOTg5LDExICsyOTg5LDEyIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0XCIwXCIgfCBcIm9mZlwiIHwgXCJuXCIgLSBrZXhlYyBoYW5kb3ZlciBpcyBkaXNhYmxlZFxuIFx0XHRcdFwiMVwiIHwgXCJvblwiIHwgXCJ5XCIgLSBrZXhlYyBoYW5kb3ZlciBpcyBlbmFibGVkXG4gXG4tXHRraG9fc2NyYXRjaD1cdFtLRVhFQyxFQVJMWV1cbitcdGtob19ib290bWVtPVx0W0tFWEVDLEVBUkxZXVxuIFx0XHRcdEZvcm1hdDogbGxbS01HXSxtbVtLTUddLG5uW0tNR10gfCBubiVcbi1cdFx0XHREZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBLSE8gc2NyYXRjaCByZWdpb24uIFRoZSBLSE9cbi1cdFx0XHRzY3JhdGNoIHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnlcbi1cdFx0XHRyYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXG4rXG4rXHRcdFx0RGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgS0hPIGJvb3QgbWVtb3J5IHJlZ2lvbi4gVGhlXG4rXHRcdFx0S0hPIGJvb3QgbWVtb3J5IHJlZ2lvbnMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91c1xuK1x0XHRcdG1lbW9yeSByYW5nZXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGZvciBub24ta2VybmVsXG4gXHRcdFx0YWxsb2NhdGlvbnMuIFRoYXQgd2F5LCBldmVuIHdoZW4gbWVtb3J5IGlzIGhlYXZpbHlcbiBcdFx0XHRmcmFnbWVudGVkIHdpdGggaGFuZGVkIG92ZXIgbWVtb3J5LCB0aGUga2V4ZWNlZFxuIFx0XHRcdGtlcm5lbCB3aWxsIGFsd2F5cyBoYXZlIGVub3VnaCBjb250aWd1b3VzIHJhbmdlcyB0b1xuQEAgLTMwMDIsMTAgKzMwMDMsMTAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBleGFjdCBhbW91bnQgb2ZcbiBcdFx0XHRtZW1vcnkgaW4gdGhlIGZvcm0gb2YgXCJsbFtLTUddLG1tW0tNR10sbm5bS01HXVwiXG4gXHRcdFx0d2hlcmUgdGhlIGZpcnN0IHBhcmFtZXRlciBkZWZpbmVzIHRoZSBzaXplIG9mIGEgbG93XG4tXHRcdFx0bWVtb3J5IHNjcmF0Y2ggYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xuLVx0XHRcdHRoZSBzaXplIG9mIGEgZ2xvYmFsIHNjcmF0Y2ggYXJlYSBhbmQgdGhlIHRoaXJkXG4rXHRcdFx0bWVtb3J5IGJvb3RtZW0gYXJlYSwgdGhlIHNlY29uZCBwYXJhbWV0ZXIgZGVmaW5lc1xuK1x0XHRcdHRoZSBzaXplIG9mIGEgZ2xvYmFsIGJvb3RtZW0gYXJlYSBhbmQgdGhlIHRoaXJkXG4gXHRcdFx0cGFyYW1ldGVyIGRlZmluZXMgdGhlIHNpemUgb2YgYWRkaXRpb25hbCBwZXItbm9kZVxuLVx0XHRcdHNjcmF0Y2ggYXJlYXMuICBUaGUgZm9ybSBcIm5uJVwiIGRlZmluZXMgc2NhbGUgZmFjdG9yXG4rXHRcdFx0Ym9vdG1lbSBhcmVhcy4gIFRoZSBmb3JtIFwibm4lXCIgZGVmaW5lcyBzY2FsZSBmYWN0b3JcbiBcdFx0XHQoaW4gcGVyY2VudHMpIG9mIG1lbW9yeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBib290LlxuIFxuIFx0a21hYz1cdFx0W01JUFNdIEtvcmluYSBldGhlcm5ldCBNQUMgYWRkcmVzcy5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcbmluZGV4IDJjMjZlNTYwYmQ3OGEuLmYxNGM4ZDlhZDZhNDUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdFxuQEAgLTIwLDEwICsyMCwxMCBAQCBuZWVkIHRvIGVuYWJsZSBpZiB5b3Ugd291bGQgbGlrZSB0byBwcmVzZXJ2ZSB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGFjcm9zc1xuIGtleGVjLlxuIFxuIFRvIHVzZSBLSE8sIHBsZWFzZSBib290IHRoZSBrZXJuZWwgd2l0aCB0aGUgYGBraG89b25gYCBjb21tYW5kIGxpbmVcbi1wYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX3NjcmF0Y2hgYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXG4tc2NyYXRjaCByZWdpb25zLiBGb3IgZXhhbXBsZSBgYGtob19zY3JhdGNoPTE2TSw1MTJNLDI1Nk1gYCB3aWxsIHJlc2VydmUgYVxuLTE2IE1pQiBsb3cgbWVtb3J5IHNjcmF0Y2ggYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBzY3JhdGNoIHJlZ2lvbiwgYW5kIDI1NiBNaUJcbi1wZXIgTlVNQSBub2RlIHNjcmF0Y2ggcmVnaW9ucyBvbiBib290LlxuK3BhcmFtZXRlci4gWW91IG1heSB1c2UgYGBraG9fYm9vdG1lbWBgIHBhcmFtZXRlciB0byBkZWZpbmUgc2l6ZSBvZiB0aGVcbitib290IG1lbW9yeSByZWdpb25zLiBGb3IgZXhhbXBsZSBgYGtob19ib290bWVtPTE2TSw1MTJNLDI1Nk1gYCB3aWxsIHJlc2VydmUgYVxuKzE2IE1pQiBsb3cgbWVtb3J5IGJvb3RtZW0gYXJlYSwgYSA1MTIgTWlCIGdsb2JhbCBib290bWVtIHJlZ2lvbiwgYW5kIDI1NiBNaUJcbitwZXIgTlVNQSBub2RlIGJvb3RtZW0gcmVnaW9ucyBvbiBib290LlxuIFxuIFBlcmZvcm0gYSBLSE8ga2V4ZWNcbiA9PT09PT09PT09PT09PT09PT09XG5AQCAtOTYsMTUgKzk2LDE1IEBAIHN0YWJpbGl6ZWQuXG4gICAgIGN1cnJlbnQgS0hPIHN0YXRlIGluIHRoaXMgZmlsZS4gS2V4ZWMgdXNlciBzcGFjZSB0b29saW5nIGNhbiB1c2UgdGhpc1xuICAgICBhcyBpbnB1dCBmaWxlIGZvciB0aGUgS0hPIHBheWxvYWQgaW1hZ2UuXG4gXG4tYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3NjcmF0Y2hfbGVuYGBcbi0gICAgTGVuZ3RocyBvZiBLSE8gc2NyYXRjaCByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4rYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L2Jvb3RtZW1fbGVuYGBcbisgICAgTGVuZ3RocyBvZiBLSE8gYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzXG4gICAgIG1lbW9yeSByZWdpb25zIHRoYXQgd2lsbCBhbHdheXMgc3RheSBhdmFpbGFibGUgZm9yIGZ1dHVyZSBrZXhlY1xuICAgICBhbGxvY2F0aW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29scyBjYW4gdXNlIHRoaXMgZmlsZSB0byBkZXRlcm1pbmVcbiAgICAgd2hlcmUgaXQgc2hvdWxkIHBsYWNlIGl0cyBwYXlsb2FkIGltYWdlcy5cbiBcbi1gYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc2NyYXRjaF9waHlzYGBcbi0gICAgUGh5c2ljYWwgbG9jYXRpb25zIG9mIEtITyBzY3JhdGNoIHJlZ2lvbnMuIEtleGVjIHVzZXIgc3BhY2UgdG9vbHNcbi0gICAgY2FuIHVzZSB0aGlzIGZpbGUgaW4gY29uanVuY3Rpb24gdG8gc2NyYXRjaF9waHlzIHRvIGRldGVybWluZSB3aGVyZVxuK2BgL3N5cy9rZXJuZWwvZGVidWcva2hvL291dC9ib290bWVtX3BoeXNgYFxuKyAgICBQaHlzaWNhbCBsb2NhdGlvbnMgb2YgS0hPIGJvb3RtZW0gcmVnaW9ucy4gS2V4ZWMgdXNlciBzcGFjZSB0b29sc1xuKyAgICBjYW4gdXNlIHRoaXMgZmlsZSBpbiBjb25qdW5jdGlvbiB0byBib290bWVtX3BoeXMgdG8gZGV0ZXJtaW5lIHdoZXJlXG4gICAgIGl0IHNob3VsZCBwbGFjZSBpdHMgcGF5bG9hZCBpbWFnZXMuXG4gXG4gYGAvc3lzL2tlcm5lbC9kZWJ1Zy9raG8vb3V0L3N1Yl9mZHRzL2BgXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG5pbmRleCAzMjA5MTRhNDIxNzhlLi5lNzhhMmJiZTJiZTFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3RcbkBAIC0xMyw4ICsxMyw4IEBAIEtleGVjIEhhbmRPdmVyIChLSE8pIGlzIGEgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIExpbnV4IHRvIHByZXNlcnZlIG1lbW9yeVxuIHJlZ2lvbnMsIHdoaWNoIGNvdWxkIGNvbnRhaW4gc2VyaWFsaXplZCBzeXN0ZW0gc3RhdGVzLCBhY3Jvc3Mga2V4ZWMuXG4gXG4gS0hPIHVzZXMgOnJlZjpgZmxhdHRlbmVkIGRldmljZSB0cmVlIChGRFQpIFx1MDAzY2tob19mZHRcdTAwM2VgIHRvIHBhc3MgaW5mb3JtYXRpb24gYWJvdXRcbi10aGUgcHJlc2VydmVkIHN0YXRlIGZyb20gcHJlLWV4ZWMga2VybmVsIHRvIHBvc3Qta2V4ZWMga2VybmVsIGFuZCA6cmVmOmBzY3JhdGNoXG4tbWVtb3J5IHJlZ2lvbnMgXHUwMDNja2hvX3NjcmF0Y2hcdTAwM2VgIHRvIGVuc3VyZSBpbnRlZ3JpdHkgb2YgdGhlIHByZXNlcnZlZCBtZW1vcnkuXG4rdGhlIHByZXNlcnZlZCBzdGF0ZSBmcm9tIHByZS1leGVjIGtlcm5lbCB0byBwb3N0LWtleGVjIGtlcm5lbCBhbmQgOnJlZjpgYm9vdFxuK21lbW9yeSByZWdpb25zIFx1MDAzY2tob19ib290bWVtXHUwMDNlYCB0byBlbnN1cmUgaW50ZWdyaXR5IG9mIHRoZSBwcmVzZXJ2ZWQgbWVtb3J5LlxuIFxuIC4uIF9raG9fZmR0OlxuIFxuQEAgLTQwLDMxICs0MCwzMSBAQCBhbmQgcG9zdC1rZXhlYyBrZXJuZWxzLiBUaGlzIEFCSSBpcyBkZWZpbmVkIGJ5IGhlYWRlciBmaWxlcyBpblxuIFxuICAgIGFiaS5yc3RcbiBcbi0uLiBfa2hvX3NjcmF0Y2g6XG4rLi4gX2tob19ib290bWVtOlxuIFxuLVNjcmF0Y2ggUmVnaW9uc1xuLT09PT09PT09PT09PT09PVxuK0Jvb3QgTWVtb3J5IFJlZ2lvbnNcbis9PT09PT09PT09PT09PT09PT09XG4gXG4gVG8gYm9vdCBpbnRvIGtleGVjLCB3ZSBuZWVkIHRvIGhhdmUgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJhbmdlIHRoYXRcbiBjb250YWlucyBubyBoYW5kZWQgb3ZlciBtZW1vcnkuIEtleGVjIHRoZW4gcGxhY2VzIHRoZSB0YXJnZXQga2VybmVsIGFuZCBpbml0cmRcbiBpbnRvIHRoYXQgcmVnaW9uLiBUaGUgbmV3IGtlcm5lbCBleGNsdXNpdmVseSB1c2VzIHRoaXMgcmVnaW9uIGZvciBtZW1vcnlcbiBhbGxvY2F0aW9ucyBiZWZvcmUgZHVyaW5nIGJvb3QgdXAgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWdlIGFsbG9jYXRvci5cbiBcbi1XZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgc2NyYXRjaCByZWdpb25zOiBPblxuLWZpcnN0IGJvb3QgS0hPIGFsbG9jYXRlcyBzZXZlcmFsIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgcmVnaW9ucy4gU2luY2VcbitXZSBndWFyYW50ZWUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBzdWNoIHJlZ2lvbnMgdGhyb3VnaCB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uczpcbitPbiBmaXJzdCBib290IEtITyBhbGxvY2F0ZXMgc2V2ZXJhbCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMuIFNpbmNlXG4gYWZ0ZXIga2V4ZWMgdGhlc2UgcmVnaW9ucyB3aWxsIGJlIHVzZWQgYnkgZWFybHkgbWVtb3J5IGFsbG9jYXRpb25zLCB0aGVyZSBpcyBhXG4tc2NyYXRjaCByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgc2NyYXRjaCByZWdpb24gdG8gc2F0aXNmeSBhbGxvY2F0aW9uc1xuLXJlcXVlc3RzIHRoYXQgZG8gbm90IHJlcXVpcmUgcGFydGljdWxhciBOVU1BIG5vZGUgYXNzaWdubWVudC5cbi1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcbi1hbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG4tdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbnMuXG4tVGhlIHNjcmF0Y2ggcmVnaW9ucyBhcmUgZGVjbGFyZWQgYXMgQ01BIHdoZW4gcGFnZSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQgc29cbi10aGF0IHRoZWlyIG1lbW9yeSBjYW4gYmUgdXNlZCBkdXJpbmcgc3lzdGVtIGxpZmV0aW1lLiBDTUEgZ2l2ZXMgdXMgdGhlXG4tZ3VhcmFudGVlIHRoYXQgbm8gaGFuZG92ZXIgcGFnZXMgbGFuZCBpbiB0aGF0IHJlZ2lvbiwgYmVjYXVzZSBoYW5kb3ZlciBwYWdlc1xuLW11c3QgYmUgYXQgYSBzdGF0aWMgcGh5c2ljYWwgbWVtb3J5IGxvY2F0aW9uIGFuZCBDTUEgZW5mb3JjZXMgdGhhdCBvbmx5XG4tbW92YWJsZSBwYWdlcyBjYW4gYmUgbG9jYXRlZCBpbnNpZGUuXG4tXG4tQWZ0ZXIgS0hPIGtleGVjLCB3ZSBpZ25vcmUgdGhlIGBga2hvX3NjcmF0Y2hgYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmRcbitib290IG1lbW9yeSByZWdpb24gcGVyIE5VTUEgbm9kZSBwbHVzIGEgYm9vdCBtZW1vcnkgcmVnaW9uIHRvIHNhdGlzZnlcbithbGxvY2F0aW9ucyByZXF1ZXN0cyB0aGF0IGRvIG5vdCByZXF1aXJlIHBhcnRpY3VsYXIgTlVNQSBub2RlIGFzc2lnbm1lbnQuIEJ5XG4rZGVmYXVsdCwgc2l6ZSBvZiB0aGUgYm9vdCBtZW1vcnkgcmVnaW9uIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYW1vdW50IG9mIG1lbW9yeVxuK2FsbG9jYXRlZCBkdXJpbmcgYm9vdC4gVGhlIGBga2hvX2Jvb3RtZW1gYCBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBtYXkgYmVcbit1c2VkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIHNpemUgb2YgdGhlIGJvb3QgbWVtb3J5IHJlZ2lvbnMuIFRoZSBib290IG1lbW9yeVxuK3JlZ2lvbnMgYXJlIGRlY2xhcmVkIGFzIENNQSB3aGVuIHBhZ2UgYWxsb2NhdG9yIGlzIGluaXRpYWxpemVkIHNvIHRoYXQgdGhlaXJcbittZW1vcnkgY2FuIGJlIHVzZWQgZHVyaW5nIHN5c3RlbSBsaWZldGltZS4gQ01BIGdpdmVzIHVzIHRoZSBndWFyYW50ZWUgdGhhdCBub1xuK2hhbmRvdmVyIHBhZ2VzIGxhbmQgaW4gdGhhdCByZWdpb24sIGJlY2F1c2UgaGFuZG92ZXIgcGFnZXMgbXVzdCBiZSBhdCBhIHN0YXRpY1xuK3BoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiBhbmQgQ01BIGVuZm9yY2VzIHRoYXQgb25seSBtb3ZhYmxlIHBhZ2VzIGNhbiBiZSBsb2NhdGVkXG4raW5zaWRlLlxuK1xuK0FmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19ib290bWVtYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXG4gaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXG4gdXMgdG8gcmVjdXJzaXZlbHkgZXhlY3V0ZSBhbnkgYW1vdW50IG9mIEtITyBrZXhlY3MuIEJlY2F1c2Ugd2UgdXNlZCB0aGlzIHJlZ2lvblxuIGZvciBib290IG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYXMgdGFyZ2V0IG1lbW9yeSBmb3Iga2V4ZWMgYmxvYnMsIHNvbWUgcGFydHNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5pbmRleCAyMjI2N2E4M2UwNjRhLi4yOTAxNTM4MThkMGYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmNcbisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jXG5AQCAtNzY0LDEyICs3NjQsMTIgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19lODIwX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLFxuIH1cbiBcbiAvKlxuLSAqIElmIEtITyBpcyBhY3RpdmUsIG9ubHkgcHJvY2VzcyBpdHMgc2NyYXRjaCBhcmVhcyB0byBlbnN1cmUgd2UgYXJlIG5vdFxuKyAqIElmIEtITyBpcyBhY3RpdmUsIG9ubHkgcHJvY2VzcyBpdHMgYm9vdG1lbSBhcmVhcyB0byBlbnN1cmUgd2UgYXJlIG5vdFxuICAqIHN0ZXBwaW5nIG9udG8gcHJlc2VydmVkIG1lbW9yeS5cbiAgKi9cbiBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKVxuIHtcbi1cdHN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XG4rXHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuIFx0c3RydWN0IHNldHVwX2RhdGEgKnB0cjtcbiBcdHN0cnVjdCBraG9fZGF0YSAqa2hvO1xuIFx0aW50IGksIG5yX2FyZWFzID0gMDtcbkBAIC03ODEsOCArNzgxLDggQEAgc3RhdGljIGJvb2wgcHJvY2Vzc19raG9fZW50cmllcyh1bnNpZ25lZCBsb25nIG1pbmltdW0sIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZSlcbiBcdHdoaWxlIChwdHIpIHtcbiBcdFx0aWYgKHB0ci1cdTAwM2V0eXBlID09IFNFVFVQX0tFWEVDX0tITykge1xuIFx0XHRcdGtobyA9IChzdHJ1Y3Qga2hvX2RhdGEgKikodW5zaWduZWQgbG9uZylwdHItXHUwMDNlZGF0YTtcbi1cdFx0XHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVx1MDAzZXNjcmF0Y2hfYWRkcjtcbi1cdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcbitcdFx0XHRraG9fYm9vdG1lbSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVx1MDAzZWJvb3RtZW1fYWRkcjtcbitcdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2Vib290bWVtX3NpemUgLyBzaXplb2YoKmtob19ib290bWVtKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuQEAgLTc5Myw3ICs3OTMsNyBAQCBzdGF0aWMgYm9vbCBwcm9jZXNzX2tob19lbnRyaWVzKHVuc2lnbmVkIGxvbmcgbWluaW11bSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9hcmVhczsgaSsrKSB7XG4tXHRcdHN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9IFx1MDAyNmtob19zY3JhdGNoW2ldO1xuK1x0XHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSBcdTAwMjZraG9fYm9vdG1lbVtpXTtcbiBcdFx0c3RydWN0IG1lbV92ZWN0b3IgcmVnaW9uID0ge1xuIFx0XHRcdC5zdGFydCA9IGFyZWEtXHUwMDNlYWRkcixcbiBcdFx0XHQuc2l6ZSA9IGFyZWEtXHUwMDNlc2l6ZSxcbkBAIC04MjIsNyArODIyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9yYW5kb21fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgbWluaW11bSxcbiBcdH1cbiBcbiBcdC8qXG4tXHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBzY3JhdGNoIGFyZWFzIHRoYXQgYXJlIGtub3duXG4rXHQgKiBEdXJpbmcga2V4ZWMgaGFuZG92ZXIgb25seSBwcm9jZXNzIEtITyBib290bWVtIGFyZWFzIHRoYXQgYXJlIGtub3duXG4gXHQgKiBub3QgdG8gY29udGFpbiBhbnkgZGF0YSB0aGF0IG11c3QgYmUgcHJlc2VydmVkLlxuIFx0ICovXG4gXHRpZiAoIXByb2Nlc3Nfa2hvX2VudHJpZXMobWluaW11bSwgaW1hZ2Vfc2l6ZSkgXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9zZXR1cF9kYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuaW5kZXggMjY3MWM0ZTFiM2EwYi4uNjEwOTBkYjUwNjVjNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vc2V0dXBfZGF0YS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL3NldHVwX2RhdGEuaFxuQEAgLTg1LDggKzg1LDggQEAgc3RydWN0IGltYV9zZXR1cF9kYXRhIHtcbiBzdHJ1Y3Qga2hvX2RhdGEge1xuIFx0X191NjQgZmR0X2FkZHI7XG4gXHRfX3U2NCBmZHRfc2l6ZTtcbi1cdF9fdTY0IHNjcmF0Y2hfYWRkcjtcbi1cdF9fdTY0IHNjcmF0Y2hfc2l6ZTtcbitcdF9fdTY0IGJvb3RtZW1fYWRkcjtcbitcdF9fdTY0IGJvb3RtZW1fc2l6ZTtcbiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpO1xuIFxuICNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmNcbmluZGV4IGViNzI1MzdiYzBiMTkuLjJhNmUxOWY5NTI1MTcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jXG5AQCAtMTM2Myw3ICsxMzYzLDcgQEAgX19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcbiBcdCAqIEFmdGVyIHJlYWwgbW9kZSB0cmFtcG9saW5lIGlzIGFsbG9jYXRlZCwgd2UgY2xlYXIgdGhhdCBzY3JhdGNoXG4gXHQgKiBtYXJraW5nLlxuIFx0ICovXG4tXHRtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcbitcdG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoMCwgU1pfMU0pO1xuIFxuIFx0LypcbiBcdCAqIDMyLWJpdCBzeXN0ZW1zIGFyZSBsaW1pdGVkIHRvIDRCRyBvZiBtZW1vcnkgZXZlbiB3aXRoIEhJR0hNRU0gYW5kXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jIGIvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jXG5pbmRleCA3ZTk4MGVhNDlkOGQ2Li4zYWE3NzAwNmFkYWIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmNcbkBAIC0yODUsMTQgKzI4NSwxNCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9raG8oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHN0cnVjdCBib290X3BhcmFtcyAqcGFyYW1zLFxuIFx0c2QtXHUwMDNlbGVuID0gc2l6ZW9mKHN0cnVjdCBraG9fZGF0YSk7XG4gXG4gXHQvKiBPbmx5IGFkZCBpZiB3ZSBoYXZlIGFsbCBLSE8gaW1hZ2VzIGluIHBsYWNlICovXG4tXHRpZiAoIWltYWdlLVx1MDAzZWtoby5mZHQgfHwgIWltYWdlLVx1MDAzZWtoby5zY3JhdGNoKVxuK1x0aWYgKCFpbWFnZS1cdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogQWRkIHNldHVwIGRhdGEgKi9cbiBcdGtoby1cdTAwM2VmZHRfYWRkciA9IGltYWdlLVx1MDAzZWtoby5mZHQ7XG4gXHRraG8tXHUwMDNlZmR0X3NpemUgPSBQQUdFX1NJWkU7XG4tXHRraG8tXHUwMDNlc2NyYXRjaF9hZGRyID0gaW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2gtXHUwMDNlbWVtO1xuLVx0a2hvLVx1MDAzZXNjcmF0Y2hfc2l6ZSA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZWJ1ZnN6O1xuK1x0a2hvLVx1MDAzZWJvb3RtZW1fYWRkciA9IGltYWdlLVx1MDAzZWtoby5ib290bWVtLVx1MDAzZW1lbTtcbitcdGtoby1cdTAwM2Vib290bWVtX3NpemUgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VidWZzejtcbiBcdHNkLVx1MDAzZW5leHQgPSBwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGE7XG4gXHRwYXJhbXMtXHUwMDNlaGRyLnNldHVwX2RhdGEgPSBwYXJhbXNfbG9hZF9hZGRyICsgc2V0dXBfZGF0YV9vZmZzZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDVlYmI1MjFlMTM2ZDcuLmQxNjE4YzRjZjdmYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRraG9fcG9wdWxhdGUoa2hvLVx1MDAzZWZkdF9hZGRyLCBraG8tXHUwMDNlZmR0X3NpemUsIGtoby1cdTAwM2VzY3JhdGNoX2FkZHIsIGtoby1cdTAwM2VzY3JhdGNoX3NpemUpO1xuK1x0a2hvX3BvcHVsYXRlKGtoby1cdTAwM2VmZHRfYWRkciwga2hvLVx1MDAzZWZkdF9zaXplLCBraG8tXHUwMDNlYm9vdG1lbV9hZGRyLCBraG8tXHUwMDNlYm9vdG1lbV9zaXplKTtcbiBcbiBcdGVhcmx5X21lbXVubWFwKGtobywgc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuYyBiL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuaW5kZXggNjk0ZDgwYTVjNjhlMS4uNjUxMTBiMmVlMWExZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3JlYWxtb2RlL2luaXQuY1xuKysrIGIvYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jXG5AQCAtNjYsNyArNjYsNyBAQCB2b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKVxuIFx0ICovXG4gXHRtZW1ibG9ja19yZXNlcnZlKDAsIFNaXzFNKTtcbiBcbi1cdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcbitcdG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2KDAsIFNaXzFNKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHNtZV9zZXZfc2V0dXBfcmVhbF9tb2RlKHN0cnVjdCB0cmFtcG9saW5lX2hlYWRlciAqdGgpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmNcbmluZGV4IDYxMDNiMWEwODJkMjQuLjlmMDliMGQyZGFhMGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jXG5AQCAtMTY1LDEwICsxNjUsMTAgQEAgc3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxuIFx0XHRwcl9pbmZvKFwiUHJvY2Vzc2luZyBFRkkgbWVtb3J5IG1hcDpcXG5cIik7XG4gXG4gXHQvKlxuLVx0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gc2NyYXRjaFxuK1x0ICogRGlzY2FyZCBtZW1ibG9ja3MgZGlzY292ZXJlZCBzbyBmYXIgZXhjZXB0IGZvciBLSE8gYm9vdG1lbVxuIFx0ICogcmVnaW9ucy4gTW9zdCBtZW1ibG9ja3MgYXQgdGhpcyBwb2ludCBvcmlnaW5hdGUgZnJvbSBtZW1vcnkgbm9kZXNcbiBcdCAqIGluIHRoZSBEVCBhbmQgVUVGSSB1c2VzIGl0cyBvd24gbWVtb3J5IG1hcCBpbnN0ZWFkLiBIb3dldmVyLCBpZlxuLVx0ICogS0hPIGlzIGVuYWJsZWQsIHNjcmF0Y2ggcmVnaW9ucywgd2hpY2ggYXJlIGdvb2Qga25vd24gbWVtb3J5XG4rXHQgKiBLSE8gaXMgZW5hYmxlZCwgYm9vdG1lbSByZWdpb25zLCB3aGljaCBhcmUgZ29vZCBrbm93biBtZW1vcnlcbiBcdCAqIG11c3QgYmUgcHJlc2VydmVkLlxuIFx0ICovXG4gXHRtZW1ibG9ja19kdW1wX2FsbCgpO1xuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9yZWdpb25zKHZvaWQpXG4gXG4gXHRcdC8qIFJlbW92ZSBhbGwgbm9uLUtITyByZWdpb25zICovXG4gXHRcdGZvcl9lYWNoX21lbV9yZWdpb24ocikge1xuLVx0XHRcdGlmICghbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gocikpIHtcbitcdFx0XHRpZiAoIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KHIpKSB7XG4gXHRcdFx0XHRtZW1ibG9ja19yZW1vdmUoci1cdTAwM2ViYXNlLCByLVx1MDAzZXNpemUpO1xuIFx0XHRcdFx0ci0tO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2tleGVjLmMgYi9kcml2ZXJzL29mL2tleGVjLmNcbmluZGV4IGI2ODM3ZTI5OWU3ZmUuLjE5NzBkMGJkYjY3MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL2tleGVjLmNcbisrKyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xuQEAgLTI2MSwyMyArMjYxLDIzIEBAIHN0YXRpYyBpbnQga2hvX2FkZF9jaG9zZW4oY29uc3Qgc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmZkdCwgaW50IGNob3Nlbl9ub2RlXG4gI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuIFx0cGh5c19hZGRyX3QgZmR0X21lbSA9IDA7XG4gXHRwaHlzX2FkZHJfdCBmZHRfbGVuID0gMDtcbi1cdHBoeXNfYWRkcl90IHNjcmF0Y2hfbWVtID0gMDtcbi1cdHBoeXNfYWRkcl90IHNjcmF0Y2hfbGVuID0gMDtcbitcdHBoeXNfYWRkcl90IGJvb3RtZW1fYXJyID0gMDtcbitcdHBoeXNfYWRkcl90IGJvb3RtZW1fbGVuID0gMDtcbiBcbiBcdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwibGludXgsa2hvLWZkdFwiKTtcbiBcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRkRUX0VSUl9OT1RGT1VORClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldCA9IGZkdF9kZWxwcm9wKGZkdCwgY2hvc2VuX25vZGUsIFwibGludXgsa2hvLXNjcmF0Y2hcIik7XG4rXHRyZXQgPSBmZHRfZGVscHJvcChmZHQsIGNob3Nlbl9ub2RlLCBcImxpbnV4LGtoby1ib290bWVtXCIpO1xuIFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1GRFRfRVJSX05PVEZPVU5EKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0aWYgKCFpbWFnZS1cdTAwM2VraG8uZmR0IHx8ICFpbWFnZS1cdTAwM2VraG8uc2NyYXRjaClcbitcdGlmICghaW1hZ2UtXHUwMDNla2hvLmZkdCB8fCAhaW1hZ2UtXHUwMDNla2hvLmJvb3RtZW0pXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0ZmR0X21lbSA9IGltYWdlLVx1MDAzZWtoby5mZHQ7XG4gXHRmZHRfbGVuID0gUEFHRV9TSVpFO1xuLVx0c2NyYXRjaF9tZW0gPSBpbWFnZS1cdTAwM2VraG8uc2NyYXRjaC1cdTAwM2VtZW07XG4tXHRzY3JhdGNoX2xlbiA9IGltYWdlLVx1MDAzZWtoby5zY3JhdGNoLVx1MDAzZWJ1ZnN6O1xuK1x0Ym9vdG1lbV9hcnIgPSBpbWFnZS1cdTAwM2VraG8uYm9vdG1lbS1cdTAwM2VtZW07XG4rXHRib290bWVtX2xlbiA9IGltYWdlLVx1MDAzZWtoby5ib290bWVtLVx1MDAzZWJ1ZnN6O1xuIFxuIFx0cHJfZGVidWcoXCJBZGRpbmcga2hvIG1ldGFkYXRhIHRvIERUXCIpO1xuIFxuQEAgLTI4NSw4ICsyODUsOCBAQCBzdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZVxuIFx0XHRcdFx0ICAgICAgIGZkdF9tZW0sIGZkdF9sZW4pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCBcImxpbnV4LGtoby1zY3JhdGNoXCIsXG4tXHRcdFx0XHQgICAgICAgc2NyYXRjaF9tZW0sIHNjcmF0Y2hfbGVuKTtcbitcdHJldCA9IGZkdF9hcHBlbmRwcm9wX2FkZHJyYW5nZShmZHQsIDAsIGNob3Nlbl9ub2RlLCBcImxpbnV4LGtoby1ib290bWVtXCIsXG4rXHRcdFx0XHQgICAgICAgYm9vdG1lbV9hcnIsIGJvb3RtZW1fbGVuKTtcbiBcbiAjZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxuaW5kZXggNTA4MzlmYjVlZThlZC4uY2Y3M2Q5YjM0YzNjOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oXG5AQCAtNCw3ICs0LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4tc3RydWN0IGtob19zY3JhdGNoIHtcbitzdHJ1Y3Qga2hvX2Jvb3RtZW0ge1xuIFx0cGh5c19hZGRyX3QgYWRkcjtcbiBcdHBoeXNfYWRkcl90IHNpemU7XG4gfTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbmluZGV4IDhhMjJiYzliOGM2YzguLjIwYTg3NGUxOWRmYTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjLmhcbisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWMuaFxuQEAgLTQxOCw3ICs0MTgsNyBAQCBzdHJ1Y3Qga2ltYWdlIHtcbiAjZW5kaWZcbiBcbiBcdHN0cnVjdCB7XG4tXHRcdHN0cnVjdCBrZXhlY19zZWdtZW50ICpzY3JhdGNoO1xuK1x0XHRzdHJ1Y3Qga2V4ZWNfc2VnbWVudCAqYm9vdG1lbTtcbiBcdFx0cGh5c19hZGRyX3QgZmR0O1xuIFx0fSBraG87XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA0NmRlODZkYzM0M2U5Li5lZjJiMTg4YzhlZDA5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbkBAIC0zNiwxNSArMzYsMTUgQEAgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuIHZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpO1xuIFxuLXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxuLVx0XHQgIHU2NCBzY3JhdGNoX2xlbik7XG4rdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLCBwaHlzX2FkZHJfdCBib290bWVtX3BoeXMsXG4rXHRcdCAgdTY0IGJvb3RtZW1fbGVuKTtcbiBcbi1ib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xuK2Jvb2wga2hvX2Jvb3RtZW1fb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XG4gXG4tc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuK3N0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fYm9vdG1lbV9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdFx0XHQgICAgICAgZW51bSBtaWdyYXRldHlwZSBtdClcbiB7XG4tXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKVxuK1x0aWYgKGtob19ib290bWVtX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSlcbiBcdFx0cmV0dXJuIE1JR1JBVEVfQ01BO1xuIFx0cmV0dXJuIG10O1xuIH1cbkBAIC0xMjMsMTYgKzEyMywxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4tXHRcdFx0XHRwaHlzX2FkZHJfdCBzY3JhdGNoX3BoeXMsIHU2NCBzY3JhdGNoX2xlbilcbitcdFx0XHRcdHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywgdTY0IGJvb3RtZW1fbGVuKVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4rc3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGVudW0gbWlncmF0ZXR5cGUga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUodW5zaWduZWQgbG9uZyBwZm4sXG4rc3RhdGljIGlubGluZSBlbnVtIG1pZ3JhdGV0eXBlIGtob19ib290bWVtX21pZ3JhdGV0eXBlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHRcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxuIHtcbiBcdHJldHVybiBtdDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjE4NmI5NjVjZmM4OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTQ2LDExICs0NiwxMSBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1heF9wb3NzaWJsZV9wZm47XG4gICogQE1FTUJMT0NLX1JTUlZfS0VSTjogbWVtb3J5IHJlZ2lvbiB0aGF0IGlzIHJlc2VydmVkIGZvciBrZXJuZWwgdXNlLFxuICAqIGVpdGhlciBleHBsaWN0aXRseSB3aXRoIG1lbWJsb2NrX3Jlc2VydmVfa2VybigpIG9yIHZpYSBtZW1ibG9ja1xuICAqIGFsbG9jYXRpb24gQVBJcy4gQWxsIG1lbWJsb2NrIGFsbG9jYXRpb25zIHNldCB0aGlzIGZsYWcuXG4tICogQE1FTUJMT0NLX0tIT19TQ1JBVENIOiBtZW1vcnkgcmVnaW9uIHRoYXQga2V4ZWMgY2FuIHBhc3MgdG8gdGhlIG5leHRcbi0gKiBrZXJuZWwgaW4gaGFuZG92ZXIgbW9kZS4gRHVyaW5nIGVhcmx5IGJvb3QsIHdlIGRvIG5vdCBrbm93IGFib3V0IGFsbFxuLSAqIG1lbW9yeSByZXNlcnZhdGlvbnMgeWV0LCBzbyB3ZSBnZXQgc2NyYXRjaCBtZW1vcnkgZnJvbSB0aGUgcHJldmlvdXNcbi0gKiBrZXJuZWwgdGhhdCB3ZSBrbm93IGlzIGdvb2QgdG8gdXNlLiBJdCBpcyB0aGUgb25seSBtZW1vcnkgdGhhdFxuLSAqIGFsbG9jYXRpb25zIG1heSBoYXBwZW4gZnJvbSBpbiB0aGlzIHBoYXNlLlxuKyAqIEBNRU1CTE9DS19LSE9fTk9QUlNSVjogbWVtb3J5IHJlZ2lvbiB3aXRoIG5vIHByZXNlcnZhdGlvbiBmcm9tIGtleGVjXG4rICogaGFuZG92ZXIuIER1cmluZyBlYXJseSBib290LCB3ZSBkbyBub3Qga25vdyBhYm91dCBhbGwgbWVtb3J5IHByZXNlcnZhdGlvbnNcbisgKiB5ZXQsIHNvIHdlIGdldCBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCB0aGF0IHdlXG4rICoga25vdyBpcyBnb29kIHRvIHVzZS4gSXQgaXMgdGhlIG9ubHkgbWVtb3J5IHRoYXQgYWxsb2NhdGlvbnMgbWF5IGhhcHBlbiBmcm9tXG4rICogaW4gdGhpcyBwaGFzZS5cbiAgKiBATUVNQkxPQ0tfUlNSVl9IVUdFVExCOiBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXNcbiAgKi9cbiBlbnVtIG1lbWJsb2NrX2ZsYWdzIHtcbkBAIC02MSw3ICs2MSw3IEBAIGVudW0gbWVtYmxvY2tfZmxhZ3Mge1xuIFx0TUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQgPSAweDgsXHQvKiBhbHdheXMgZGV0ZWN0ZWQgdmlhIGEgZHJpdmVyICovXG4gXHRNRU1CTE9DS19SU1JWX05PSU5JVFx0PSAweDEwLFx0LyogZG9uJ3QgaW5pdGlhbGl6ZSBzdHJ1Y3QgcGFnZXMgKi9cbiBcdE1FTUJMT0NLX1JTUlZfS0VSTlx0PSAweDIwLFx0LyogbWVtb3J5IHJlc2VydmVkIGZvciBrZXJuZWwgdXNlICovXG4tXHRNRU1CTE9DS19LSE9fU0NSQVRDSFx0PSAweDQwLFx0Lyogc2NyYXRjaCBtZW1vcnkgZm9yIGtleGVjIGhhbmRvdmVyICovXG4rXHRNRU1CTE9DS19LSE9fTk9QUlNSVlx0PSAweDQwLFx0LyogbWVtb3J5IHdpdGggbm8gS0hPIHByZXNlcnZhdGlvbnMgKi9cbiBcdE1FTUJMT0NLX1JTUlZfSFVHRVRMQlx0PSAweDgwLCAvKiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGh1Z2V0bGIgcGFnZXMgKi9cbiB9O1xuIFxuQEAgLTE1OCw4ICsxNTgsOCBAQCBpbnQgbWVtYmxvY2tfbWFya19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBpbnQgbWVtYmxvY2tfY2xlYXJfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gaW50IG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfbm9pbml0KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGludCBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4taW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4taW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuK2ludCBtZW1ibG9ja19tYXJrX2tob19ub3Byc3J2KHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuK2ludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBcbiB2b2lkIG1lbWJsb2NrX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKTtcbkBAIC0zMDEsOSArMzAxLDkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2RyaXZlcl9tYW5hZ2VkKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXG4gXHRyZXR1cm4gbS1cdTAwM2VmbGFncyBcdTAwMjYgTUVNQkxPQ0tfRFJJVkVSX01BTkFHRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fc2NyYXRjaChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fbm9wcnNydihzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuIHtcbi1cdHJldHVybiBtLVx1MDAzZWZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fU0NSQVRDSDtcbitcdHJldHVybiBtLVx1MDAzZWZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiB9XG4gXG4gaW50IG1lbWJsb2NrX3NlYXJjaF9wZm5fbmlkKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sXG5AQCAtNjE0LDEyICs2MTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X21lbXRlc3QocGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbXRlc3RfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKSB7IH1cbiAjZW5kaWZcbiBcbi0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXG4tdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKTtcbi12b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCk7XG4rI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuK3ZvaWQgbWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkodm9pZCk7XG4rdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydl9vbmx5KHZvaWQpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19zZXRfa2hvX25vcHJzZXZfb25seSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSh2b2lkKSB7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX01FTUJMT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnIGIva2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ1xuaW5kZXggYzEzYWYzOGJhMjNhYi4uZjUwZGFlZThlZmYwNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL0tjb25maWdcbkBAIC01LDcgKzUsNiBAQCBtZW51IFwiTGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCJcbiBjb25maWcgS0VYRUNfSEFORE9WRVJcbiBcdGJvb2wgXCJrZXhlYyBoYW5kb3ZlclwiXG4gXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVIgXHUwMDI2XHUwMDI2IEFSQ0hfU1VQUE9SVFNfS0VYRUNfRklMRVxuLVx0c2VsZWN0IE1FTUJMT0NLX0tIT19TQ1JBVENIXG4gXHRzZWxlY3QgS0VYRUNfRklMRVxuIFx0c2VsZWN0IExJQkZEVFxuIFx0c2VsZWN0IENNQVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCBmZTZmMmFjN2U0NTgzLi5kYThkNWVjYjkxNWI1IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTQxLDEyICs0MSwxMiBAQFxuIC8qXG4gICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cbiAgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3Ncbi0gKiBhdCB0aGUgbmVpZ2hib3JpbmcgcGFnZXMgKHVwIHRvIE1BWF9QQUdFX09SREVSKSB0byBtZXJnZSB0aGVtLlxuLSAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxuLSAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4rICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS4gSWYgS0hPIGJvb3RtZW1cbisgKiBpcyBub3QgYWxpZ25lZCB0byB0aGF0IHZhbHVlLCBidWRkeSBjYW4gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZ2VzLFxuKyAqIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxuICAqL1xuLSNkZWZpbmUgU0NSQVRDSF9BTElHTk1FTlRfQllURVMgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylcbi1zdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFx1MDAzZT0gQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuKyNkZWZpbmUgQk9PVE1FTV9BTElHTk1FTlRfQllURVMgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylcbitzdGF0aWNfYXNzZXJ0KEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTIFx1MDAzZT0gQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuIFxuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXG4gI2RlZmluZSBLSE9fUEFHRV9NQUdJQyAweDRiNDg0ZjUwVSAvKiBBU0NJSSBmb3IgJ0tIT1AnICovXG5AQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgc3RydWN0IGtob19vdXQga2hvX291dCA9IHtcbiBcbiBzdHJ1Y3Qga2hvX2luIHtcbiBcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xuLVx0cGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzO1xuK1x0cGh5c19hZGRyX3QgYm9vdG1lbV9waHlzO1xuIFx0Y2hhciBwcmV2aW91c19yZWxlYXNlW19fTkVXX1VUU19MRU4gKyAxXTtcbiBcdHUzMiBrZXhlY19jb3VudDtcbiBcdHN0cnVjdCBraG9fZGVidWdmcyBkYmc7XG5AQCAtNjU2LDM0ICs2NTYsMzQgQEAgc3RhdGljIHZvaWQgX19pbml0ICpraG9fZ2V0X21lbV9tYXAoY29uc3Qgdm9pZCAqZmR0KVxuIFxuIC8qXG4gICogV2l0aCBLSE8gZW5hYmxlZCwgbWVtb3J5IGNhbiBiZWNvbWUgZnJhZ21lbnRlZCBiZWNhdXNlIEtITyByZWdpb25zIG1heVxuLSAqIGJlIGFueXdoZXJlIGluIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFRoZSBzY3JhdGNoIHJlZ2lvbnMgZ2l2ZSB1cyBhXG4rICogYmUgYW55d2hlcmUgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gVGhlIGJvb3RtZW0gcmVnaW9ucyBnaXZlIHVzIGFcbiAgKiBzYWZlIHpvbmVzIHRoYXQgd2Ugd2lsbCBuZXZlciBzZWUgS0hPIGFsbG9jYXRpb25zIGZyb20uIFRoaXMgaXMgd2hlcmUgd2Vcbi0gKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIHNjcmF0Y2hcbisgKiBjYW4gbGF0ZXIgc2FmZWx5IGxvYWQgb3VyIG5ldyBrZXhlYyBpbWFnZXMgaW50byBhbmQgdGhlbiB1c2UgdGhlIGJvb3RtZW1cbiAgKiBhcmVhIGZvciBlYXJseSBhbGxvY2F0aW9ucyB0aGF0IGhhcHBlbiBiZWZvcmUgcGFnZSBhbGxvY2F0b3IgaXNcbiAgKiBpbml0aWFsaXplZC5cbiAgKi9cbi1zdHJ1Y3Qga2hvX3NjcmF0Y2ggKmtob19zY3JhdGNoO1xuLXVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XG4rc3RydWN0IGtob19ib290bWVtICpraG9fYm9vdG1lbTtcbit1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuIC8qXG4tICogVGhlIHNjcmF0Y2ggYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXG4rICogVGhlIGJvb3RtZW0gYXJlYXMgYXJlIHNjYWxlZCBieSBkZWZhdWx0IGFzIHBlcmNlbnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBmcm9tXG4gICogbWVtYmxvY2suIEEgdXNlciBjYW4gb3ZlcnJpZGUgdGhlIHNjYWxlIHdpdGggY29tbWFuZCBsaW5lIHBhcmFtZXRlcjpcbiAgKlxuLSAqIGtob19zY3JhdGNoPU4lXG4rICoga2hvX2Jvb3RtZW09TiVcbiAgKlxuICAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZXhwbGljaXRseSBkZWZpbmUgc2l6ZSBmb3IgYSBsb3dtZW0sIGEgZ2xvYmFsIGFuZFxuLSAqIHBlci1ub2RlIHNjcmF0Y2ggYXJlYXM6XG4rICogcGVyLW5vZGUgYm9vdG1lbSBhcmVhczpcbiAgKlxuLSAqIGtob19zY3JhdGNoPWxbS01HXSxuW0tNR10sbVtLTUddXG4rICoga2hvX2Jvb3RtZW09bFtLTUddLG5bS01HXSxtW0tNR11cbiAgKlxuICAqIFRoZSBleHBsaWNpdCBzaXplIGRlZmluaXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNjYWxlIGRlZmluaXRpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBzY3JhdGNoX3NjYWxlIF9faW5pdGRhdGEgPSAyMDA7XG4tc3RhdGljIHBoeXNfYWRkcl90IHNjcmF0Y2hfc2l6ZV9nbG9iYWwgX19pbml0ZGF0YTtcbi1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX3Blcm5vZGUgX19pbml0ZGF0YTtcbi1zdGF0aWMgcGh5c19hZGRyX3Qgc2NyYXRjaF9zaXplX2xvd21lbSBfX2luaXRkYXRhO1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgYm9vdG1lbV9zY2FsZSBfX2luaXRkYXRhID0gMjAwO1xuK3N0YXRpYyBwaHlzX2FkZHJfdCBib290bWVtX3NpemVfZ2xvYmFsIF9faW5pdGRhdGE7XG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9wZXJub2RlIF9faW5pdGRhdGE7XG4rc3RhdGljIHBoeXNfYWRkcl90IGJvb3RtZW1fc2l6ZV9sb3dtZW0gX19pbml0ZGF0YTtcbiBcbi1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXG4rc3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZShjaGFyICpwKVxuIHtcbiBcdHNpemVfdCBsZW47XG4gXHR1bnNpZ25lZCBsb25nIHNpemVzWzNdO1xuQEAgLTcwNyw5ICs3MDcsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdG1lbWNweShzX3NjYWxlLCBwLCBsZW4gLSAxKTtcbi1cdFx0cmV0ID0ga3N0cnRvdWludChzX3NjYWxlLCAxMCwgXHUwMDI2c2NyYXRjaF9zY2FsZSk7XG4rXHRcdHJldCA9IGtzdHJ0b3VpbnQoc19zY2FsZSwgMTAsIFx1MDAyNmJvb3RtZW1fc2NhbGUpO1xuIFx0XHRpZiAoIXJldClcbi1cdFx0XHRwcl9ub3RpY2UoXCJzY3JhdGNoIHNjYWxlIGlzICVkJSVcXG5cIiwgc2NyYXRjaF9zY2FsZSk7XG4rXHRcdFx0cHJfbm90aWNlKFwiYm9vdG1lbSBzY2FsZSBpcyAlZCUlXFxuXCIsIGJvb3RtZW1fc2NhbGUpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuQEAgLTczNyw4MSArNzM3LDgxIEBAIHN0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9zY3JhdGNoX3NpemUoY2hhciAqcClcbiBcdGlmICgqcClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzY3JhdGNoX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07XG4tXHRzY3JhdGNoX3NpemVfcGVybm9kZSA9IHNpemVzWzJdO1xuLVx0c2NyYXRjaF9zY2FsZSA9IDA7XG4rXHRib290bWVtX3NpemVfbG93bWVtID0gc2l6ZXNbMF07XG4rXHRib290bWVtX3NpemVfZ2xvYmFsID0gc2l6ZXNbMV07XG4rXHRib290bWVtX3NpemVfcGVybm9kZSA9IHNpemVzWzJdO1xuK1x0Ym9vdG1lbV9zY2FsZSA9IDA7XG4gXG4tXHRwcl9ub3RpY2UoXCJzY3JhdGNoIGFyZWFzOiBsb3dtZW06ICVsbHVNaUIgZ2xvYmFsOiAlbGx1TWlCIHBlcm5vZGU6ICVsbGRNaUJcXG5cIixcbi1cdFx0ICAodTY0KShzY3JhdGNoX3NpemVfbG93bWVtIFx1MDAzZVx1MDAzZSAyMCksXG4tXHRcdCAgKHU2NCkoc2NyYXRjaF9zaXplX2dsb2JhbCBcdTAwM2VcdTAwM2UgMjApLFxuLVx0XHQgICh1NjQpKHNjcmF0Y2hfc2l6ZV9wZXJub2RlIFx1MDAzZVx1MDAzZSAyMCkpO1xuK1x0cHJfbm90aWNlKFwiYm9vdG1lbSBhcmVhczogbG93bWVtOiAlbGx1TWlCIGdsb2JhbDogJWxsdU1pQiBwZXJub2RlOiAlbGxkTWlCXFxuXCIsXG4rXHRcdCAgKHU2NCkoYm9vdG1lbV9zaXplX2xvd21lbSBcdTAwM2VcdTAwM2UgMjApLFxuK1x0XHQgICh1NjQpKGJvb3RtZW1fc2l6ZV9nbG9iYWwgXHUwMDNlXHUwMDNlIDIwKSxcbitcdFx0ICAodTY0KShib290bWVtX3NpemVfcGVybm9kZSBcdTAwM2VcdTAwM2UgMjApKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbi1lYXJseV9wYXJhbShcImtob19zY3JhdGNoXCIsIGtob19wYXJzZV9zY3JhdGNoX3NpemUpO1xuK2Vhcmx5X3BhcmFtKFwia2hvX2Jvb3RtZW1cIiwga2hvX3BhcnNlX2Jvb3RtZW1fc2l6ZSk7XG4gXG4tc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcbitzdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9zaXplX3VwZGF0ZSh2b2lkKVxuIHtcbiBcdC8qXG4gXHQgKiBJZiBmaXhlZCBzaXplcyBhcmUgbm90IHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUsIGNhbGN1bGF0ZSB0aGVtIG5vdy5cbiBcdCAqIFJlbW92ZSBIdWdlVExCIGFsbG9jYXRpb25zIGZyb20gaXQgYmVjYXVzZSB0aGV5IG5ldmVyIGdldCBhbGxvY2F0ZWRcbi1cdCAqIGZyb20gc2NyYXRjaC5cbitcdCAqIGZyb20gYm9vdG1lbS5cbiBcdCAqL1xuLVx0aWYgKHNjcmF0Y2hfc2NhbGUpIHtcbitcdGlmIChib290bWVtX3NjYWxlKSB7XG4gXHRcdHBoeXNfYWRkcl90IHNpemU7XG4gXG4gXHRcdHNpemUgPSBtZW1ibG9ja19yZXNlcnZlZF9rZXJuX3NpemUoQVJDSF9MT1dfQUREUkVTU19MSU1JVCxcbiBcdFx0XHRcdFx0XHQgICBOVU1BX05PX05PREUpO1xuIFx0XHRzaXplIC09IG1lbWJsb2NrX3Jlc2VydmVkX2h1Z2V0bGJfc2l6ZShBUkNIX0xPV19BRERSRVNTX0xJTUlULFxuIFx0XHRcdFx0XHRcdCAgICAgICBOVU1BX05PX05PREUpO1xuLVx0XHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDA7XG4tXHRcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSBzaXplO1xuK1x0XHRzaXplID0gc2l6ZSAqIGJvb3RtZW1fc2NhbGUgLyAxMDA7XG4rXHRcdGJvb3RtZW1fc2l6ZV9sb3dtZW0gPSBzaXplO1xuIFxuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgIE5VTUFfTk9fTk9ERSk7XG4gXHRcdHNpemUgLT0gbWVtYmxvY2tfcmVzZXJ2ZWRfaHVnZXRsYl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgICAgICBOVU1BX05PX05PREUpO1xuLVx0XHRzaXplID0gc2l6ZSAqIHNjcmF0Y2hfc2NhbGUgLyAxMDAgLSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0XHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gc2l6ZTtcbitcdFx0c2l6ZSA9IHNpemUgKiBib290bWVtX3NjYWxlIC8gMTAwIC0gYm9vdG1lbV9zaXplX2xvd21lbTtcbitcdFx0Ym9vdG1lbV9zaXplX2dsb2JhbCA9IHNpemU7XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2NyYXRjaCBhcmVhcyBhcmUgcmVsZWFzZWQgYXMgTUlHUkFURV9DTUEuIFJvdW5kIHRoZW0gdXAgdG8gdGhlIHJpZ2h0XG4rXHQgKiBib290bWVtIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiBcdCAqIHNpemUuXG4gXHQgKi9cbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuK1x0Ym9vdG1lbV9zaXplX2xvd21lbSA9IHJvdW5kX3VwKGJvb3RtZW1fc2l6ZV9sb3dtZW0sIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbitcdGJvb3RtZW1fc2l6ZV9nbG9iYWwgPSByb3VuZF91cChib290bWVtX3NpemVfZ2xvYmFsLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyk7XG4gfVxuIFxuLXN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZClcbitzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGJvb3RtZW1fc2l6ZV9ub2RlKGludCBuaWQpXG4ge1xuIFx0cGh5c19hZGRyX3Qgc2l6ZTtcbiBcbi1cdGlmIChzY3JhdGNoX3NjYWxlKSB7XG4rXHRpZiAoYm9vdG1lbV9zY2FsZSkge1xuIFx0XHRzaXplID0gbWVtYmxvY2tfcmVzZXJ2ZWRfa2Vybl9zaXplKE1FTUJMT0NLX0FMTE9DX0FOWVdIRVJFLFxuIFx0XHRcdFx0XHRcdCAgIG5pZCk7XG4gXHRcdC8qIERvIG5vdCBjb3VudCBIdWdlVExCIHBhZ2VzLiAqL1xuIFx0XHRzaXplIC09IG1lbWJsb2NrX3Jlc2VydmVkX2h1Z2V0bGJfc2l6ZShNRU1CTE9DS19BTExPQ19BTllXSEVSRSxcbiBcdFx0XHRcdFx0XHQgICAgICAgbmlkKTtcbi1cdFx0c2l6ZSA9IHNpemUgKiBzY3JhdGNoX3NjYWxlIC8gMTAwO1xuK1x0XHRzaXplID0gc2l6ZSAqIGJvb3RtZW1fc2NhbGUgLyAxMDA7XG4gXHR9IGVsc2Uge1xuLVx0XHRzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7XG4rXHRcdHNpemUgPSBib290bWVtX3NpemVfcGVybm9kZTtcbiBcdH1cbiBcbi1cdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRyZXR1cm4gcm91bmRfdXAoc2l6ZSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMpO1xuIH1cbiBcbi1ib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4rYm9vbCBraG9fYm9vdG1lbV9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuIHtcbi1cdHBoeXNfYWRkcl90IHNjcmF0Y2hfc3RhcnQsIHNjcmF0Y2hfZW5kO1xuK1x0cGh5c19hZGRyX3QgYm9vdG1lbV9zdGFydCwgYm9vdG1lbV9lbmQ7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKSB7XG4tXHRcdHNjcmF0Y2hfc3RhcnQgPSBraG9fc2NyYXRjaFtpXS5hZGRyO1xuLVx0XHRzY3JhdGNoX2VuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgKyBraG9fc2NyYXRjaFtpXS5zaXplO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcbitcdFx0Ym9vdG1lbV9zdGFydCA9IGtob19ib290bWVtW2ldLmFkZHI7XG4rXHRcdGJvb3RtZW1fZW5kID0ga2hvX2Jvb3RtZW1baV0uYWRkciArIGtob19ib290bWVtW2ldLnNpemU7XG4gXG4tXHRcdGlmIChwaHlzIFx1MDAzYyBzY3JhdGNoX2VuZCBcdTAwMjZcdTAwMjYgKHBoeXMgKyBzaXplKSBcdTAwM2Ugc2NyYXRjaF9zdGFydClcbitcdFx0aWYgKHBoeXMgXHUwMDNjIGJvb3RtZW1fZW5kIFx1MDAyNlx1MDAyNiAocGh5cyArIHNpemUpIFx1MDAzZSBib290bWVtX3N0YXJ0KVxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTgxOSw3ICs4MTksNyBAQCBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4gfVxuIFxuIC8qKlxuLSAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXG4rICoga2hvX3Jlc2VydmVfYm9vdG1lbSAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcbiAgKlxuICAqIFdpdGggS0hPIHdlIGNhbiBwcmVzZXJ2ZSBhcmJpdHJhcnkgcGFnZXMgaW4gdGhlIHN5c3RlbS4gVG8gZW5zdXJlIHdlIHN0aWxsXG4gICogaGF2ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSB3aGVuIHdlIHNlYXJjaCB0aGUgcGh5c2ljYWwgYWRkcmVzc1xuQEAgLTgyNyw3ICs4MjcsNyBAQCBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4gICogYWN0aXZlLiBUaGlzIENNQSByZWdpb24gd2lsbCBvbmx5IGJlIHVzZWQgZm9yIG1vdmFibGUgcGFnZXMgd2hpY2ggYXJlIG5vdCBhXG4gICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9ib290bWVtKHZvaWQpXG4ge1xuIFx0cGh5c19hZGRyX3QgYWRkciwgc2l6ZTtcbiBcdGludCBuaWQsIGkgPSAwO1xuQEAgLTgzNSw3MyArODM1LDczIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXHRpZiAoIWtob19lbmFibGUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHNjcmF0Y2hfc2l6ZV91cGRhdGUoKTtcbitcdGJvb3RtZW1fc2l6ZV91cGRhdGUoKTtcbiBcbiBcdC8qIEZJWE1FOiBkZWFsIHdpdGggbm9kZSBob3QtcGx1Zy9yZW1vdmUgKi9cbi1cdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcbi1cdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcbi1cdGtob19zY3JhdGNoID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcbi1cdGlmICgha2hvX3NjcmF0Y2gpIHtcbi1cdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcblwiKTtcbitcdGtob19ib290bWVtX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcbitcdHNpemUgPSBraG9fYm9vdG1lbV9jbnQgKiBzaXplb2YoKmtob19ib290bWVtKTtcbitcdGtob19ib290bWVtID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcbitcdGlmICgha2hvX2Jvb3RtZW0pIHtcbitcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgYm9vdG1lbSBhcnJheVxcblwiKTtcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9raG87XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuK1x0ICogcmVzZXJ2ZSBib290bWVtIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIFx0ICogbmV4dCBrZXJuZWxcbiBcdCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbitcdHNpemUgPSBib290bWVtX3NpemVfbG93bWVtO1xuK1x0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQk9PVE1FTV9BTElHTk1FTlRfQllURVMsIDAsXG4gXHRcdFx0XHRcdCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTtcbiBcdGlmICghYWRkcikge1xuLVx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXG5cIik7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9kZXNjO1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gYm9vdG1lbVxcblwiKTtcbitcdFx0Z290byBlcnJfZnJlZV9ib290bWVtX2Rlc2M7XG4gXHR9XG4gXG4tXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbi1cdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xuK1x0a2hvX2Jvb3RtZW1baV0uYWRkciA9IGFkZHI7XG4rXHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcbiBcdGkrKztcbiBcbiBcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuLVx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRzaXplID0gYm9vdG1lbV9zaXplX2dsb2JhbDtcbitcdGFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIEJPT1RNRU1fQUxJR05NRU5UX0JZVEVTKTtcbiBcdGlmICghYWRkcikge1xuLVx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgc2NyYXRjaCBidWZmZXJcXG5cIik7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcbitcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIGJvb3RtZW1cXG5cIik7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcbiBcdH1cbiBcbi1cdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuLVx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4rXHRraG9fYm9vdG1lbVtpXS5hZGRyID0gYWRkcjtcbitcdGtob19ib290bWVtW2ldLnNpemUgPSBzaXplO1xuIFx0aSsrO1xuIFxuIFx0LypcbiBcdCAqIExvb3Agb3ZlciBub2RlcyB0aGF0IGhhdmUgYm90aCBtZW1vcnkgYW5kIGFyZSBvbmxpbmUuIFNraXBcbi1cdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbitcdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgYm9vdG1lbSBhcmVhcyB0aGVyZS5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuLVx0XHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLFxuK1x0XHRzaXplID0gYm9vdG1lbV9zaXplX25vZGUobmlkKTtcbitcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBCT09UTUVNX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuLVx0XHRcdHByX2VycihcIkZhaWxlZCB0byByZXNlcnZlIG5pZCAlZCBzY3JhdGNoIGJ1ZmZlclxcblwiLCBuaWQpO1xuLVx0XHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcbitcdFx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgYm9vdG1lbVxcblwiLCBuaWQpO1xuK1x0XHRcdGdvdG8gZXJyX2ZyZWVfYm9vdG1lbV9hcmVhcztcbiBcdFx0fVxuIFxuLVx0XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbi1cdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4rXHRcdGtob19ib290bWVtW2ldLmFkZHIgPSBhZGRyO1xuK1x0XHRraG9fYm9vdG1lbVtpXS5zaXplID0gc2l6ZTtcbiBcdFx0aSsrO1xuIFx0fVxuIFxuIFx0cmV0dXJuO1xuIFxuLWVycl9mcmVlX3NjcmF0Y2hfYXJlYXM6XG4rZXJyX2ZyZWVfYm9vdG1lbV9hcmVhczpcbiBcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxuLVx0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX3NjcmF0Y2hbaV0uYWRkciwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XG4tZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOlxuLVx0bWVtYmxvY2tfZnJlZShraG9fc2NyYXRjaCwga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCkpO1xuK1x0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX2Jvb3RtZW1baV0uYWRkciwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XG4rZXJyX2ZyZWVfYm9vdG1lbV9kZXNjOlxuK1x0bWVtYmxvY2tfZnJlZShraG9fYm9vdG1lbSwga2hvX2Jvb3RtZW1fY250ICogc2l6ZW9mKCpraG9fYm9vdG1lbSkpO1xuIGVycl9kaXNhYmxlX2tobzpcbi1cdHByX3dhcm4oXCJGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFyZWEsIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxcblwiKTtcbitcdHByX3dhcm4oXCJGYWlsZWQgdG8gcmVzZXJ2ZSBib290bWVtLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXG5cIik7XG4gXHRraG9fZW5hYmxlID0gZmFsc2U7XG4gfVxuIFxuQEAgLTkxMSwxMSArOTExLDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gICogb24gc21hbGxlciBzeXN0ZW1zLiBUaGUgYWxnb3JpdGhtIGl0c2VsZiBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHZhbHVlLFxuICAqIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIHRvIGEgZGlmZmVyZW50IGhldXJpc3RpYyBsYXRlciBpZiBuZWVkZWQuXG4gICovXG4tI2RlZmluZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRVx0XHRTWl8xR1xuLSNkZWZpbmUgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUXHRjb25zdF9pbG9nMihLSE9fU0NSQVRDSF9FWFRfQkxLU0laRSlcbisjZGVmaW5lIEtIT19ESVNDT1ZFUl9CTEtTSVpFXHRcdFNaXzFHXG4rI2RlZmluZSBLSE9fRElTQ09WRVJfQkxLU0hJRlRcdGNvbnN0X2lsb2cyKEtIT19ESVNDT1ZFUl9CTEtTSVpFKVxuIFxuIC8qIENhbGxlZCBmb3IgdGhlIEtITyBwcmVzZXJ2ZWQgbWVtb3J5IHJhZGl4IHRyZWUuICovXG4tc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX2xlYWYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4rc3RhdGljIGludCBfX2luaXQga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZih1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcbiBcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XG5AQCAtOTMwLDU0ICs5MzAsNTcgQEAgc3RhdGljIGludCBfX2luaXQga2hvX2V4dF93YWxrX2xlYWYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4gXHRlbmQgPSBzdGFydCArICgxVUwgXHUwMDNjXHUwMDNjIChvcmRlciArIFBBR0VfU0hJRlQpKTtcbiBcbiBcdHdoaWxlIChzdGFydCBcdTAwM2MgZW5kKSB7XG4tXHRcdGVyciA9IGtob19yYWRpeF9hZGRfa2V5KGJ1c3lfYmxvY2tzLCBzdGFydCBcdTAwM2VcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbitcdFx0ZXJyID0ga2hvX3JhZGl4X2FkZF9rZXkoYnVzeV9ibG9ja3MsIHN0YXJ0IFx1MDAzZVx1MDAzZSBLSE9fRElTQ09WRVJfQkxLU0hJRlQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdHN0YXJ0ICs9ICgxVUwgXHUwMDNjXHUwMDNjIEtIT19TQ1JBVENIX0VYVF9CTEtTSElGVCk7XG4rXHRcdHN0YXJ0ICs9ICgxVUwgXHUwMDNjXHUwMDNjIEtIT19ESVNDT1ZFUl9CTEtTSElGVCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gKi9cbi1zdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X3dhbGtfbm9kZShwaHlzX2FkZHJfdCBwaHlzLCB2b2lkICpkYXRhKVxuK3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl93YWxrX25vZGUocGh5c19hZGRyX3QgcGh5cywgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKmJ1c3lfYmxvY2tzID0gZGF0YTtcbiBcbi1cdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcdTAwM2VcdTAwM2UgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbitcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleShidXN5X2Jsb2NrcywgcGh5cyBcdTAwM2VcdTAwM2UgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiB9XG4gXG4gLyogQ2FsbGVkIGZvciB0aGUgYnVzeSBibG9jayByYWRpeCB0cmVlLiAqL1xuLXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuK3N0YXRpYyBpbnQgX19pbml0IGtob19kaXNjb3Zlcl9tYXJrX25vcHJzcnYodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXG4ge1xuIFx0cGh5c19hZGRyX3QgKnByZXZfZW5kID0gZGF0YTtcbi1cdHBoeXNfYWRkcl90IHN0YXJ0ID0ga2V5IFx1MDAzY1x1MDAzYyBLSE9fU0NSQVRDSF9FWFRfQkxLU0hJRlQ7XG4rXHRwaHlzX2FkZHJfdCBzdGFydCA9IGtleSBcdTAwM2NcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmIChzdGFydCBcdTAwM2UgKnByZXZfZW5kKSB7XG4tXHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7XG4rXHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYoKnByZXZfZW5kLCBzdGFydCAtICpwcmV2X2VuZCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdCpwcmV2X2VuZCA9IHN0YXJ0ICsgKDFVTCBcdTAwM2NcdTAwM2MgS0hPX1NDUkFUQ0hfRVhUX0JMS1NISUZUKTtcbitcdCpwcmV2X2VuZCA9IHN0YXJ0ICsgKDFVTCBcdTAwM2NcdTAwM2MgS0hPX0RJU0NPVkVSX0JMS1NISUZUKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuLSAqIGtob19leHRlbmRfc2NyYXRjaCAtIEV4dGVuZCB0aGUgc2NyYXRjaCByZWdpb25zXG4rICoga2hvX2Rpc2NvdmVyX25vcHJzcnYgLSBEaXNjb3ZlciBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zXG4rICpcbisgKiBEaXNjb3ZlcnMgbWVtb3J5IHJhbmdlcyB3aXRoIG5vIHByZXNlcnZlZCBtZW1vcnkgYW5kIG1hcmtzIGl0IGFzIE5PUFJTUlYuXG4rICogVGhpcyBsZXRzIG1lbWJsb2NrIGFsbG9jYXRlIG1lbW9yeSBmcm9tIGFyZWFzIG91dHNpZGUgS0hPIGJvb3RtZW0uXG4gICpcbiAgKiBUaGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZSBtaXhlcyBib3RoIHBoeXNpY2FsIGFkZHJlc3MgYW5kIG9yZGVyXG4gICogaW50byBhIHNpbmdsZSBrZXkuIFRoaXMgbWFrZXMgaXQgaGFyZCB0byBsb29rIGZvciBmcmVlIHJhbmdlcyBkaXJlY3RseS4gVGhpc1xuICAqIGZ1bmN0aW9uIGZpcnN0IHdhbGtzIHRoZSByYWRpeCB0cmVlIGFuZCBkaWdlc3RzIGl0IGRvd24gaW50byBhbm90aGVyIHJhZGl4XG4tICogdHJlZSwgd2hvc2Uga2V5cyBpZGVudGlmeSBibG9ja3Mgb2Ygc2l6ZSBLSE9fU0NSQVRDSF9FWFRfQkxLU0laRSB3aGljaFxuLSAqIGNvbnRhaW4gcHJlc2VydmVkIG1lbW9yeS5cbisgKiB0cmVlLCB3aG9zZSBrZXlzIGlkZW50aWZ5IGJsb2NrcyBvZiBzaXplIEtIT19ESVNDT1ZFUl9CTEtTSVpFIHdoaWNoIGNvbnRhaW5cbisgKiBwcmVzZXJ2ZWQgbWVtb3J5LlxuICAqXG4gICogVGhlbiBpdCB3YWxrcyB0aGUgZGlnZXN0ZWQgcmFkaXggdHJlZSBhbmQgbWFya3MgZXZlcnl0aGluZyB0aGF0IGRvZXNuJ3QgaGF2ZVxuLSAqIHByZXNlcnZlZCBtZW1vcnkgYXMgc2NyYXRjaC5cbisgKiBwcmVzZXJ2ZWQgbWVtb3J5IGFzIE5PUFJTUlYuXG4gICpcbi0gKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHNjcmF0Y2ggaGFzXG4rICogTk9URTogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBib290bWVtIGhhc1xuICAqIGF2YWlsYWJsZSBzcGFjZS5cbiAgKlxuICAqIE5PVEU6IFRoZSBwYWdlcyBvZiB0aGUgS0hPIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZSB0YWJsZXMgYXJlIG5vdCBtYXJrZWRcbkBAIC05ODYsMTggKzk4OSwxOCBAQCBzdGF0aWMgaW50IF9faW5pdCBraG9fZXh0X21hcmtfc2NyYXRjaCh1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqZGF0YSlcbiAgKiB0aGVtIHRvIGJlIFwicHJlc2VydmVkIG1lbW9yeVwiIGFuZCBtYXJrcyB0aGVpciBibG9ja3MgYXMgYnVzeS5cbiAgKlxuICAqIE5PVEU6IGVmaV9pbml0KCk6OnJlc2VydmVfcmVnaW9ucygpIHJlbW92ZXMgYWxsIHJlZ2lvbnMgZXhjZXB0XG4tICogTUVNQkxPQ0tfS0hPX1NDUkFUQ0guIFRoaXMgZnVuY3Rpb24gYWRkcyBzdWNoIHJlZ2lvbnMgYnV0IHRoZXkgYXJlIG5vdCBLSE9cbi0gKiBzY3JhdGNoIG1lbW9yeSwgc28gdGhleSBzaG91bGQgbm90IGJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyBiZVxuKyAqIE1FTUJMT0NLX0tIT19OT1BSU1JWLiBUaGlzIGZ1bmN0aW9uIGFkZHMgc3VjaCByZWdpb25zIGJ1dCB0aGV5IGFyZSBub3QgS0hPXG4rICogYm9vdCBtZW1vcnksIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmVcbiAgKiBjYWxsZWQgYWZ0ZXIgcmVzZXJ2ZV9yZWdpb25zKCkuXG4gICovXG4tc3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBraG9fZGlzY292ZXJfbm9wcnNydih2b2lkKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBraG9fY2IgPSB7XG4tXHRcdC5sZWFmID0ga2hvX2V4dF93YWxrX2xlYWYsXG4tXHRcdC5ub2RlID0ga2hvX2V4dF93YWxrX25vZGUsXG4rXHRcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX3dhbGtfbGVhZixcbitcdFx0Lm5vZGUgPSBraG9fZGlzY292ZXJfd2Fsa19ub2RlLFxuIFx0fTtcbiBcdGNvbnN0IHN0cnVjdCBraG9fcmFkaXhfd2Fsa19jYiBleHRfY2IgPSB7XG4tXHRcdC5sZWFmID0ga2hvX2V4dF9tYXJrX3NjcmF0Y2gsXG4rXHRcdC5sZWFmID0ga2hvX2Rpc2NvdmVyX21hcmtfbm9wcnNydixcbiBcdH07XG4gXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1c3lfcmFkaXhfY2xhc3M7XG4gXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgYnVzeV9ibG9ja3M7XG5AQCAtMTAyMiwyMSArMTAyNSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX2V4dGVuZF9zY3JhdGNoKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdC8qIFdhbGsgdGhlIGJ1c3kgYmxvY2tzIGFuZCBtYXJrIGV2ZXJ5dGhpbmcgYmV0d2VlbiBrZXlzIGFzIHNjcmF0Y2guICovXG4rXHQvKiBXYWxrIHRoZSBidXN5IGJsb2NrcyBhbmQgbWFyayBldmVyeXRoaW5nIGJldHdlZW4ga2V5cyBhcyBub3Byc3J2LiAqL1xuIFx0ZXJyID0ga2hvX3JhZGl4X3dhbGtfdHJlZShcdTAwMjZidXN5X2Jsb2NrcywgXHUwMDI2ZXh0X2NiLCBcdTAwMjZwcmV2X2VuZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIE1hcmsgZXZlcnl0aGluZyBmcm9tIGxhc3QgYnVzeSBibG9jayB0byBlbmQgb2YgRFJBTS4gKi9cbiBcdGlmIChwcmV2X2VuZCBcdTAwM2MgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSlcbi1cdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTtcbitcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihwcmV2X2VuZCwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIHByZXZfZW5kKTtcbiBcbiBcdC8qIGZhbGx0aHJvdWdoICovXG4gb3V0OlxuIFx0a2hvX3JhZGl4X2Rlc3Ryb3lfdHJlZShcdTAwMjZidXN5X2Jsb2Nrcyk7XG4gcHJpbnQ6XG4gXHRpZiAoZXJyKVxuLVx0XHRwcl9lcnIoXCJGYWlsZWQgdG8gZXh0ZW5kIHNjcmF0Y2g6ICVwZVxcblwiLCBFUlJfUFRSKGVycikpO1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gZGlzY292ZXIgZXh0cmEgYWxsb2NhdGFibGUgbWVtb3J5OiAlcGVcXG5cIiwgRVJSX1BUUihlcnIpKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE1MCw3ICsxMTUzLDcgQEAgaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Y29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4rXHQgICAgV0FSTl9PTihraG9fYm9vdG1lbV9vdmVybGFwKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHJldHVybiBraG9fcmFkaXhfYWRkX2tleSh0cmVlLCBraG9fZW5jb2RlX3JhZGl4X2tleShQRk5fUEhZUyhwZm4pLFxuQEAgLTEyMjgsNyArMTIzMSw3IEBAIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRykgXHUwMDI2XHUwMDI2XG4tXHQgICAgV0FSTl9PTihraG9fc2NyYXRjaF9vdmVybGFwKHN0YXJ0X3BmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbitcdCAgICBXQVJOX09OKGtob19ib290bWVtX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKSB7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE4MjUsNyArMTgyOCw3IEBAIHN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpXG4gXG4gXHRlcnIgPSBraG9fcmFkaXhfaW5pdF90cmVlKHRyZWUsIE5VTEwpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xuK1x0XHRnb3RvIGVycl9mcmVlX2Jvb3RtZW07XG4gXG4gXHRraG9fb3V0LmZkdCA9IGtob19hbGxvY19wcmVzZXJ2ZShQQUdFX1NJWkUpO1xuIFx0aWYgKElTX0VSUihraG9fb3V0LmZkdCkpIHtcbkBAIC0xODU0LDkgKzE4NTcsOSBAQCBzdGF0aWMgX19pbml0IGludCBraG9faW5pdCh2b2lkKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xuLVx0XHR1bnNpZ25lZCBsb25nIGJhc2VfcGZuID0gUEhZU19QRk4oa2hvX3NjcmF0Y2hbaV0uYWRkcik7XG4tXHRcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fc2NyYXRjaFtpXS5zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSsrKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYmFzZV9wZm4gPSBQSFlTX1BGTihraG9fYm9vdG1lbVtpXS5hZGRyKTtcbitcdFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IGtob19ib290bWVtW2ldLnNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuIFxuIFx0XHQvKlxuQEAgLTE4NjQsMTAgKzE4NjcsMTAgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcbiBcdFx0ICogY29ycmVzcG9uZGluZyBQUkVTRU5UIGJpdCBpbiB0aGUga2VybmVsIHBhZ2UgdGFibGUuXG4gXHRcdCAqIFN1YnNlcXVlbnQga21lbWxlYWsgc2NhbnMgb2YgdGhlc2UgcGFnZXMgY2F1c2UgdGhlXG4gXHRcdCAqIG5vbi1QUkVTRU5UIHBhZ2UgZmF1bHRzLlxuLVx0XHQgKiBNYXJrIHNjcmF0Y2ggYXJlYXMgd2l0aCBrbWVtbGVha19pZ25vcmVfcGh5cygpIHRvIGV4Y2x1ZGVcbitcdFx0ICogTWFyayBib290bWVtIGFyZWFzIHdpdGgga21lbWxlYWtfaWdub3JlX3BoeXMoKSB0byBleGNsdWRlXG4gXHRcdCAqIHRoZW0gZnJvbSBrbWVtbGVhayBzY2FubmluZy5cbiBcdFx0ICovXG4tXHRcdGttZW1sZWFrX2lnbm9yZV9waHlzKGtob19zY3JhdGNoW2ldLmFkZHIpO1xuK1x0XHRrbWVtbGVha19pZ25vcmVfcGh5cyhraG9fYm9vdG1lbVtpXS5hZGRyKTtcbiBcdFx0Zm9yIChwZm4gPSBiYXNlX3BmbjsgcGZuIFx1MDAzYyBiYXNlX3BmbiArIGNvdW50O1xuIFx0XHQgICAgIHBmbiArPSBwYWdlYmxvY2tfbnJfcGFnZXMpXG4gXHRcdFx0aW5pdF9jbWFfcmVzZXJ2ZWRfcGFnZWJsb2NrKHBmbl90b19wYWdlKHBmbikpO1xuQEAgLTE4ODMsMTEgKzE4ODYsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcbiBcdGtob191bnByZXNlcnZlX2ZyZWUoa2hvX291dC5mZHQpO1xuIGVycl9mcmVlX2tob19yYWRpeF90cmVlOlxuIFx0a2hvX3JhZGl4X2Rlc3Ryb3lfdHJlZSh0cmVlKTtcbi1lcnJfZnJlZV9zY3JhdGNoOlxuK2Vycl9mcmVlX2Jvb3RtZW06XG4gXHRraG9fb3V0LmZkdCA9IE5VTEw7XG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcbi1cdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xuLVx0XHR2b2lkICplbmQgPSBzdGFydCArIGtob19zY3JhdGNoW2ldLnNpemU7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspIHtcbitcdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19ib290bWVtW2ldLmFkZHIpO1xuK1x0XHR2b2lkICplbmQgPSBzdGFydCArIGtob19ib290bWVtW2ldLnNpemU7XG4gXG4gXHRcdGZyZWVfcmVzZXJ2ZWRfYXJlYShzdGFydCwgZW5kLCAtMSwgXCJcIik7XG4gXHR9XG5AQCAtMTkwNiw3ICsxOTA5LDcgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXG4gXG4gXHQvKlxuIFx0ICoga2hvX2dldF9tZW1fbWFwKCkgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLiBJZiBpdCBmYWlscywga2hvX3BvcHVsYXRlKClcbi1cdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uc2NyYXRjaF9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcbitcdCAqIGNhdGNoZXMgdGhhdCBhbmQgbmV2ZXIgc2V0cyBraG9faW4uYm9vdG1lbV9waHlzLCB3aGljaCBzdG9wcyBtZW1vcnlcbiBcdCAqIHJldHJpZXZhbC5cbiBcdCAqL1xuIFx0bWVtX21hcCA9IGtob19nZXRfbWVtX21hcChmZHQpO1xuQEAgLTE5MTQsNDEgKzE5MTcsNDAgQEAgdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0Lypcbi1cdCAqIGtob19zY3JhdGNoX292ZXJsYXAoKSBuZWVkcyBraG9fc2NyYXRjaCB0byBiZSBpbml0aWFsaXplZC4gSXRcbi1cdCAqIGlzIHVzZWQgYnkgZnJlZV9hcmVhX2luaXQoKSBvbiBLSE8gYm9vdHMsIHNvIGluaXRpYWxpemUgaXRcbi1cdCAqIGVhcmx5LlxuK1x0ICoga2hvX2Jvb3RtZW1fb3ZlcmxhcCgpIG5lZWRzIGtob19ib290bWVtIHRvIGJlIGluaXRpYWxpemVkLiBJdCBpcyB1c2VkXG4rXHQgKiBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdCBlYXJseS5cbiBcdCAqL1xuLVx0a2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7XG4rXHRraG9fYm9vdG1lbSA9IHBoeXNfdG9fdmlydChraG9faW4uYm9vdG1lbV9waHlzKTtcbiBcbiBcdGlmIChraG9fcmFkaXhfaW5pdF90cmVlKFx1MDAyNmtob19pbi5yYWRpeF90cmVlLCBtZW1fbWFwKSlcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRraG9fZXh0ZW5kX3NjcmF0Y2goKTtcbitcdGtob19kaXNjb3Zlcl9ub3Byc3J2KCk7XG4gXG4gXHRyZXR1cm47XG4gXG4gZXJyOlxuIFx0LypcbiBcdCAqIEZhaWxlZCB0byBpbml0aWFsaXplIHByZXNlcnZlZCBtZW1vcnkgcmFkaXggdHJlZS4gQ2xlYXIgRkRUXG4tXHQgKiBhbmQgc2NyYXRjaCBzbyBLSE8gdXNlcnMgZG9uJ3QgdHJlYXQgaXQgYXMgYSBLSE8gYm9vdC5cbitcdCAqIGFuZCBib290bWVtIHNvIEtITyB1c2VycyBkb24ndCB0cmVhdCBpdCBhcyBhIEtITyBib290LlxuIFx0ICovXG4gXHRraG9faW4uZmR0X3BoeXMgPSAwO1xuLVx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IDA7XG4rXHRraG9faW4uYm9vdG1lbV9waHlzID0gMDtcbiB9XG4gXG4gdm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXG4ge1xuLVx0aWYgKGtob19pbi5zY3JhdGNoX3BoeXMpXG4rXHRpZiAoa2hvX2luLmJvb3RtZW1fcGh5cylcbiBcdFx0a2hvX21lbV9yZXRyaWV2ZSgpO1xuIFx0ZWxzZVxuLVx0XHRraG9fcmVzZXJ2ZV9zY3JhdGNoKCk7XG4rXHRcdGtob19yZXNlcnZlX2Jvb3RtZW0oKTtcbiB9XG4gXG4gdm9pZCBfX2luaXQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcbi1cdFx0XHQgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLCB1NjQgc2NyYXRjaF9sZW4pXG4rXHRcdFx0IHBoeXNfYWRkcl90IGJvb3RtZW1fcGh5cywgdTY0IGJvb3RtZW1fbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG4tXHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xuK1x0dW5zaWduZWQgaW50IGJvb3RtZW1fY250ID0gYm9vdG1lbV9sZW4gLyBzaXplb2YoKmtob19ib290bWVtKTtcbitcdHN0cnVjdCBraG9fYm9vdG1lbSAqYm9vdG1lbSA9IE5VTEw7XG4gXHRwaHlzX2FkZHJfdCBtZW1fbWFwX3BoeXM7XG4gXHR2b2lkICpmZHQgPSBOVUxMO1xuIFx0Ym9vbCBwb3B1bGF0ZWQgPSBmYWxzZTtcbkBAIC0xOTc3LDUyICsxOTc5LDUyIEBAIHZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4gXHRpZiAoIW1lbV9tYXBfcGh5cylcbiBcdFx0Z290byB1bm1hcF9mZHQ7XG4gXG4tXHRzY3JhdGNoID0gZWFybHlfbWVtcmVtYXAoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4tXHRpZiAoIXNjcmF0Y2gpIHtcbi1cdFx0cHJfd2FybihcInNldHVwOiBmYWlsZWQgdG8gbWVtcmVtYXAgc2NyYXRjaCAocGh5cz0weCVsbHgsIGxlbj0lbGxkKVxcblwiLFxuLVx0XHRcdHNjcmF0Y2hfcGh5cywgc2NyYXRjaF9sZW4pO1xuK1x0Ym9vdG1lbSA9IGVhcmx5X21lbXJlbWFwKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuK1x0aWYgKCFib290bWVtKSB7XG4rXHRcdHByX3dhcm4oXCJzZXR1cDogZmFpbGVkIHRvIG1lbXJlbWFwIGJvb3RtZW0gKHBoeXM9MHglbGx4LCBsZW49JWxsZClcXG5cIixcbitcdFx0XHRib290bWVtX3BoeXMsIGJvb3RtZW1fbGVuKTtcbiBcdFx0Z290byB1bm1hcF9mZHQ7XG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogV2UgcGFzcyBhIHNhZmUgY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IHRvIHVzZSBmb3IgZWFybHkgYm9vdFxuLVx0ICogcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhbiByZXNpemUgdGhlXG4tXHQgKiBtZW1ibG9jayBhcnJheSBhcyBuZWVkZWQuXG4rXHQgKiBXZSBwYXNzIGEgc2FmZSBjb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgd2l0aCBubyBwcmVzZXJ2YXRpb25zIHRvXG4rXHQgKiB1c2UgZm9yIGVhcmx5IGJvb3QgcHVycG9yc2VzIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbCBzbyB0aGF0IHdlIGNhblxuK1x0ICogcmVzaXplIHRoZSBtZW1ibG9jayBhcnJheSBhcyBuZWVkZWQuXG4gXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY3JhdGNoX2NudDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBraG9fc2NyYXRjaCAqYXJlYSA9IFx1MDAyNnNjcmF0Y2hbaV07XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgYm9vdG1lbV9jbnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmFyZWEgPSBcdTAwMjZib290bWVtW2ldO1xuIFx0XHR1NjQgc2l6ZSA9IGFyZWEtXHUwMDNlc2l6ZTtcbiBcbiBcdFx0bWVtYmxvY2tfYWRkKGFyZWEtXHUwMDNlYWRkciwgc2l6ZSk7XG4tXHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS1cdTAwM2VhZGRyLCBzaXplKTtcbitcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fbm9wcnNydihhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xuIFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBtYXJrIHRoZSBzY3JhdGNoIHJlZ2lvbiAweCVwYSsweCVwYTogJXBlXCIsXG4rXHRcdFx0cHJfd2FybihcImZhaWxlZCB0byBtYXJrIHRoZSBib290bWVtIHJlZ2lvbiAweCVwYSsweCVwYTogJXBlXCIsXG4gXHRcdFx0XHRcdTAwMjZhcmVhLVx1MDAzZWFkZHIsIFx1MDAyNnNpemUsIEVSUl9QVFIoZXJyKSk7XG4tXHRcdFx0Z290byB1bm1hcF9zY3JhdGNoO1xuK1x0XHRcdGdvdG8gdW5tYXBfYm9vdG1lbTtcbiBcdFx0fVxuLVx0XHRwcl9kZWJ1ZyhcIk1hcmtlZCAweCVwYSsweCVwYSBhcyBzY3JhdGNoXCIsIFx1MDAyNmFyZWEtXHUwMDNlYWRkciwgXHUwMDI2c2l6ZSk7XG4rXHRcdHByX2RlYnVnKFwiTWFya2VkIDB4JXBhKzB4JXBhIGFzIGJvb3RtZW1cIiwgXHUwMDI2YXJlYS1cdTAwM2VhZGRyLCBcdTAwMjZzaXplKTtcbiBcdH1cbiBcbi1cdG1lbWJsb2NrX3Jlc2VydmUoc2NyYXRjaF9waHlzLCBzY3JhdGNoX2xlbik7XG4rXHRtZW1ibG9ja19yZXNlcnZlKGJvb3RtZW1fcGh5cywgYm9vdG1lbV9sZW4pO1xuIFxuIFx0Lypcbi1cdCAqIE5vdyB0aGF0IHdlIGhhdmUgYSB2aWFibGUgcmVnaW9uIG9mIHNjcmF0Y2ggbWVtb3J5LCBsZXQncyB0ZWxsXG4rXHQgKiBOb3cgdGhhdCB3ZSBoYXZlIGEgdmlhYmxlIHJlZ2lvbiBvZiBib290IG1lbW9yeSwgbGV0J3MgdGVsbFxuIFx0ICogdGhlIG1lbWJsb2NrcyBhbGxvY2F0b3IgdG8gb25seSB1c2UgdGhhdCBmb3IgYW55IGFsbG9jYXRpb25zLlxuIFx0ICogVGhhdCB3YXkgd2UgZW5zdXJlIHRoYXQgbm90aGluZyBzY3JpYmJsZXMgb3ZlciBpbiB1c2UgZGF0YSB3aGlsZVxuIFx0ICogd2UgaW5pdGlhbGl6ZSB0aGUgcGFnZSB0YWJsZXMgd2hpY2ggd2Ugd2lsbCBuZWVkIHRvIGluZ2VzdCBhbGxcbiBcdCAqIG1lbW9yeSByZXNlcnZhdGlvbnMgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsLlxuIFx0ICovXG4tXHRtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSgpO1xuK1x0bWVtYmxvY2tfc2V0X2tob19ub3Byc3J2X29ubHkoKTtcbiBcbiBcdGtob19pbi5mZHRfcGh5cyA9IGZkdF9waHlzO1xuLVx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5cztcbi1cdGtob19zY3JhdGNoX2NudCA9IHNjcmF0Y2hfY250O1xuK1x0a2hvX2luLmJvb3RtZW1fcGh5cyA9IGJvb3RtZW1fcGh5cztcbitcdGtob19ib290bWVtX2NudCA9IGJvb3RtZW1fY250O1xuIFxuIFx0cG9wdWxhdGVkID0gdHJ1ZTtcbiBcdHByX2luZm8oXCJmb3VuZCBrZXhlYyBoYW5kb3ZlciBkYXRhLlxcblwiKTtcbiBcbi11bm1hcF9zY3JhdGNoOlxuLVx0ZWFybHlfbWVtdW5tYXAoc2NyYXRjaCwgc2NyYXRjaF9sZW4pO1xuK3VubWFwX2Jvb3RtZW06XG4rXHRlYXJseV9tZW11bm1hcChib290bWVtLCBib290bWVtX2xlbik7XG4gdW5tYXBfZmR0OlxuIFx0ZWFybHlfbWVtdW5tYXAoZmR0LCBmZHRfbGVuKTtcbiByZXBvcnQ6XG5AQCAtMjAzNCw0NyArMjAzNiw0NyBAQCB2b2lkIF9faW5pdCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxuIFxuIGludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4ge1xuLVx0c3NpemVfdCBzY3JhdGNoX3NpemU7XG4rXHRzc2l6ZV90IGJvb3RtZW1fc2l6ZTtcbiBcdGludCBlcnIgPSAwO1xuLVx0c3RydWN0IGtleGVjX2J1ZiBzY3JhdGNoO1xuK1x0c3RydWN0IGtleGVjX2J1ZiBib290bWVtO1xuIFxuIFx0aWYgKCFraG9fZW5hYmxlIHx8IGltYWdlLVx1MDAzZXR5cGUgPT0gS0VYRUNfVFlQRV9DUkFTSClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpbWFnZS1cdTAwM2VraG8uZmR0ID0gdmlydF90b19waHlzKGtob19vdXQuZmR0KTtcbiBcbi1cdHNjcmF0Y2hfc2l6ZSA9IHNpemVvZigqa2hvX3NjcmF0Y2gpICoga2hvX3NjcmF0Y2hfY250O1xuLVx0c2NyYXRjaCA9IChzdHJ1Y3Qga2V4ZWNfYnVmKXtcbitcdGJvb3RtZW1fc2l6ZSA9IHNpemVvZigqa2hvX2Jvb3RtZW0pICoga2hvX2Jvb3RtZW1fY250O1xuK1x0Ym9vdG1lbSA9IChzdHJ1Y3Qga2V4ZWNfYnVmKXtcbiBcdFx0LmltYWdlID0gaW1hZ2UsXG4tXHRcdC5idWZmZXIgPSBraG9fc2NyYXRjaCxcbi1cdFx0LmJ1ZnN6ID0gc2NyYXRjaF9zaXplLFxuK1x0XHQuYnVmZmVyID0ga2hvX2Jvb3RtZW0sXG4rXHRcdC5idWZzeiA9IGJvb3RtZW1fc2l6ZSxcbiBcdFx0Lm1lbSA9IEtFWEVDX0JVRl9NRU1fVU5LTk9XTixcbi1cdFx0Lm1lbXN6ID0gc2NyYXRjaF9zaXplLFxuK1x0XHQubWVtc3ogPSBib290bWVtX3NpemUsXG4gXHRcdC5idWZfYWxpZ24gPSBTWl82NEssIC8qIE1ha2VzIGl0IGVhc2llciB0byBtYXAgKi9cbiBcdFx0LmJ1Zl9tYXggPSBVTE9OR19NQVgsXG4gXHRcdC50b3BfZG93biA9IHRydWUsXG4gXHR9O1xuLVx0ZXJyID0ga2V4ZWNfYWRkX2J1ZmZlcihcdTAwMjZzY3JhdGNoKTtcbitcdGVyciA9IGtleGVjX2FkZF9idWZmZXIoXHUwMDI2Ym9vdG1lbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0aW1hZ2UtXHUwMDNla2hvLnNjcmF0Y2ggPSBcdTAwMjZpbWFnZS1cdTAwM2VzZWdtZW50W2ltYWdlLVx1MDAzZW5yX3NlZ21lbnRzIC0gMV07XG4rXHRpbWFnZS1cdTAwM2VraG8uYm9vdG1lbSA9IFx1MDAyNmltYWdlLVx1MDAzZXNlZ21lbnRbaW1hZ2UtXHUwMDNlbnJfc2VnbWVudHMgLSAxXTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtob193YWxrX3NjcmF0Y2goc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbitzdGF0aWMgaW50IGtob193YWxrX2Jvb3RtZW0oc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdFx0XHQgICAgaW50ICgqZnVuYykoc3RydWN0IHJlc291cmNlICosIHZvaWQgKikpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBraG9fYm9vdG1lbV9jbnQ7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xuLVx0XHRcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXG4tXHRcdFx0LmVuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgKyBraG9fc2NyYXRjaFtpXS5zaXplIC0gMSxcbitcdFx0XHQuc3RhcnQgPSBraG9fYm9vdG1lbVtpXS5hZGRyLFxuK1x0XHRcdC5lbmQgPSBraG9fYm9vdG1lbVtpXS5hZGRyICsga2hvX2Jvb3RtZW1baV0uc2l6ZSAtIDEsXG4gXHRcdH07XG4gXG4tXHRcdC8qIFRyeSB0byBmaXQgdGhlIGtpbWFnZSBpbnRvIG91ciBLSE8gc2NyYXRjaCByZWdpb24gKi9cbitcdFx0LyogVHJ5IHRvIGZpdCB0aGUga2ltYWdlIGludG8gb3VyIEtITyBib290bWVtIHJlZ2lvbiAqL1xuIFx0XHRyZXQgPSBmdW5jKFx1MDAyNnJlcywga2J1Zik7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMjA5MSw3ICsyMDkzLDcgQEAgaW50IGtob19sb2NhdGVfbWVtX2hvbGUoc3RydWN0IGtleGVjX2J1ZiAqa2J1ZixcbiBcdGlmICgha2hvX2VuYWJsZSB8fCBrYnVmLVx1MDAzZWltYWdlLVx1MDAzZXR5cGUgPT0gS0VYRUNfVFlQRV9DUkFTSClcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRyZXQgPSBraG9fd2Fsa19zY3JhdGNoKGtidWYsIGZ1bmMpO1xuK1x0cmV0ID0ga2hvX3dhbGtfYm9vdG1lbShrYnVmLCBmdW5jKTtcbiBcbiBcdHJldHVybiByZXQgPT0gMSA/IDAgOiAtRUFERFJOT1RBVkFJTDtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXG5pbmRleCAyNTdlZThhNTJiZTY2Li43ZDc0NDc3ZGEwYjc5IDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmNcbkBAIC03NywyMyArNzcsMjMgQEAgdm9pZCBraG9fZGVidWdmc19ibG9iX3JlbW92ZShzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZywgdm9pZCAqYmxvYilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBzY3JhdGNoX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4rc3RhdGljIGludCBib290bWVtX3BoeXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKVxuLVx0XHRzZXFfcHJpbnRmKG0sIFwiMHglbGx4XFxuXCIsIGtob19zY3JhdGNoW2ldLmFkZHIpO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19ib290bWVtX2NudDsgaSsrKVxuK1x0XHRzZXFfcHJpbnRmKG0sIFwiMHglbGx4XFxuXCIsIGtob19ib290bWVtW2ldLmFkZHIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuLURFRklORV9TSE9XX0FUVFJJQlVURShzY3JhdGNoX3BoeXMpO1xuK0RFRklORV9TSE9XX0FUVFJJQlVURShib290bWVtX3BoeXMpO1xuIFxuLXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4rc3RhdGljIGludCBib290bWVtX2xlbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXG4tXHRcdHNlcV9wcmludGYobSwgXCIweCVsbHhcXG5cIiwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mga2hvX2Jvb3RtZW1fY250OyBpKyspXG4rXHRcdHNlcV9wcmludGYobSwgXCIweCVsbHhcXG5cIiwga2hvX2Jvb3RtZW1baV0uc2l6ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4tREVGSU5FX1NIT1dfQVRUUklCVVRFKHNjcmF0Y2hfbGVuKTtcbitERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9vdG1lbV9sZW4pO1xuIFxuIF9faW5pdCB2b2lkIGtob19pbl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGtob19kZWJ1Z2ZzICpkYmcsIGNvbnN0IHZvaWQgKmZkdClcbiB7XG5AQCAtMTg2LDEzICsxODYsMTMgQEAgX19pbml0IGludCBraG9fb3V0X2RlYnVnZnNfaW5pdChzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZylcbiBcdGlmIChJU19FUlIoc3ViX2ZkdF9kaXIpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbi1cdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2NyYXRjaF9waHlzXCIsIDA0MDAsIGRpciwgTlVMTCxcbi1cdFx0XHRcdFx1MDAyNnNjcmF0Y2hfcGh5c19mb3BzKTtcbitcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiYm9vdG1lbV9waHlzXCIsIDA0MDAsIGRpciwgTlVMTCxcbitcdFx0XHRcdFx1MDAyNmJvb3RtZW1fcGh5c19mb3BzKTtcbiBcdGlmIChJU19FUlIoZikpXG4gXHRcdGdvdG8gZXJyX3JtZGlyO1xuIFxuLVx0ZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzY3JhdGNoX2xlblwiLCAwNDAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0XHRcdTAwMjZzY3JhdGNoX2xlbl9mb3BzKTtcbitcdGYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiYm9vdG1lbV9sZW5cIiwgMDQwMCwgZGlyLCBOVUxMLFxuK1x0XHRcdFx0XHUwMDI2Ym9vdG1lbV9sZW5fZm9wcyk7XG4gXHRpZiAoSVNfRVJSKGYpKVxuIFx0XHRnb3RvIGVycl9ybWRpcjtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFxuaW5kZXggODA1ZDJhNzZjMzg4MS4uZTk2ODVlMWVmNmQ3OCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcbkBAIC0xOSw4ICsxOSw4IEBAIHN0cnVjdCBraG9fZGVidWdmcyB7XG4gc3RydWN0IGtob19kZWJ1Z2ZzIHt9O1xuICNlbmRpZlxuIFxuLWV4dGVybiBzdHJ1Y3Qga2hvX3NjcmF0Y2ggKmtob19zY3JhdGNoO1xuLWV4dGVybiB1bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xuK2V4dGVybiBzdHJ1Y3Qga2hvX2Jvb3RtZW0gKmtob19ib290bWVtO1xuK2V4dGVybiB1bnNpZ25lZCBpbnQga2hvX2Jvb3RtZW1fY250O1xuIFxuICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xuIGludCBraG9fZGVidWdmc19pbml0KHZvaWQpO1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Li41NDE1ZTBiMzhiNWQ1IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTQ4NSwxMCArNDg1LDYgQEAgY29uZmlnIEhBVkVfR1VQX0ZBU1RcbiBcdGRlcGVuZHMgb24gTU1VXG4gXHRib29sXG4gXG4tIyBFbmFibGUgbWVtYmxvY2sgc3VwcG9ydCBmb3Igc2NyYXRjaCBtZW1vcnkgd2hpY2ggaXMgbmVlZGVkIGZvciBrZXhlYyBoYW5kb3ZlclxuLWNvbmZpZyBNRU1CTE9DS19LSE9fU0NSQVRDSFxuLVx0Ym9vbFxuLVxuICMgRG9uJ3QgZGlzY2FyZCBhbGxvY2F0ZWQgbWVtb3J5IHVzZWQgdG8gdHJhY2sgXCJtZW1vcnlcIiBhbmQgXCJyZXNlcnZlZFwiIG1lbWJsb2Nrc1xuICMgYWZ0ZXIgZWFybHkgYm9vdCwgc28gaXQgY2FuIHN0aWxsIGJlIHVzZWQgdG8gdGVzdCBmb3IgdmFsaWRpdHkgb2YgbWVtb3J5LlxuICMgQWxzbywgbWVtYmxvY2tzIGFyZSB1cGRhdGVkIHdpdGggbWVtb3J5IGhvdCh1bilwbHVnLlxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCAzN2UwNmU3MGMxZDAwLi4wMzUxOTEzY2U3OWIwIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTExMiwxMSArMTEyLDExIEBAIHVuc2lnbmVkIGxvbmcgbWluX2xvd19wZm47XG4gdW5zaWduZWQgbG9uZyBtYXhfcGZuO1xuIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuO1xuIFxuLSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbi0vKiBXaGVuIHNldCB0byB0cnVlLCBvbmx5IGFsbG9jYXRlIGZyb20gTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggcmFuZ2VzICovXG4tc3RhdGljIGJvb2wga2hvX3NjcmF0Y2hfb25seTtcbisjaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG4rLyogV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSBhbGxvY2F0ZSBmcm9tIE1FTUJMT0NLX0tIT19OT1BSU1JWIHJhbmdlcyAqL1xuK3N0YXRpYyBib29sIGtob19ub3Byc3J2X29ubHk7XG4gI2Vsc2Vcbi0jZGVmaW5lIGtob19zY3JhdGNoX29ubHkgZmFsc2VcbisjZGVmaW5lIGtob19ub3Byc3J2X29ubHkgZmFsc2VcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiBtZW1ibG9ja19tZW1vcnlfaW5pdF9yZWdpb25zW0lOSVRfTUVNQkxPQ0tfTUVNT1JZX1JFR0lPTlNdIF9faW5pdGRhdGFfbWVtYmxvY2s7XG5AQCAtMTc4LDkgKzE3OCw5IEBAIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZClcbiBcbiBzdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXG4ge1xuLVx0Lyogc2tpcCBub24tc2NyYXRjaCBtZW1vcnkgZm9yIGtobyBlYXJseSBib290IGFsbG9jYXRpb25zICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb25seSlcbi1cdFx0cmV0dXJuIE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuK1x0Lyogb25seSB1c2UgS0hPX05PUFJTUlYgbWVtb3J5IGZvciBraG8gZWFybHkgYm9vdCBhbGxvY2F0aW9ucyAqL1xuK1x0aWYgKGtob19ub3Byc3J2X29ubHkpXG4rXHRcdHJldHVybiBNRU1CTE9DS19LSE9fTk9QUlNSVjtcbiBcbiBcdHJldHVybiBzeXN0ZW1faGFzX3NvbWVfbWlycm9yID8gTUVNQkxPQ0tfTUlSUk9SIDogTUVNQkxPQ0tfTk9ORTtcbiB9XG5AQCAtMTE3NCwzMyArMTE3NCwzMyBAQCBpbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaVxuIH1cbiBcbiAvKipcbi0gKiBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoIC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX1NDUkFUQ0guXG4rICogbWVtYmxvY2tfbWFya19raG9fbm9wcnNydiAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19OT1BSU1JWLlxuICAqIEBiYXNlOiB0aGUgYmFzZSBwaHlzIGFkZHIgb2YgdGhlIHJlZ2lvblxuICAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uXG4gICpcbi0gKiBPbmx5IG1lbW9yeSByZWdpb25zIG1hcmtlZCB3aXRoICVNRU1CTE9DS19LSE9fU0NSQVRDSCB3aWxsIGJlIGNvbnNpZGVyZWRcbisgKiBPbmx5IG1lbW9yeSByZWdpb25zIG1hcmtlZCB3aXRoICVNRU1CTE9DS19LSE9fTk9QUlNSViB3aWxsIGJlIGNvbnNpZGVyZWRcbiAgKiBmb3IgYWxsb2NhdGlvbnMgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBrZXhlYyBoYW5kb3Zlci5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbitfX2luaXQgaW50IG1lbWJsb2NrX21hcmtfa2hvX25vcHJzcnYocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gbWVtYmxvY2tfc2V0Y2xyX2ZsYWcoXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplLCAxLFxuLVx0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19TQ1JBVENIKTtcbitcdFx0XHRcdCAgICBNRU1CTE9DS19LSE9fTk9QUlNSVik7XG4gfVxuIFxuIC8qKlxuLSAqIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoIC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX1NDUkFUQ0ggZmxhZyBmb3IgYVxuKyAqIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2IC0gQ2xlYXIgTUVNQkxPQ0tfS0hPX05PUFJTUlYgZmxhZyBmb3IgYVxuICAqIHNwZWNpZmllZCByZWdpb24uXG4gICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4gICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZWdpb25cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1fX2luaXQgaW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4rX19pbml0IGludCBtZW1ibG9ja19jbGVhcl9raG9fbm9wcnNydihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbiBcdHJldHVybiBtZW1ibG9ja19zZXRjbHJfZmxhZyhcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUsIDAsXG4tXHRcdFx0XHQgICAgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpO1xuK1x0XHRcdFx0ICAgIE1FTUJMT0NLX0tIT19OT1BSU1JWKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgc2hvdWxkX3NraXBfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuQEAgLTEyMzYsOSArMTIzNiw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcbiBcdC8qXG4gXHQgKiBJbiBlYXJseSBhbGxvYyBkdXJpbmcga2V4ZWMgaGFuZG92ZXIsIHdlIGNhbiBvbmx5IGNvbnNpZGVyXG4tXHQgKiBNRU1CTE9DS19LSE9fU0NSQVRDSCByZWdpb25zIGZvciB0aGUgYWxsb2NhdGlvbnNcbitcdCAqIE1FTUJMT0NLX0tIT19OT1BSU1JWIHJlZ2lvbnMgZm9yIHRoZSBhbGxvY2F0aW9uc1xuIFx0ICovXG4tXHRpZiAoKGZsYWdzIFx1MDAyNiBNRU1CTE9DS19LSE9fU0NSQVRDSCkgXHUwMDI2XHUwMDI2ICFtZW1ibG9ja19pc19raG9fc2NyYXRjaChtKSlcbitcdGlmICgoZmxhZ3MgXHUwMDI2IE1FTUJMT0NLX0tIT19OT1BSU1JWKSBcdTAwMjZcdTAwMjYgIW1lbWJsb2NrX2lzX2tob19ub3Byc3J2KG0pKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0xNzkzLDcgKzE3OTMsNyBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4gXHRpZiAobnVtYV92YWxpZF9ub2RlKG5pZCkgXHUwMDI2XHUwMDI2ICFleGFjdF9uaWQpIHtcbiBcdFx0bmlkID0gTlVNQV9OT19OT0RFO1xuIFx0XHQvKlxuLVx0XHQgKiBJZiBhIHByZXZpb3VzIGNhbmRpZGF0ZSBvdmVybGFwcGVkIHdpdGggS0hPIHNjcmF0Y2gsIGl0IHdvdWxkXG4rXHRcdCAqIElmIGEgcHJldmlvdXMgY2FuZGlkYXRlIG92ZXJsYXBwZWQgd2l0aCBLSE8gYm9vdG1lbSwgaXQgd291bGRcbiBcdFx0ICogdXBkYXRlIHN0YXJ0IG9yIGVuZC4gTm93IHRoYXQgdGhlIHNlYXJjaCBpcyBvcGVuaW5nIHRvIGFsbFxuIFx0XHQgKiBub2RlcywgcmVzZXQgdGhlbS5cbiBcdFx0ICovXG5AQCAtMTgwOSwxMiArMTgwOSwxMiBAQCB2b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4gZm91bmQ6XG4gXHQvKlxuIFx0ICogSHVnZVRMQiBwYWdlcyBjYW4gYmUgcHJlc2VydmVkIHdpdGggS0hPIGFuZCBubyBwcmVzZXJ2ZWQgbWVtb3J5IGNhblxuLVx0ICogYmUgaW4gc2NyYXRjaC4gU28gcmV0cnkgaWYgZm91bmQgYWRkcmVzcyBvdmVybGFwcyB3aXRoIHNjcmF0Y2guXG4rXHQgKiBiZSBpbiBib290bWVtLiBTbyByZXRyeSBpZiBmb3VuZCBhZGRyZXNzIG92ZXJsYXBzIHdpdGggYm9vdG1lbS5cbiBcdCAqXG4tXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSBub3JtYWxseSBub3QgdmVyeSBsYXJnZSwgc28gdGhpcyBzaG91bGRuJ3QgdGFrZSB0b29cbitcdCAqIEJvb3RtZW0gYXJlYXMgYXJlIG5vcm1hbGx5IG5vdCB2ZXJ5IGxhcmdlLCBzbyB0aGlzIHNob3VsZG4ndCB0YWtlIHRvb1xuIFx0ICogbWFueSByZXRyaWVzLlxuIFx0ICovXG4tXHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChhZGRyLCBzaXplKSkge1xuK1x0aWYgKGtob19ib290bWVtX292ZXJsYXAoYWRkciwgc2l6ZSkpIHtcbiBcdFx0aWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKVxuIFx0XHRcdHN0YXJ0ID0gYWRkciArIHNpemU7XG4gXHRcdGVsc2VcbkBAIC0yNDk5LDcgKzI0OTksNyBAQCB2b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX2FsbCh2b2lkKVxuIFx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG4gXHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xuIFxuLVx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xuK1x0bWVtYmxvY2tfY2xlYXJfa2hvX25vcHJzcnZfb25seSgpO1xuIFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xuIFx0dG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTtcbiB9XG5AQCAtMjU5NywxNSArMjU5NywxNSBAQCBpbnQgcmVzZXJ2ZV9tZW1fcmVsZWFzZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSFxuLV9faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXG4rI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuK19faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fbm9wcnNydl9vbmx5KHZvaWQpXG4ge1xuLVx0a2hvX3NjcmF0Y2hfb25seSA9IHRydWU7XG4rXHRraG9fbm9wcnNydl9vbmx5ID0gdHJ1ZTtcbiB9XG4gXG4tX19pbml0IHZvaWQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSh2b2lkKVxuK19faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19ub3Byc3J2X29ubHkodm9pZClcbiB7XG4tXHRraG9fc2NyYXRjaF9vbmx5ID0gZmFsc2U7XG4rXHRraG9fbm9wcnNydl9vbmx5ID0gZmFsc2U7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTI4NjEsNyArMjg2MSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVfbWVtKGNoYXIgKnApXG4gXHRpZiAocmVzZXJ2ZV9tZW1fa2hvX3Jldml2ZShuYW1lLCBzaXplLCBhbGlnbikpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0LyogVE9ETzogQWxsb2NhdGlvbiBtdXN0IGJlIG91dHNpZGUgb2Ygc2NyYXRjaCByZWdpb24gKi9cbitcdC8qIFRPRE86IEFsbG9jYXRpb24gbXVzdCBiZSBvdXRzaWRlIG9mIEtIT19OT1BSU1JWIHJlZ2lvbiAqL1xuIFx0c3RhcnQgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIGFsaWduKTtcbiBcdGlmICghc3RhcnQpIHtcbiBcdFx0cHJfZXJyKFwicmVzZXJ2ZV9tZW06IG1lbWJsb2NrIGFsbG9jYXRpb24gZmFpbGVkXFxuXCIpO1xuQEAgLTI4ODYsNyArMjg4Niw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcbiBcdFtpbG9nMihNRU1CTE9DS19EUklWRVJfTUFOQUdFRCldID0gXCJEUlZfTU5HXCIsXG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFwiUlNWX05JVFwiLFxuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gXCJSU1ZfS0VSTlwiLFxuLVx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcIktIT19TQ1JBVENIXCIsXG4rXHRbaWxvZzIoTUVNQkxPQ0tfS0hPX05PUFJTUlYpXSA9IFwiS0hPX05PUFJTUlZcIixcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA3OGQ2Mzc4OWE5NjkwLi5kMDMxNTZiZTBlMTA0IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC02ODEsNyArNjgxLDcgQEAgc3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBwZm4gKyBucl9wYWdlcztcbiBcbiBcdGZvciAocGZuID0gcGFnZWJsb2NrX2FsaWduKHBmbik7IHBmbiBcdTAwM2MgZW5kOyBwZm4gKz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG4tXHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fc2NyYXRjaF9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcbitcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19ib290bWVtX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuIFxuIFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuIFx0XHRpZiAoIWF0b21pYyBcdTAwMjZcdTAwMjYgSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbkBAIC03NjQsNyArNzY0LDcgQEAgc3RhdGljIHZvaWQgX19tZW1pbml0IF9faW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFxuIFx0aWYgKHBhZ2VibG9ja19hbGlnbmVkKHBmbikpIHtcbiBcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9XG4tXHRcdFx0a2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xuK1x0XHRcdGtob19ib290bWVtX21pZ3JhdGV0eXBlKHBmbiwgTUlHUkFURV9NT1ZBQkxFKTtcbiBcdFx0aW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGZuX3RvX3BhZ2UocGZuKSwgbXQsIGZhbHNlKTtcbiBcdH1cbiB9XG5AQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgX19tZW1pbml0IG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lXG4gXHRcdCAqIG92ZXIgdGhlIHBsYWNlIGR1cmluZyBzeXN0ZW0gYm9vdC5cbiBcdFx0ICovXG4gXHRcdGlmIChwYWdlYmxvY2tfYWxpZ25lZChwZm4pKSB7XG4tXHRcdFx0ZW51bSBtaWdyYXRldHlwZSBtdCA9IGtob19zY3JhdGNoX21pZ3JhdGV0eXBlKHBmbiwgbWlncmF0ZXR5cGUpO1xuK1x0XHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fYm9vdG1lbV9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcbiBcbiBcdFx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLCBtdCwgaXNvbGF0ZV9wYWdlYmxvY2spO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaCBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaFxuaW5kZXggZTg2YmI5MDAwYjIyZi4uNDZjNWExNTZmY2U0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFxuICNkZWZpbmUgX19TZXRQYWdlUmVzZXJ2ZWQocClcdCgodm9pZCkocCkpXG4gXG4tc3RhdGljIGlubGluZSBib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4rc3RhdGljIGlubGluZSBib29sIGtob19ib290bWVtX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ5OjE5LjYzMjI1OTE3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2Mjg3OTUyNzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktITyBTY3JhdGNoIHRvIEJvb3RtZW0vTk9QUlNWOiBBIFJlbmFtZSBhbmQgUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBlc3NlbnRpYWxseSByZW5hbWluZyB0aGUgXCJraG9fc2NyYXRjaFwiIGNvbmNlcHQgdG8gXCJraG9fYm9vdG1lbVwiIG9yIFwia2hvX25vcHJzcnZcIiB3aXRoaW4gdGhlIEtleGVjIEhhbmRvdmVyIChLSE8pIGZlYXR1cmUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBzdHJhaWdodGZvcndhcmQgcmVuYW1lLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNvdWxkIGJlIGx1cmtpbmcuXG5cbkZpcnN0IHBhc3M6IHRoaXMgc2VlbXMgbGlrZSBhIGNvbXBsZXRlIHN3ZWVwIG9mIHJlbmFtaW5nIHZhcmlhYmxlcywgc3RydWN0IG1lbWJlcnMsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbWVtYmxvY2sgZmxhZ3MsIGFuZCBjb21tYW5kLWxpbmUgcGFyYW1ldGVycy4gV2UgaGF2ZSBjaGFuZ2VzIGFjcm9zcyBkb2N1bWVudGF0aW9uLCB4ODYgc2V0dXAsIEVGSSBpbml0aWFsaXphdGlvbiwgT0Yga2V4ZWMsIEtITyBjb3JlIGxvZ2ljLCBtZW1ibG9jaywgYW5kIG1tX2luaXQuYy4gVGhlIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgYGtob19zY3JhdGNoPWAgYmVjb21lcyBga2hvX2Jvb3RtZW09YCwgYHN0cnVjdCBraG9fc2NyYXRjaGAgYmVjb21lcyBgc3RydWN0IGtob19ib290bWVtYCwgYE1FTUJMT0NLX0tIT19TQ1JBVENIYCBpcyBub3cgYE1FTUJMT0NLX0tIT19OT1BSU1JWYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBraG9fZXh0ZW5kX3NjcmF0Y2hgIGFyZSBub3cgYGtob19kaXNjb3Zlcl9ub3Byc3J2YCwgYW5kIHNvIG9uLiBFdmVuIGRlYnVnZnMgZW50cmllcyBhcmUgcmVuYW1lZCwgYHNjcmF0Y2hfcGh5c2AgdG8gYGJvb3RtZW1fcGh5c2AsIHlvdSBnZXQgdGhlIGlkZWEuIEFsc28gdGhlIGRldmljZSB0cmVlIHByb3BlcnRpZXMgXCJsaW51eCxraG8tc2NyYXRjaFwiIHRvIFwibGludXgsa2hvLWJvb3RtZW1cIi4gQWxsIHRoZSB1c3VhbCBzdXNwZWN0cy5cblxuT2theSwgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQncyBhbGwgYSByZW5hbWUgc28gZmFyLiBObyBsb2dpYyBpcyBhbHRlcmVkLCBqdXN0IG5hbWUgY2hhbmdlcy4gVGhlIG9ubHkgdGhpbmcgcmVtb3RlbHkgaW50ZXJlc3RpbmcgaXMgdGhhdCB0aGUgYE1FTUJMT0NLX0tIT19TQ1JBVENIYCBjb25maWcgb3B0aW9uIHNlZW1zIHRvIGJlIGdvbmUuIEJ1dCwgaXQncyByZXBsYWNlZCBieSBgQ09ORklHX0tFWEVDX0hBTkRPVkVSYCwgc28sIHRoaXMgaXMgbW9yZSBvZiBhIHNpbXBsaWZpY2F0aW9uIHRoYW4gYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTGV0J3MgZHJpbGwgZG93biBpbnRvIGEgZmV3IG9mIHRoZSBhZmZlY3RlZCBmaWxlcyB0byBjb25maXJtOiBJbiBga2hvX2V4dGVuZF9zY3JhdGNoYCAobm93IGBraG9fZGlzY292ZXJfbm9wcnNydmApIHRoZSBpbnRlcm5hbCBjb25zdGFudHMgcmVtYWluIHVuY2hhbmdlZCwganVzdCBhIHJlbmFtZS4gR29pbmcgdGhyb3VnaCBgYXJjaC94ODYva2VybmVsL2U4MjAuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmktaW5pdC5jYCwgYGRyaXZlcnMvb2Yva2V4ZWMuY2AsIGFuZCBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AsIGl0J3MganVzdCBhIHJlbmFtZSwgYSBjb25zaXN0ZW50IHBhdHRlcm4uIEkgd2FzIGEgYml0IHdvcnJpZWQgd2hlbiBJIHNhdyB0aGF0IHRoZSBvbGQgZnVuY3Rpb24gbmFtZXMgd2VyZSBwcmVzZW50LlxuXG5ObyBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGJlIGZ1enplZCBoZXJlISBJJ20gcHJldHR5IHN1cmUgd2UncmUgZ29vZC4gSXQncyBhIHB1cmUgcmVuYW1lL3JlZmFjdG9yaW5nIHBhdGNoLiBUaGUgZXhlY3V0aW9uIGZsb3cgcmVtYWlucyBpZGVudGljYWwsIGFuZCB0aGVyZSdzIG5vIG5ldyBsb2dpYy4gVGhlcmUgYXJlIG5vIHNpZGUtZWZmZWN0cyBJIGNhbiBpZGVudGlmeSBhdCBhbGwuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSdtIGRvaW5nIGEgZmluYWwgc3dlZXAsIGJ1dCwgaXQncyBqdXN0IG1vcmUgcmVuYW1lcy4gTm90aGluZyBvZiBpbnRlcmVzdCBoZXJlLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBzYWZlLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgaXMganVzdCBhIHJlZmFjdG9yaW5nLiBJJ2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTczLCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0OTozNS45MjAyMTk1MDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIHRoZSAnc2NyYXRjaCcgbWVtb3J5IGNvbmNlcHQgaW4gdGhlIEtleGVjIEhhbmRPdmVyIChLSE8pIGZlYXR1cmUgdG8gJ2Jvb3RtZW0nIGFuZCAnbm9wcnNydicuIEl0IHJlbmFtZXMgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMsIGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGRlYnVnZnMgZmlsZXMsIHN0cnVjdCBuYW1lcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBhIEtjb25maWcgb3B0aW9uLCBidXQgZG9lcyBub3QgYWx0ZXIgYW55IGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgdGhlICdzY3JhdGNoJyBtZW1vcnkgY29uY2VwdCBpbiB0aGUgS2V4ZWMgSGFuZE92ZXIgKEtITykgZmVhdHVyZSB0byAnYm9vdG1lbScgYW5kICdub3Byc3J2Jy4gSXQgcmVuYW1lcyBjb21tYW5kLWxpbmUgcGFyYW1ldGVycywgZGV2aWNlIHRyZWUgcHJvcGVydGllcywgZGVidWdmcyBmaWxlcywgc3RydWN0IG5hbWVzLCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgYW5kIGEgS2NvbmZpZyBvcHRpb24sIGJ1dCBkb2VzIG5vdCBhbHRlciBhbnkgZXhlY3V0aW9uIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDk6MzUuOTIwMzk0Mjc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow64cdv[1] Phase: Running StartedAt: 2026-08-11 16:49:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64cdv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-11 16:49:47 +0000 UTC FinishedAt: 2026-08-11 16:49:51 +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,}