Name: series-workflowrsgfr Phase: Failed StartedAt: 2026-08-26 18:37:23 +0000 UTC FinishedAt: 2026-08-26 19:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsgfr[0] Phase: Succeeded StartedAt: 2026-08-26 18:37:23 +0000 UTC FinishedAt: 2026-08-26 19:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsgfr[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 18:37:23 +0000 UTC FinishedAt: 2026-08-26 19:22:02 +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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBzZWxmdGVzdHMgaW4gdGhlIHRvb2xzLyBkaXJlY3RvcnkuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlN2UzOTI4NTdiY2NiZjU3MjZmZmQ0OTc0Y2E5MDY2YTI2YmY0MTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MjE6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG5pbmRleCA5ZDE2MGI1YjljMGVlLi41Mjk3OGYwZTA0NTM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbkBAIC0yMTgsNiAmIzQzOzIxOCwxMSBAQCBlbnVtIGxpYmJwZl90cmlzdGF0ZSB7XG4gI2RlZmluZSBfX2FyZ191bnRydXN0ZWQgX19hdHRyaWJ1dGUoKGJ0Zl9kZWNsX3RhZyhcJiMzNDthcmc6dW50cnVzdGVkXCYjMzQ7KSkpXG4gI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFwmIzM0O2FyZzphcmVuYVwmIzM0OykpKVxuIFxuJiM0MzsvKiBNYXJrIGEgQlBGIHByb2dyYW0gdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGluc3RlYWQgb2YgYXV0b2xvYWRlZCxcbiYjNDM7ICogZXF1aXZhbGVudCB0byBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShwcm9nLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fbG9hZF9keW5hbWljIF9fYXR0cmlidXRlX18oKGJ0Zl9kZWNsX3RhZyhcJiMzNDtsb2FkdHlwZTpkeW5hbWljXCYjMzQ7KSkpXG4mIzQzO1xuICNpZm5kZWYgX19fYnBmX2NvbmNhdFxuICNkZWZpbmUgX19fYnBmX2NvbmNhdChhLCBiKSBhICMjIGJcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYjc0OWMwMTc0MmVlMC4uNWQ1OGRiZjI1MjM0ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIHN0cnVjdCBicGZfcHJvZ3JhbSB7XG4gXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuIFxuIFx0aW50IGZkO1xuLVx0Ym9vbCBhdXRvbG9hZDtcbiYjNDM7XHRlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBsb2FkX3R5cGU7XG4gXHRib29sIGF1dG9hdHRhY2g7XG4gXHRib29sIHN5bV9nbG9iYWw7XG4gXHRib29sIG1hcmtfYnRmX3N0YXRpYztcbkBAIC03MjUsNiAmIzQzOzcyNSw3IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcbiBcdGJvb2wgaGFzX3N1YmNhbGxzO1xuIFx0Ym9vbCBoYXNfcm9kYXRhO1xuJiM0MztcdGJvb2wgaGFzX2R5bmxvYWRfcHJvZ3M7XG4gXG4gXHRzdHJ1Y3QgYnBmX2dlbiAqZ2VuX2xvYWRlcjtcbiBcbkBAIC04NzIsMTEgJiM0Mzs4NzMsMTEgQEAgYnBmX29iamVjdF9faW5pdF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdCAqIGF1dG9sb2FkIHNldCB0byBmYWxzZS5cbiBcdCAqL1xuIFx0aWYgKHNlY19uYW1lWzBdID09ICYjMzk7PyYjMzk7KSB7XG4tXHRcdHByb2ctXHUwMDNlYXV0b2xvYWQgPSBmYWxzZTtcbiYjNDM7XHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFx0XHQvKiBmcm9tIG5vdyBvbiBmb3JnZXQgdGhlcmUgd2FzID8gaW4gc2VjdGlvbiBuYW1lICovXG4gXHRcdHNlY19uYW1lJiM0MzsmIzQzOztcbiBcdH0gZWxzZSB7XG4tXHRcdHByb2ctXHUwMDNlYXV0b2xvYWQgPSB0cnVlO1xuJiM0MztcdFx0cHJvZy1cdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTztcbiBcdH1cbiBcbiBcdHByb2ctXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XG5AQCAtMTEyNSw5ICYjNDM7MTEyNiwxMCBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9zdF9vcHNfcHJvZ3JhbShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIH1cbiBcbiAvKiBGb3IgZWFjaCBzdHJ1Y3Rfb3BzIHByb2dyYW0gUCwgcmVmZXJlbmNlZCBmcm9tIHNvbWUgc3RydWN0X29wcyBtYXAgTSxcbi0gKiBlbmFibGUgUC5hdXRvbG9hZCBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLFxuLSAqIGRpc2FibGUgUC5hdXRvbG9hZCBpZiBmb3IgYWxsIE1zIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS5cbi0gKiBEb24mIzM5O3QgY2hhbmdlIFAuYXV0b2xvYWQgZm9yIHByb2dyYW1zIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGZyb20gYW55IG1hcHMuXG4mIzQzOyAqIHNldCBQJiMzOTtzIGxvYWQgdHlwZSB0byBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoXG4mIzQzOyAqIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLCBvciB0byBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQgaWYgZm9yIGFsbCBNc1xuJiM0MzsgKiBNLmF1dG9jcmVhdGUgaXMgZmFsc2UuXG4mIzQzOyAqIERvbiYjMzk7dCBjaGFuZ2UgUCYjMzk7cyBsb2FkIHR5cGUgZm9yIHByb2dyYW1zIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGZyb20gYW55IG1hcHMuXG4gICovXG4gc3RhdGljIGludCBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuQEAgLTExNjMsNyAmIzQzOzExNjUsOCBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKHVzZV9jbnQpXG4tXHRcdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IHNob3VsZF9sb2FkO1xuJiM0MztcdFx0XHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IHNob3VsZF9sb2FkID8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE9cbiYjNDM7XHRcdFx0XHQ6IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTEyNDIsMTMgJiM0MzsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcbiBcdFx0XHRpZiAoc3Rfb3BzLVx1MDAzZXByb2dzW2ldKSB7XG4gXHRcdFx0XHQvKiBJZiB3ZSBoYWQgZGVjbGFyYXRpdmVseSBzZXQgc3RydWN0X29wcyBjYWxsYmFjaywgd2UgbmVlZCB0b1xuLVx0XHRcdFx0ICogZm9yY2UgaXRzIGF1dG9sb2FkIHRvIGZhbHNlLCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGhhdmVcbi1cdFx0XHRcdCAqIGEgY2hhbmNlIG9mIHN1Y2NlZWRpbmcgZnJvbSBQT1Ygb2YgdGhlIGN1cnJlbnQgc3RydWN0X29wcyBtYXAuXG4tXHRcdFx0XHQgKiBJZiB0aGlzIHByb2dyYW0gaXMgc3RpbGwgcmVmZXJlbmNlZCBzb21ld2hlcmUgZWxzZSwgdGhvdWdoLFxuLVx0XHRcdFx0ICogdGhlbiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXG4tXHRcdFx0XHQgKiBhdXRvbG9hZCBhY2NvcmRpbmdseS5cbiYjNDM7XHRcdFx0XHQgKiBmb3JjZSBpdHMgbG9hZCB0eXBlIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCwgYmVjYXVzZVxuJiM0MztcdFx0XHRcdCAqIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGVcbiYjNDM7XHRcdFx0XHQgKiBjdXJyZW50IHN0cnVjdF9vcHMgbWFwLiBJZiB0aGlzIHByb2dyYW0gaXMgc3RpbGwgcmVmZXJlbmNlZFxuJiM0MztcdFx0XHRcdCAqIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsIHRoZW5cbiYjNDM7XHRcdFx0XHQgKiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXG4mIzQzO1x0XHRcdFx0ICogbG9hZCB0eXBlIGFjY29yZGluZ2x5LlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlYXV0b2xvYWQgPSBmYWxzZTtcbiYjNDM7XHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMTI4Nyw3ICYjNDM7MTI5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0XHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoc3Rfb3BzLVx1MDAzZXByb2dzW2ldIFx1MDAyNlx1MDAyNiBzdF9vcHMtXHUwMDNlcHJvZ3NbaV0gIT0gcHJvZylcbi1cdFx0XHRcdHN0X29wcy1cdTAwM2Vwcm9nc1tpXS1cdTAwM2VhdXRvbG9hZCA9IGZhbHNlO1xuJiM0MztcdFx0XHRcdHN0X29wcy1cdTAwM2Vwcm9nc1tpXS1cdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XG4gXG4gXHRcdFx0LyogVXBkYXRlIHRoZSB2YWx1ZSBmcm9tIHRoZSBzaGFkb3cgdHlwZSAqL1xuIFx0XHRcdHN0X29wcy1cdTAwM2Vwcm9nc1tpXSA9IHByb2c7XG5AQCAtMzYwMCw3ICYjNDM7MzYwNCw3IEBAIHN0YXRpYyBib29sIG9ial9uZWVkc192bWxpbnV4X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0fVxuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfcHJvZ3JhbShwcm9nLCBvYmopIHtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHByb2dfbmVlZHNfdm1saW51eF9idGYocHJvZykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtNjE5NCw3ICYjNDM7NjE5OCw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcdFx0XHQvKiBubyBuZWVkIHRvIGFwcGx5IENPLVJFIHJlbG9jYXRpb24gaWYgdGhlIHByb2dyYW0gaXNcbiBcdFx0XHQgKiBub3QgZ29pbmcgdG8gYmUgbG9hZGVkXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuJiM0MztcdFx0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0LyogYWRqdXN0IGluc25faWR4IGZyb20gc2VjdGlvbiBmcmFtZSBvZiByZWZlcmVuY2UgdG8gdGhlIGxvY2FsXG5AQCAtNzE1NCw2ICYjNDM7NzE1OCw1MCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2Fzc2lnbl9leGNfY2Ioc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwclxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIERZTkxPQURfREVDTF9UQUcgXCYjMzQ7bG9hZHR5cGU6ZHluYW1pY1wmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgd2hldGhlciBhIEJQRiBwcm9ncmFtIGlzIGFubm90YXRlZCB3aXRoIHRoZSBEWU5MT0FEX0RFQ0xfVEFHIEJURlxuJiM0MzsgKiBkZWNsIHRhZywgcmVxdWVzdGluZyB0aGF0IGl0IGJlIGxvYWRlZCBkeW5hbWljYWxseSBhZnRlciB0aGUgb2JqZWN0IGxvYWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMSBpZiB0aGUgdGFnIGlzIHByZXNlbnQsIDAgaWYgaXQgaXMgbm90LCBuZWdhdGl2ZSBlcnJvciBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGludCBpLCBuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VidGYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0biA9IGJ0Zl9fdHlwZV9jbnQob2JqLVx1MDAzZWJ0Zik7XG4mIzQzO1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGFnX3QsICpmbl90O1xuJiM0MztcbiYjNDM7XHRcdHRhZ190ID0gYnRmX190eXBlX2J5X2lkKG9iai1cdTAwM2VidGYsIGkpO1xuJiM0MztcdFx0aWYgKCFidGZfaXNfZGVjbF90YWcodGFnX3QpIHx8IGJ0Zl9kZWNsX3RhZyh0YWdfdCktXHUwMDNlY29tcG9uZW50X2lkeCAhPSAtMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotXHUwMDNlYnRmLCB0YWdfdC1cdTAwM2VuYW1lX29mZiksXG4mIzQzO1x0XHRcdCAgIERZTkxPQURfREVDTF9UQUcpICE9IDApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGEgZGVjbCB0YWcmIzM5O3MgdHlwZSBmaWVsZCBwb2ludHMgYXQgdGhlIGVudGl0eSBpdCBkZWNvcmF0ZXMgKi9cbiYjNDM7XHRcdGZuX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgdGFnX3QtXHUwMDNldHlwZSk7XG4mIzQzO1x0XHRpZiAoIWJ0Zl9pc19mdW5jKGZuX3QpIHx8IGJ0Zl9mdW5jX2xpbmthZ2UoZm5fdCkgIT0gQlRGX0ZVTkNfR0xPQkFMKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IFwmIzM0OyBEWU5MT0FEX0RFQ0xfVEFHXG4mIzQzO1x0XHRcdFx0XCYjMzQ7IGRlY2wgdGFnIG11c3QgYmUgYXBwbGllZCB0byBhIGdsb2JhbCBmdW5jdGlvblxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotXHUwMDNlYnRmLCBmbl90LVx1MDAzZW5hbWVfb2ZmKSwgcHJvZy1cdTAwM2VuYW1lKSAhPSAwKVxuJiM0MztcdFx0XHRjb250aW51ZTsgICAvKiB0YWcgYmVsb25ncyB0byBhIGRpZmZlcmVudCBwcm9ncmFtICovXG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHtcbiBcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGU7XG4gXHRjb25zdCBjaGFyICpjdHhfbmFtZTtcbkBAIC03NTMwLDcgJiM0Mzs3NTc4LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRcbiBcdFx0ICovXG4gXHRcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZXJyID0gYnBmX29iamVjdF9fcmVsb2NhdGVfY2FsbHMob2JqLCBwcm9nKTtcbkBAIC03NTY2LDcgJiM0Mzs3NjE0LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRcbiBcdFx0cHJvZyA9IFx1MDAyNm9iai1cdTAwM2Vwcm9ncmFtc1tpXTtcbiBcdFx0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoIXByb2ctXHUwMDNlYXV0b2xvYWQpXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBQcm9jZXNzIGRhdGEgcmVsb3MgZm9yIG1haW4gcHJvZ3JhbXMgKi9cbkBAIC04MDU1LDcgJiM0Mzs4MTAzLDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X2xvYWRfcHJvZyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2dcbiBcdFx0XHRsb2dfYnVmID0gcHJvZy1cdTAwM2Vsb2dfYnVmO1xuIFx0XHRcdGxvZ19idWZfc2l6ZSA9IHByb2ctXHUwMDNlbG9nX3NpemU7XG4gXHRcdFx0b3duX2xvZ19idWYgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIGlmIChvYmotXHUwMDNlbG9nX2J1Zikge1xuJiM0MztcdFx0fSBlbHNlIGlmIChvYmotXHUwMDNlbG9nX2J1ZiBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpIHtcbiBcdFx0XHRsb2dfYnVmID0gb2JqLVx1MDAzZWxvZ19idWY7XG4gXHRcdFx0bG9nX2J1Zl9zaXplID0gb2JqLVx1MDAzZWxvZ19zaXplO1xuIFx0XHRcdG93bl9sb2dfYnVmID0gZmFsc2U7XG5AQCAtODM5OCwxMCAmIzQzOzg0NDYsMTQgQEAgYnBmX29iamVjdF9fbG9hZF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgbG9nX2xldmVsKVxuIFx0XHRwcm9nID0gXHUwMDI2b2JqLVx1MDAzZXByb2dyYW1zW2ldO1xuIFx0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJvZy1cdTAwM2VhdXRvbG9hZCkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBza2lwcGVkIGxvYWRpbmdcXG5cJiMzNDssIHByb2ctXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pIHtcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHNraXBwZWQgbG9hZGluZywgbG9hZCB0eXBlIGlzICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBwcm9nLVx1MDAzZW5hbWUsXG4mIzQzO1x0XHRcdFx0IHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDID9cbiYjNDM7XHRcdFx0XHQgXCYjMzQ7ZHluYW1pY1wmIzM0OyA6IFwmIzM0O2Rpc2FibGVkXCYjMzQ7KTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuJiM0MztcbiBcdFx0cHJvZy1cdTAwM2Vsb2dfbGV2ZWwgfD0gbG9nX2xldmVsO1xuIFxuIFx0XHRpZiAob2JqLVx1MDAzZWdlbl9sb2FkZXIpXG5AQCAtODQ2NCw2ICYjNDM7ODUxNiwyMiBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdFxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHByb2dfaGFzX2R5bmxvYWRfdGFnKG9iaiwgcHJvZyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShwcm9nLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gYXBwbHkgXCYjMzQ7IERZTkxPQURfREVDTF9UQUdcbiYjNDM7XHRcdFx0XHRcdFwmIzM0OyBkZWNsIHRhZzogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGVycnN0cihlcnIpKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05MDc1LDE1ICYjNDM7OTE0MywyMiBAQCBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2NsZWFudXBfYnRmKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRvYmotXHUwMDNlYnRmX21vZHVsZXNfbG9hZGVkID0gZmFsc2U7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZXMpO1xuIFxuLVx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbi1cdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuLVx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbiYjNDM7XHQvKiBUaGUgYnRmX3ZtbGludXggZGF0YSBpcyBuZWVkZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyxcbiYjNDM7XHQgKiBzbyBkZWZlciBmcmVlaW5nIGl0IGluIHRoYXQgY2FzZSB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgbGlmZXRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlaGFzX2R5bmxvYWRfcHJvZ3MpIHtcbiYjNDM7XHRcdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuJiM0MztcdFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4tXHQvKiBjbGVhbiB1cCBmZF9hcnJheSAqL1xuLVx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWZkX2FycmF5KTtcbiYjNDM7XHQvKiBUaGUgZmQgYXJyYXkgaXMgbmVlZGVkIGZvciBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMsXG4mIzQzO1x0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWhhc19keW5sb2FkX3Byb2dzIHx8ICFvYmotXHUwMDNlZmRfYXJyYXlfY250KVxuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWZkX2FycmF5KTtcbiBcbiBcdC8qIGNsZWFuIHVwIEJURiAqL1xuIFx0YnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopO1xuQEAgLTk2NzcsNiAmIzQzOzk3NTIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VmZF9hcnJheSk7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbkBAIC05Nzk5LDE2ICYjNDM7OTg3NiwxNSBAQCBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiBcbiBib29sIGJwZl9wcm9ncmFtX19hdXRvbG9hZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4ge1xuLVx0cmV0dXJuIHByb2ctXHUwMDNlYXV0b2xvYWQ7XG4mIzQzO1x0cmV0dXJuIHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPO1xuIH1cbiBcbi1pbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpXG4mIzQzO2ludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpXG4ge1xuLVx0aWYgKHByb2ctXHUwMDNlb2JqLVx1MDAzZXN0YXRlIFx1MDAzZT0gT0JKX0xPQURFRClcbiYjNDM7XHRpZiAoYXV0b2xvYWQgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gXHUwMDI2XHUwMDI2IGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcbiBcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4gXG4tXHRwcm9nLVx1MDAzZWF1dG9sb2FkID0gYXV0b2xvYWQ7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgYXV0b2xvYWQpO1xuIH1cbiBcbiBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbkBAIC0xNTExMSw3ICYjNDM7MTUxODcsNyBAQCBpbnQgYnBmX29iamVjdF9fYXR0YWNoX3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKVxuIFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSAqcHJvZ19za2VsLVx1MDAzZXByb2c7XG4gXHRcdHN0cnVjdCBicGZfbGluayAqKmxpbmsgPSBwcm9nX3NrZWwtXHUwMDNlbGluaztcbiBcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkIHx8ICFwcm9nLVx1MDAzZWF1dG9hdHRhY2gpXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gfHwgIXByb2ctXHUwMDNlYXV0b2F0dGFjaClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0LyogYXV0by1hdHRhY2hpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBwcm9ncmFtICovXG5AQCAtMTUyMjEsMyAmIzQzOzE1Mjk3LDEzNiBAQCB2b2lkIGJwZl9vYmplY3RfX2Rlc3Ryb3lfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3Rfc2tlbGV0b24gKnMpXG4gXHRmcmVlKHMtXHUwMDNlcHJvZ3MpO1xuIFx0ZnJlZShzKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiYjNDM7XHRjb25zdCBjaGFyICphdHRhY2hfbmFtZTtcbiYjNDM7XG4mIzQzO1x0b2JqID0gcHJvZy1cdTAwM2VvYmo7XG4mIzQzO1x0aWYgKCFvYmopXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogRHluYW1pY2FsbHktbG9hZGVkIHByb2dyYW1zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBnZW5fbG9hZGVyLlxuJiM0MztcdCAqIFRoaXMgaXMgYmVjYXVzZSBicGZfb2JqZWN0X2xvYWRfcHJvZyBpcyBub3QgY2FsbGVkIGZvclxuJiM0MztcdCAqIGR5bmFtaWNsb2FkIHByb2dyYW1zLCBzbyBkeW5hbWljbG9hZCBwcm9ncmFtcyBhcmUgbm90IHZpc2libGVcbiYjNDM7XHQgKiB0byBnZW5fbG9hZGVyLiBGb3IgdGhpcyByZWFzb24sIHByZXZlbnQgY2FsbGluZ1xuJiM0MztcdCAqIGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQgd2hlbiBnZW5fbG9hZGVyIHdhcyB1c2VkIHRvXG4mIzQzO1x0ICogZ2VuZXJhdGUgYSBCUEYgb2JqZWN0IGxvYWRlci5cbiYjNDM7XHQgKiBBIGdlbl9sb2FkZXIgaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgY2FsbGVkIGZvciBwcm9ncmFtcyB3aXRoXG4mIzQzO1x0ICogbG9hZCB0eXBlIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPIGFuZCBkZWZpbmVzIGl0cyBvd24gbW9kZWwgZm9yXG4mIzQzO1x0ICogbG9hZGluZyBCUEYgcHJvZ3JhbXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG9iai1cdTAwM2VnZW5fbG9hZGVyKVxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0YXR0YWNoX25hbWUgPSBzdHJjaHIocHJvZy1cdTAwM2VzZWNfbmFtZSwgJiMzOTsvJiMzOTspO1xuJiM0MztcdGlmICghYXR0YWNoX25hbWUgfHwgc3RyY2hyKGF0dGFjaF9uYW1lLCAmIzM5OzomIzM5OykpIHtcbiYjNDM7XHRcdC8qIE9ubHkgcmVqZWN0IHByb2dyYW1zIHRoYXQgcmVxdWlyZSBCVEYtYmFzZWQgYXR0YWNoIHRhcmdldFxuJiM0MztcdFx0ICogcmVzb2x1dGlvbiAoaW5kaWNhdGVkIGJ5IHRoZSBTRUNfQVRUQUNIX0JURiBmbGFnKS4gU3VjaFxuJiM0MztcdFx0ICogcHJvZ3JhbXMgbmVlZCB0aGUgc2VjdGlvbiBuYW1lIHBhcnNlZCBmb3IgdGhlIGF0dGFjaCB0YXJnZXRcbiYjNDM7XHRcdCAqIGZ1bmN0aW9uIG5hbWUgKGFmdGVyICYjMzk7LyYjMzk7KSBhbmQgb3B0aW9uYWxseSB0aGUgbW9kdWxlIG5hbWVcbiYjNDM7XHRcdCAqIChiZWZvcmUgJiMzOTs6JiMzOTspIGZvciBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIFByb2dyYW1zIGxpa2UgU0VDKFwmIzM0O2NsYXNzaWZpZXJcJiMzNDspLCBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KSwgZXRjLiBkb1xuJiM0MztcdFx0ICogbm90IHJlcXVpcmUgQlRGIGF0dGFjaCByZXNvbHV0aW9uIGFuZCBjYW4gc2FmZWx5IHVzZVxuJiM0MztcdFx0ICogZHluYW1pYyBsb2FkaW5nIGRlc3BpdGUgaGF2aW5nIG5vICYjMzk7LyYjMzk7IGluIHRoZWlyIHNlY3Rpb25cbiYjNDM7XHRcdCAqIG5hbWUuIFRoZSBCVEYgZ3VhcmQgaW4gbGliYnBmX3ByZXBhcmVfcHJvZ19sb2FkIChjaGVja2luZ1xuJiM0MztcdFx0ICogU0VDX0FUVEFDSF9CVEYpIGlzIHRoZSBhdXRob3JpdGF0aXZlIGNoZWNrOyB0aGlzIGlzIGFuXG4mIzQzO1x0XHQgKiBlYXJseS1yZWplY3QgZm9yIHByb2dyYW1zIHRoYXQgd291bGQgZmFpbCB0aGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bG9uZyBmbGFncyA9IHByb2ctXHUwMDNlc2VjX2RlZiA/XG4mIzQzO1x0XHRcdChsb25nKXByb2ctXHUwMDNlc2VjX2RlZi1cdTAwM2Vjb29raWUgOiBTRUNfQVRUQUNIX0JURjtcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IFNFQ19BVFRBQ0hfQlRGKSBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXR0YWNoX2J0Zl9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvYmotXHUwMDNlaGFzX2R5bmxvYWRfcHJvZ3MgPSB0cnVlO1xuJiM0MztcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM7XG4mIzQzO1x0cHJvZy1cdTAwM2VhdXRvYXR0YWNoID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwcm9nKVxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZW9iai1cdTAwM2VzdGF0ZSBcdTAwM2U9IE9CSl9MT0FERUQpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzpcbiYjNDM7XHRcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkKHByb2cpO1xuJiM0MztcdGNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE86XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTGVhdmluZyB0aGUgZHluYW1pYyBzdGF0ZTogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJlZFxuJiM0MztcdFx0ICogYXV0b2F0dGFjaCBiZWNhdXNlIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyBhcmUgYXR0YWNoZWRcbiYjNDM7XHRcdCAqIGV4cGxpY2l0bHkuIFJlc3RvcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQgbG9hZCB0eXBlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpXG4mIzQzO1x0XHRcdHByb2ctXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IHR5cGU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJvZy1cdTAwM2Vsb2FkX3R5cGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYnBmX29iamVjdF9fbG9hZF9wcm9ncy5cbiYjNDM7ICogRHluYW1pY2FsbHktbG9hZGVkIHByb2dyYW0gZGF0YSBpcyBpbml0aWFsaXplZCBvbiBvYmplY3QgbG9hZC5cbiYjNDM7ICogUG9zdC1sb2FkIGluaXRpYWxpemF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyAqL1xuJiM0MztpbnRcbiYjNDM7YnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBpbnQgZXh0cmFfbG9nX2xldmVsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuJiM0MztcbiYjNDM7XHRvYmogPSBwcm9nLVx1MDAzZW9iajtcbiYjNDM7XHRpZiAoIW9iaiB8fCBvYmotXHUwMDNlc3RhdGUgXHUwMDNjIE9CSl9MT0FERUQpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpIHx8IHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHByb2ctXHUwMDNlbG9nX2xldmVsIHw9IGV4dHJhX2xvZ19sZXZlbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX29iamVjdF9sb2FkX3Byb2cob2JqLCBwcm9nLCBwcm9nLVx1MDAzZWluc25zLCBwcm9nLVx1MDAzZWluc25zX2NudCxcbiYjNDM7XHRcdFx0XHQgICBvYmotXHUwMDNlbGljZW5zZSwgb2JqLVx1MDAzZWtlcm5fdmVyc2lvbiwgXHUwMDI2cHJvZy1cdTAwM2VmZCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGR5bmFtaWNhbGx5IGxvYWQ6ICVkXFxuXCYjMzQ7LCBwcm9nLVx1MDAzZW5hbWUsIGVycik7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWxvZ19sZXZlbCBcdTAwMjY9IH5leHRyYV9sb2dfbGV2ZWw7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJvZy1cdTAwM2Vsb2dfbGV2ZWwgXHUwMDI2PSB+ZXh0cmFfbG9nX2xldmVsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByb2cgfHwgcHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBidXQgcmV0YWluIHRoZSBwcm9ncmFtJiMzOTtzIGRhdGEgdG9cbiYjNDM7XHQgKiBzdXBwb3J0IHJlbG9hZGluZyB0aGUgcHJvZ3JhbSBpZiBpdCBpcyByZXF1aXJlZCBhZ2Fpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSB6Y2xvc2UocHJvZy1cdTAwM2VmZCk7XG4mIzQzO1x0cmV0dXJuIGVyciA/IGxpYmJwZl9lcnIoLWVycm5vKSA6IDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uYTU2MDY4ZjBmMTEyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0zNTYsNiAmIzQzOzM1NiwxOSBAQCBMSUJCUEZfQVBJIGludCBsaWJicGZfYXR0YWNoX3R5cGVfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuIExJQkJQRl9BUEkgaW50IGxpYmJwZl9maW5kX3ZtbGludXhfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdFx0XHRcdCAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgcHJvZ3JhbSBsb2FkIHR5cGU6XG4mIzQzOyAqXG4mIzQzOyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOiB0aGUgcHJvZ3JhbSBpcyBub3QgbG9hZGVkLlxuJiM0MzsgKiAtIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPOiB0aGUgcHJvZ3JhbSBpcyBhdXRvbG9hZGVkIHdoZW4gdGhlIGJwZl9vYmplY3QgaXMgbG9hZGVkLlxuJiM0MzsgKiAtIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDOiB0aGUgcHJvZ3JhbSBpcyBsb2FkZWQgYW5kIGF0dGFjaGVkIGR5bmFtaWNhbGx5LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBicGZfcHJvZ19sb2FkX3R5cGUge1xuJiM0MztcdEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCA9IDAsXG4mIzQzO1x0QlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4mIzQzO1x0QlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4mIzQzO307XG4mIzQzO1xuIC8qIEFjY2Vzc29ycyBvZiBicGZfcHJvZ3JhbSAqL1xuIHN0cnVjdCBicGZfcHJvZ3JhbTtcbiBcbkBAIC0zNzYsNyAmIzQzOzM4OSwxOCBAQCBMSUJCUEZfQVBJIHZvaWQgYnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBMSUJCUEZfQVBJIGNvbnN0IGNoYXIgKmJwZl9wcm9ncmFtX19uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4gTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4gTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvbG9hZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xuLUxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBib29sIGF1dG9sb2FkKTtcbiYjNDM7LyoqXG4mIzQzOyAqIEBicmllZiAqKmJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSoqIGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHNcbiYjNDM7ICogY29tcGF0aWJpbGl0eTsgKipicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZSgpKiogaXMgdGhlIHByZWZlcnJlZCBBUEkuXG4mIzQzOyAqIFRoZSBlbnVtJiMzOTtzIG51bWJlcmluZyAoRElTQUJMRUQ9MCwgQVVUTz0xLCBEWU5BTUlDPTIpIG1hdGNoZXMgdGhlIHByZXZpb3VzXG4mIzQzOyAqIGJvb2wgc2VtYW50aWNzIChmYWxzZT0wLCB0cnVlPTEpLCBzbyBleGlzdGluZyBib29sIGNhbGxlcnMga2VlcCBjb21waWxpbmdcbiYjNDM7ICogYW5kIGJlaGF2aW5nIHVuY2hhbmdlZC4gT25seSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBhbmRcbiYjNDM7ICogQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGFyZSBhY2NlcHRlZCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWxcbiYjNDM7ICogYXV0b2xvYWQgb24vb2ZmIG1lYW5pbmc7IHVzZSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZSgpIHRvIHNldFxuJiM0MzsgKiBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQy5cbiYjNDM7ICovXG4mIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0IGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGF1dG9sb2FkKTtcbiBMSUJCUEZfQVBJIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIHZvaWQgYnBmX3Byb2dyYW1fX3NldF9hdXRvYXR0YWNoKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvYXR0YWNoKTtcbiBcbkBAIC0yMDc4LDYgJiM0MzsyMTAyLDEyIEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl91bnJlZ2lzdGVyX3Byb2dfaGFuZGxlcihpbnQgaGFuZGxlcl9pZCk7XG4gICovXG4gTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2Nsb25lKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3Qgc3RydWN0IGJwZl9wcm9nX2xvYWRfb3B0cyAqb3B0cyk7XG4gXG4mIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgbG9hZHR5cGUpO1xuJiM0MztMSUJCUEZfQVBJIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBpbnQgZXh0cmFfbG9nX2xldmVsKTtcbiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xuJiM0MztcbiAjaWZkZWYgX19jcGx1c3BsdXNcbiB9IC8qIGV4dGVybiBcJiMzNDtDXCYjMzQ7ICovXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5pbmRleCAwOGFiMmVhODgxZmI2Li43NDMxMmM5NWQzMjg3IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXBcbkBAIC00NjAsNiAmIzQzOzQ2MCwxMCBAQCBMSUJCUEZfMS44LjAge1xuIFx0Z2xvYmFsOlxuIFx0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XG4gXHRcdGJwZl9wcm9ncmFtX19jbG9uZTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5O1xuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2xvYWRfdHlwZTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlO1xuJiM0MztcdFx0YnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseTtcbiBcdFx0YnRmX19maW5kX2J5X25hbWVfa2luZF9vd247XG4gXHRcdGJ0Zl9fbmV3X2VtcHR5X29wdHM7XG4gfSBMSUJCUEZfMS43LjA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OTljNDMwMzRmZjkyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jXG5AQCAtMCwwICYjNDM7MSwyMjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF9keW5hbWljbG9hZC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIHByb2c0IGlzIHRhZ2dlZCBfX2xvYWRfZHluYW1pYyBpbiB0aGUgc291cmNlIGluc3RlYWQgb2YgYmVpbmcgc2V0XG4mIzQzOyAqIGltcGVyYXRpdmVseTsgdmVyaWZ5IHRoYXQgYW4gZXhwbGljaXQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSBjYWxsXG4mIzQzOyAqIGJlZm9yZSBsb2FkIG92ZXJyaWRlcyB0aGUgdGFnJiMzOTtzIGRlY2xhcmF0aXZlIGRlZmF1bHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkeW5hbWljbG9hZF92ZXJpZnlfb3ZlcnJpZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2R5bmFtaWNsb2FkX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3BlblwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVELFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3Byb2c0X2xvYWRfdHlwZV9vdmVycmlkZGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Lyoga2VlcCB0aGUgb3RoZXIgZHluYW1pYy1sb2FkLW9ubHkgcHJvZ3JhbXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhpcyBsb2FkICovXG4mIzQzO1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbiYjNDM7XHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB0ZXN0X2R5bmFtaWNsb2FkX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2tlbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogcHJvZzQgd2FzIG5ldmVyIGxvYWRlZCwgc28gaXQgY2Fubm90IGJlIGxvYWRlZCBkeW5hbWljYWxseSBlaXRoZXIgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2c0LCAwKTtcbiYjNDM7XHRBU1NFUlRfRVJSKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseV9hZnRlcl9vdmVycmlkZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9keW5hbWljbG9hZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2R5bmFtaWNsb2FkX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3BlblwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBfX2xvYWRfZHluYW1pYyB0YWcgYWxvbmUsIHdpdGggbm8gaW1wZXJhdGl2ZSBjYWxsLCBtdXN0IHNldFxuJiM0MztcdCAqIHByb2c0JiMzOTtzIGxvYWQgdHlwZSBiZWZvcmUgaXQgaXMgZXZlciB0b3VjaGVkIGJlbG93XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzRfdGFnX2xvYWRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRkFMU0UoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCksIFwmIzM0O3Byb2c0X2F1dG9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBkb24mIzM5O3QgbG9hZCBwcm9nMSAqL1xuJiM0MztcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIHByb2cyIGlzIGF1dG9sb2FkICovXG4mIzQzO1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMiwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pO1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nMyBpcyBkeW5hbWljYWxseSBsb2FkZWQgKi9cbiYjNDM7XHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2xvYWQoc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB0ZXN0X2R5bmFtaWNsb2FkX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHRyaWdnZXIgdGhlIEJQRiBwcm9ncmFtcyAqL1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cxX2NhbGxlZCwgXCYjMzQ7cHJvZzFfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwmIzM0O3Byb2cyX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCYjMzQ7cHJvZzNfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzRfY2FsbGVkLCBcJiMzNDtwcm9nNF9jYWxsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O2xvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVJSKGVyciwgXCYjMzQ7dW5sb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2cyLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2F1dG9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzIpO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O3VubG9hZF9keW5hbWljYWxseV9hdXRvbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjYWxsIGZsYWdzICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cxX2NhbGxlZCwgXCYjMzQ7cHJvZzFfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwmIzM0O3Byb2cyX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCYjMzQ7cHJvZzNfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogbG9hZCBwcm9nMyAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGF0dGFjaCBwcm9nMyAqL1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDthdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoMSk7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcJiMzNDtwcm9nM19jYWxsZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBkZXRhY2ggcHJvZzMgYXMgdGVzdF9keW5hbWljbG9hZF9fZGVzdHJveSBkb2VzbiYjMzk7dCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtsaW5rX2Rlc3Ryb3lcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiByZXNldCB0aGUgY2FsbCBmbGFncyBhZnRlciBkZXRhY2ggKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDEpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwmIzM0O3Byb2cyX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCYjMzQ7cHJvZzNfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogdW5sb2FkIHByb2czICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3VubG9hZF9keW5hbWljYWxseVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHJlbG9hZCBwcm9nMyAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseV9yZWxvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiByZWF0dGFjaCBwcm9nMyAqL1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDtyZWF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwmIzM0O3Byb2czX2NhbGxlZF9yZWF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95IGRvZXNuJiMzOTt0IGRldGFjaCBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMgKi9cbiYjNDM7XHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2xpbmtfZGVzdHJveV9yZWF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHZlcmlmeSByZWd1bGFyIHVubG9hZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW0sXG4mIzQzO1x0ICogdW5sb2FkIHByb2czIGFzIGEgcmVndWxhciBwcm9ncmFtXG4mIzQzO1x0ICovXG4mIzQzO1x0YnBmX3Byb2dyYW1fX3VubG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbiYjNDM7XG4mIzQzO1x0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgdW5sb2FkICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkLCBcJiMzNDtwcm9nMl9jYWxsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwmIzM0O3Byb2czX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIHJlbG9hZGluZyBwcm9nMyBtdXN0IGZhaWwgYXMgaXQgd2FzIHVubG9hZGVkIGFzIGEgcmVndWxhciBwcm9ncmFtICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgMCk7XG4mIzQzO1x0QVNTRVJUX0VSUihlcnIsIFwmIzM0O2xvYWRfZHluYW1pY2FsbHlfYWZ0ZXJfcmVndWxhcl91bmxvYWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBydW4gcHJvZzQgKGRlY2xhcmF0aXZlbHkgdGFnZ2VkKSB0aHJvdWdoIHRoZSBzYW1lIGR5bmFtaWNcbiYjNDM7XHQgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzNcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2c0LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Byb2c0X2xvYWRfZHluYW1pY2FsbHlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2c0KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7cHJvZzRfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDEpO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2c0X2NhbGxlZCwgXCYjMzQ7cHJvZzRfY2FsbGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwcm9nNF9saW5rX2Rlc3Ryb3lcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3Byb2c0X3VubG9hZF9keW5hbWljYWxseVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1xuJiM0MztcdC8qIHNlcGFyYXRlIHNjZW5hcmlvOiBpbXBlcmF0aXZlIG92ZXJyaWRlIG9mIHRoZSBkZWNsYXJhdGl2ZSB0YWcgKi9cbiYjNDM7XHRkeW5hbWljbG9hZF92ZXJpZnlfb3ZlcnJpZGUoKTtcbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjOTFmNjY2NmM1MDZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jXG5AQCAtMCwwICYjNDM7MSwxNjcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF9sb2FkX3R5cGUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfbG9hZF90eXBlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1x0c3RydWN0IHRlc3RfbG9hZF90eXBlICpza2VsO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBkb24mIzM5O3QgbG9hZCBwcm9nMSAqL1xuJiM0MztcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIGxvYWQgYW5kIGF0dGFjaCBwcm9nMiAqL1xuJiM0MztcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCYjMzQ7cHJvZzJfYXV0b2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2R5bmFtaWNcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3Byb2czX2xvYWRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSBpcyBhIHRoaW4gZm9yd2FyZGVyIHRvIHNldF9sb2FkX3R5cGUoKSxcbiYjNDM7XHQgKiByZXN0cmljdGVkIHRvIEFVVE8vRElTQUJMRUQgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsIGJvb2wgb24vb2ZmXG4mIzQzO1x0ICogbWVhbmluZzsgaXQgZG9lcyBjaGFuZ2UgdGhlIGxvYWQgdHlwZSBvZiBhIHByb2dyYW0gdGhhdCBpc24mIzM5O3RcbiYjNDM7XHQgKiBjdXJyZW50bHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfYXV0b2xvYWRfZmFsc2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX2FmdGVyX2ZhbHNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9hdXRvbG9hZF90cnVlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX2FmdGVyX3RydWVcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBzZXRfYXV0b2xvYWQoKSBvbmx5IGFjY2VwdHMgQVVUTy9ESVNBQkxFRCwgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsXG4mIzQzO1x0ICogb24vb2ZmIG1lYW5pbmc7IERZTkFNSUMgbXVzdCBnbyB0aHJvdWdoIHNldF9sb2FkX3R5cGUoKVxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O3NldF9hdXRvbG9hZF9keW5hbWljX3JlamVjdGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX3VuY2hhbmdlZF9hZnRlcl9yZWplY3RlZF9hdXRvbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX2FmdGVyX2R5bmFtaWNfZW51bVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGxlYXZpbmcgRFlOQU1JQyBmb3IgQVVUTyBtdXN0IHJlc3RvcmUgYXV0b2F0dGFjaCAocmVncmVzc2lvbiB0ZXN0IGZvclxuJiM0MztcdCAqIHRoZSBhdXRvYXR0YWNoIHJlc2lkdWUgYnVnOiBzZXRfZHluYW1pY2xvYWQoKSBjbGVhcnMgYXV0b2F0dGFjaCwgYW5kXG4mIzQzO1x0ICogbm90aGluZyB1c2VkIHRvIHJlc3RvcmUgaXQgb24gZXhpdClcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2F1dG9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtwcm9nM19sb2FkX3R5cGVfYXV0b1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIFwmIzM0O3Byb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgc2FtZSByZXNpZHVlIGNhbiByZWxheSB0aHJvdWdoIERJU0FCTEVEIGFuZCByZXN1cmZhY2Ugb24gYSBsYXRlclxuJiM0MztcdCAqIERJU0FCTEVEIC1cdTAwM2UgQVVUTyB0cmFuc2l0aW9uLCBzbyB0aGUgZml4IG11c3QgY292ZXIgYm90aCBleGl0IGVkZ2VzXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0X2xvYWRfdHlwZV9keW5hbWljX2FnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfZGlzYWJsZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2F1dG9fdmlhX2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKSxcbiYjNDM7XHRcdFx0IFwmIzM0O3Byb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRfdmlhX2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogYW4gb3V0LW9mLXJhbmdlIGxvYWQgdHlwZSBpcyByZWplY3RlZCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIChlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSk5OTkpO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfaW52YWxpZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGNoYW5nZSB0aGUgdHlwZSBiYWNrIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDIGZvciB0aGUgcmVzdCBvZiB0aGUgdGVzdCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfZHluYW1pY19maW5hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3Byb2czX2xvYWRfdHlwZV9maW5hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IHRlc3RfbG9hZF90eXBlX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2tlbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCYjMzQ7cHJvZzJfYXV0b2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRkFMU0UoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIFwmIzM0O3Byb2czX2F1dG9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBsb2FkZWQgcHJvZ3JhbSB0eXBlIGNhbm5vdCBiZSBjaGFuZ2VkICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbiYjNDM7XHRBU1NFUlRfRVJSKGVyciwgXCYjMzQ7c2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdGVzdF9sb2FkX3R5cGVfX2F0dGFjaChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NrZWxfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDEpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzFfY2FsbGVkLCBcJiMzNDtwcm9nMV9jYWxsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCwgXCYjMzQ7cHJvZzJfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcJiMzNDtwcm9nM19jYWxsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2xvYWRfZHluYW1pY2FsbHlfMVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseV8yXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogYXR0YWNoIHByb2czICovXG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwmIzM0O3Byb2czX2NhbGxlZF9hZ2FpblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2xvYWRfdHlwZV9fZGVzdHJveSBkb2VzbiYjMzk7dCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0QVNTRVJUX09LKGVyciwgXCYjMzQ7bGlua19kZXN0cm95XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0dGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9keW5hbWljbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZHluYW1pY2xvYWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZmNWE1Y2I4OTgwMzFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmNcbkBAIC0wLDAgJiM0MzsxLDQwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2Jvb2wgcHJvZzFfY2FsbGVkID0gZmFsc2U7XG4mIzQzO2Jvb2wgcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4mIzQzO2Jvb2wgcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4mIzQzO2Jvb2wgcHJvZzRfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7aW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHByb2cxX2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztpbnQgcHJvZzIoY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cHJvZzJfY2FsbGVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nMyhjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRwcm9nM19jYWxsZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19sb2FkX2R5bmFtaWNcbiYjNDM7aW50IHByb2c0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHByb2c0X2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9sb2FkX3R5cGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkOWI4MTY5MWQ3YWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0Mztib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xuJiM0Mztib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlO1xuJiM0Mztib29sIHByb2czX2NhbGxlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nMShjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7aW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHByb2cyX2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztpbnQgcHJvZzMoY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cHJvZzNfY2FsbGVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBzZWxmdGVzdHMgaW4gdGhlIHRvb2xzLyBkaXJlY3RvcnkuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlN2UzOTI4NTdiY2NiZjU3MjZmZmQ0OTc0Y2E5MDY2YTI2YmY0MTYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTk6MjE6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmggYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmgKaW5kZXggOWQxNjBiNWI5YzBlZS4uNTI5NzhmMGUwNDUzOSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaApAQCAtMjE4LDYgJiM0MzsyMTgsMTEgQEAgZW51bSBsaWJicGZfdHJpc3RhdGUgewogI2RlZmluZSBfX2FyZ191bnRydXN0ZWQgX19hdHRyaWJ1dGUoKGJ0Zl9kZWNsX3RhZygmIzM0O2FyZzp1bnRydXN0ZWQmIzM0OykpKQogI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKCYjMzQ7YXJnOmFyZW5hJiMzNDspKSkKIAomIzQzOy8qIE1hcmsgYSBCUEYgcHJvZ3JhbSB0byBiZSBsb2FkZWQgZHluYW1pY2FsbHkgaW5zdGVhZCBvZiBhdXRvbG9hZGVkLAomIzQzOyAqIGVxdWl2YWxlbnQgdG8gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19sb2FkX2R5bmFtaWMgX19hdHRyaWJ1dGVfXygoYnRmX2RlY2xfdGFnKCYjMzQ7bG9hZHR5cGU6ZHluYW1pYyYjMzQ7KSkpCiYjNDM7CiAjaWZuZGVmIF9fX2JwZl9jb25jYXQKICNkZWZpbmUgX19fYnBmX2NvbmNhdChhLCBiKSBhICMjIGIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggYjc0OWMwMTc0MmVlMC4uNWQ1OGRiZjI1MjM0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIHN0cnVjdCBicGZfcHJvZ3JhbSB7CiAJc3RydWN0IGJwZl9vYmplY3QgKm9iajsKIAogCWludCBmZDsKLQlib29sIGF1dG9sb2FkOwomIzQzOwllbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBsb2FkX3R5cGU7CiAJYm9vbCBhdXRvYXR0YWNoOwogCWJvb2wgc3ltX2dsb2JhbDsKIAlib29sIG1hcmtfYnRmX3N0YXRpYzsKQEAgLTcyNSw2ICYjNDM7NzI1LDcgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCiAJYm9vbCBoYXNfc3ViY2FsbHM7CiAJYm9vbCBoYXNfcm9kYXRhOwomIzQzOwlib29sIGhhc19keW5sb2FkX3Byb2dzOwogCiAJc3RydWN0IGJwZl9nZW4gKmdlbl9sb2FkZXI7CiAKQEAgLTg3MiwxMSAmIzQzOzg3MywxMSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCSAqIGF1dG9sb2FkIHNldCB0byBmYWxzZS4KIAkgKi8KIAlpZiAoc2VjX25hbWVbMF0gPT0gJiMzOTs/JiMzOTspIHsKLQkJcHJvZy0mZ3Q7YXV0b2xvYWQgPSBmYWxzZTsKJiM0MzsJCXByb2ctJmd0O2xvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDsKIAkJLyogZnJvbSBub3cgb24gZm9yZ2V0IHRoZXJlIHdhcyA/IGluIHNlY3Rpb24gbmFtZSAqLwogCQlzZWNfbmFtZSYjNDM7JiM0Mzs7CiAJfSBlbHNlIHsKLQkJcHJvZy0mZ3Q7YXV0b2xvYWQgPSB0cnVlOwomIzQzOwkJcHJvZy0mZ3Q7bG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE87CiAJfQogCiAJcHJvZy0mZ3Q7YXV0b2F0dGFjaCA9IHRydWU7CkBAIC0xMTI1LDkgJiM0MzsxMTI2LDEwIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3N0X29wc19wcm9ncmFtKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiB9CiAKIC8qIEZvciBlYWNoIHN0cnVjdF9vcHMgcHJvZ3JhbSBQLCByZWZlcmVuY2VkIGZyb20gc29tZSBzdHJ1Y3Rfb3BzIG1hcCBNLAotICogZW5hYmxlIFAuYXV0b2xvYWQgaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaCBNLmF1dG9jcmVhdGUgaXMgdHJ1ZSwKLSAqIGRpc2FibGUgUC5hdXRvbG9hZCBpZiBmb3IgYWxsIE1zIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS4KLSAqIERvbiYjMzk7dCBjaGFuZ2UgUC5hdXRvbG9hZCBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy4KJiM0MzsgKiBzZXQgUCYjMzk7cyBsb2FkIHR5cGUgdG8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaAomIzQzOyAqIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLCBvciB0byBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQgaWYgZm9yIGFsbCBNcwomIzQzOyAqIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS4KJiM0MzsgKiBEb24mIzM5O3QgY2hhbmdlIFAmIzM5O3MgbG9hZCB0eXBlIGZvciBwcm9ncmFtcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBmcm9tIGFueSBtYXBzLgogICovCiBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIHsKQEAgLTExNjMsNyAmIzQzOzExNjUsOCBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCX0KIAkJfQogCQlpZiAodXNlX2NudCkKLQkJCXByb2ctJmd0O2F1dG9sb2FkID0gc2hvdWxkX2xvYWQ7CiYjNDM7CQkJcHJvZy0mZ3Q7bG9hZF90eXBlID0gc2hvdWxkX2xvYWQgPyBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTwomIzQzOwkJCQk6IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEyNDIsMTMgJiM0MzsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAogCQkJaWYgKHN0X29wcy0mZ3Q7cHJvZ3NbaV0pIHsKIAkJCQkvKiBJZiB3ZSBoYWQgZGVjbGFyYXRpdmVseSBzZXQgc3RydWN0X29wcyBjYWxsYmFjaywgd2UgbmVlZCB0bwotCQkJCSAqIGZvcmNlIGl0cyBhdXRvbG9hZCB0byBmYWxzZSwgYmVjYXVzZSBpdCBkb2VzbiYjMzk7dCBoYXZlCi0JCQkJICogYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGUgY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC4KLQkJCQkgKiBJZiB0aGlzIHByb2dyYW0gaXMgc3RpbGwgcmVmZXJlbmNlZCBzb21ld2hlcmUgZWxzZSwgdGhvdWdoLAotCQkJCSAqIHRoZW4gYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZCgpIHdpbGwgdXBkYXRlIGl0cwotCQkJCSAqIGF1dG9sb2FkIGFjY29yZGluZ2x5LgomIzQzOwkJCQkgKiBmb3JjZSBpdHMgbG9hZCB0eXBlIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCwgYmVjYXVzZQomIzQzOwkJCQkgKiBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgY2hhbmNlIG9mIHN1Y2NlZWRpbmcgZnJvbSBQT1Ygb2YgdGhlCiYjNDM7CQkJCSAqIGN1cnJlbnQgc3RydWN0X29wcyBtYXAuIElmIHRoaXMgcHJvZ3JhbSBpcyBzdGlsbCByZWZlcmVuY2VkCiYjNDM7CQkJCSAqIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsIHRoZW4KJiM0MzsJCQkJICogYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZCgpIHdpbGwgdXBkYXRlIGl0cwomIzQzOwkJCQkgKiBsb2FkIHR5cGUgYWNjb3JkaW5nbHkuCiAJCQkJICovCi0JCQkJc3Rfb3BzLSZndDtwcm9nc1tpXS0mZ3Q7YXV0b2xvYWQgPSBmYWxzZTsKJiM0MzsJCQkJc3Rfb3BzLSZndDtwcm9nc1tpXS0mZ3Q7bG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOwogCQkJCXN0X29wcy0mZ3Q7cHJvZ3NbaV0gPSBOVUxMOwogCQkJfQogCkBAIC0xMjg3LDcgJiM0MzsxMjkxLDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCQkJICogaWYgdXNlciByZXBsYWNlZCBpdCB3aXRoIGFub3RoZXIgcHJvZ3JhbSBvciBOVUxMCiAJCQkgKi8KIAkJCWlmIChzdF9vcHMtJmd0O3Byb2dzW2ldICZhbXA7JmFtcDsgc3Rfb3BzLSZndDtwcm9nc1tpXSAhPSBwcm9nKQotCQkJCXN0X29wcy0mZ3Q7cHJvZ3NbaV0tJmd0O2F1dG9sb2FkID0gZmFsc2U7CiYjNDM7CQkJCXN0X29wcy0mZ3Q7cHJvZ3NbaV0tJmd0O2xvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDsKIAogCQkJLyogVXBkYXRlIHRoZSB2YWx1ZSBmcm9tIHRoZSBzaGFkb3cgdHlwZSAqLwogCQkJc3Rfb3BzLSZndDtwcm9nc1tpXSA9IHByb2c7CkBAIC0zNjAwLDcgJiM0MzszNjA0LDcgQEAgc3RhdGljIGJvb2wgb2JqX25lZWRzX3ZtbGludXhfYnRmKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJfQogCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfcHJvZ3JhbShwcm9nLCBvYmopIHsKLQkJaWYgKCFwcm9nLSZndDthdXRvbG9hZCkKJiM0MzsJCWlmIChwcm9nLSZndDtsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKQogCQkJY29udGludWU7CiAJCWlmIChwcm9nX25lZWRzX3ZtbGludXhfYnRmKHByb2cpKQogCQkJcmV0dXJuIHRydWU7CkBAIC02MTk0LDcgJiM0Mzs2MTk4LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKQogCQkJLyogbm8gbmVlZCB0byBhcHBseSBDTy1SRSByZWxvY2F0aW9uIGlmIHRoZSBwcm9ncmFtIGlzCiAJCQkgKiBub3QgZ29pbmcgdG8gYmUgbG9hZGVkCiAJCQkgKi8KLQkJCWlmICghcHJvZy0mZ3Q7YXV0b2xvYWQpCiYjNDM7CQkJaWYgKHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIGFkanVzdCBpbnNuX2lkeCBmcm9tIHNlY3Rpb24gZnJhbWUgb2YgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbApAQCAtNzE1NCw2ICYjNDM7NzE1OCw1MCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2Fzc2lnbl9leGNfY2Ioc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcgogCXJldHVybiAwOwogfQogCiYjNDM7I2RlZmluZSBEWU5MT0FEX0RFQ0xfVEFHICYjMzQ7bG9hZHR5cGU6ZHluYW1pYyYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaGVjayB3aGV0aGVyIGEgQlBGIHByb2dyYW0gaXMgYW5ub3RhdGVkIHdpdGggdGhlIERZTkxPQURfREVDTF9UQUcgQlRGCiYjNDM7ICogZGVjbCB0YWcsIHJlcXVlc3RpbmcgdGhhdCBpdCBiZSBsb2FkZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdGhlIG9iamVjdCBsb2FkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAxIGlmIHRoZSB0YWcgaXMgcHJlc2VudCwgMCBpZiBpdCBpcyBub3QsIG5lZ2F0aXZlIGVycm9yIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKJiM0Mzt7CiYjNDM7CWludCBpLCBuOwomIzQzOwomIzQzOwlpZiAoIW9iai0mZ3Q7YnRmKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW4gPSBidGZfX3R5cGVfY250KG9iai0mZ3Q7YnRmKTsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnRhZ190LCAqZm5fdDsKJiM0MzsKJiM0MzsJCXRhZ190ID0gYnRmX190eXBlX2J5X2lkKG9iai0mZ3Q7YnRmLCBpKTsKJiM0MzsJCWlmICghYnRmX2lzX2RlY2xfdGFnKHRhZ190KSB8fCBidGZfZGVjbF90YWcodGFnX3QpLSZndDtjb21wb25lbnRfaWR4ICE9IC0xKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHN0cmNtcChidGZfX3N0cl9ieV9vZmZzZXQob2JqLSZndDtidGYsIHRhZ190LSZndDtuYW1lX29mZiksCiYjNDM7CQkJICAgRFlOTE9BRF9ERUNMX1RBRykgIT0gMCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIGEgZGVjbCB0YWcmIzM5O3MgdHlwZSBmaWVsZCBwb2ludHMgYXQgdGhlIGVudGl0eSBpdCBkZWNvcmF0ZXMgKi8KJiM0MzsJCWZuX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLSZndDtidGYsIHRhZ190LSZndDt0eXBlKTsKJiM0MzsJCWlmICghYnRmX2lzX2Z1bmMoZm5fdCkgfHwgYnRmX2Z1bmNfbGlua2FnZShmbl90KSAhPSBCVEZfRlVOQ19HTE9CQUwpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6ICYjMzQ7IERZTkxPQURfREVDTF9UQUcKJiM0MzsJCQkJJiMzNDsgZGVjbCB0YWcgbXVzdCBiZSBhcHBsaWVkIHRvIGEgZ2xvYmFsIGZ1bmN0aW9uXG4mIzM0OywKJiM0MzsJCQkJcHJvZy0mZ3Q7bmFtZSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotJmd0O2J0ZiwgZm5fdC0mZ3Q7bmFtZV9vZmYpLCBwcm9nLSZndDtuYW1lKSAhPSAwKQomIzQzOwkJCWNvbnRpbnVlOyAgIC8qIHRhZyBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHByb2dyYW0gKi8KJiM0MzsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgewogCWVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGU7CiAJY29uc3QgY2hhciAqY3R4X25hbWU7CkBAIC03NTMwLDcgJiM0Mzs3NTc4LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXQKIAkJICovCiAJCWlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIXByb2ctJmd0O2F1dG9sb2FkKQomIzQzOwkJaWYgKHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpCiAJCQljb250aW51ZTsKIAogCQllcnIgPSBicGZfb2JqZWN0X19yZWxvY2F0ZV9jYWxscyhvYmosIHByb2cpOwpAQCAtNzU2Niw3ICYjNDM7NzYxNCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0CiAJCXByb2cgPSAmYW1wO29iai0mZ3Q7cHJvZ3JhbXNbaV07CiAJCWlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIXByb2ctJmd0O2F1dG9sb2FkKQomIzQzOwkJaWYgKHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpCiAJCQljb250aW51ZTsKIAogCQkvKiBQcm9jZXNzIGRhdGEgcmVsb3MgZm9yIG1haW4gcHJvZ3JhbXMgKi8KQEAgLTgwNTUsNyAmIzQzOzgxMDMsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfbG9hZF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZwogCQkJbG9nX2J1ZiA9IHByb2ctJmd0O2xvZ19idWY7CiAJCQlsb2dfYnVmX3NpemUgPSBwcm9nLSZndDtsb2dfc2l6ZTsKIAkJCW93bl9sb2dfYnVmID0gZmFsc2U7Ci0JCX0gZWxzZSBpZiAob2JqLSZndDtsb2dfYnVmKSB7CiYjNDM7CQl9IGVsc2UgaWYgKG9iai0mZ3Q7bG9nX2J1ZiAmYW1wOyZhbXA7IHByb2ctJmd0O2xvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykgewogCQkJbG9nX2J1ZiA9IG9iai0mZ3Q7bG9nX2J1ZjsKIAkJCWxvZ19idWZfc2l6ZSA9IG9iai0mZ3Q7bG9nX3NpemU7CiAJCQlvd25fbG9nX2J1ZiA9IGZhbHNlOwpAQCAtODM5OCwxMCAmIzQzOzg0NDYsMTQgQEAgYnBmX29iamVjdF9fbG9hZF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgbG9nX2xldmVsKQogCQlwcm9nID0gJmFtcDtvYmotJmd0O3Byb2dyYW1zW2ldOwogCQlpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpCiAJCQljb250aW51ZTsKLQkJaWYgKCFwcm9nLSZndDthdXRvbG9hZCkgewotCQkJcHJfZGVidWcoJiMzNDtwcm9nICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBsb2FkaW5nXG4mIzM0OywgcHJvZy0mZ3Q7bmFtZSk7CiYjNDM7CQlpZiAocHJvZy0mZ3Q7bG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKSB7CiYjNDM7CQkJcHJfZGVidWcoJiMzNDtwcm9nICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBsb2FkaW5nLCBsb2FkIHR5cGUgaXMgJXNcbiYjMzQ7LAomIzQzOwkJCQkgcHJvZy0mZ3Q7bmFtZSwKJiM0MzsJCQkJIHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyA/CiYjNDM7CQkJCSAmIzM0O2R5bmFtaWMmIzM0OyA6ICYjMzQ7ZGlzYWJsZWQmIzM0Oyk7CiAJCQljb250aW51ZTsKIAkJfQomIzQzOwogCQlwcm9nLSZndDtsb2dfbGV2ZWwgfD0gbG9nX2xldmVsOwogCiAJCWlmIChvYmotJmd0O2dlbl9sb2FkZXIpCkBAIC04NDY0LDYgJiM0Mzs4NTE2LDIyIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X3Byb2dzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0CiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KIAkJfQomIzQzOwomIzQzOwkJaWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gcHJvZ19oYXNfZHlubG9hZF90YWcob2JqLCBwcm9nKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQlpZiAoZXJyICZndDsgMCkgewomIzQzOwkJCWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGFwcGx5ICYjMzQ7IERZTkxPQURfREVDTF9UQUcKJiM0MzsJCQkJCSYjMzQ7IGRlY2wgdGFnOiAlc1xuJiMzNDssCiYjNDM7CQkJCQlwcm9nLSZndDtuYW1lLCBlcnJzdHIoZXJyKSk7CiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtOTA3NSwxNSAmIzQzOzkxNDMsMjIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCW9iai0mZ3Q7YnRmX21vZHVsZXNfbG9hZGVkID0gZmFsc2U7CiAJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVzKTsKIAotCS8qIGNsZWFuIHVwIHZtbGludXggQlRGICovCi0JYnRmX19mcmVlKG9iai0mZ3Q7YnRmX3ZtbGludXgpOwotCW9iai0mZ3Q7YnRmX3ZtbGludXggPSBOVUxMOwomIzQzOwkvKiBUaGUgYnRmX3ZtbGludXggZGF0YSBpcyBuZWVkZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcywKJiM0MzsJICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFvYmotJmd0O2hhc19keW5sb2FkX3Byb2dzKSB7CiYjNDM7CQlidGZfX2ZyZWUob2JqLSZndDtidGZfdm1saW51eCk7CiYjNDM7CQlvYmotJmd0O2J0Zl92bWxpbnV4ID0gTlVMTDsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X3Bvc3RfbG9hZF9jbGVhbnVwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7Ci0JLyogY2xlYW4gdXAgZmRfYXJyYXkgKi8KLQl6ZnJlZSgmYW1wO29iai0mZ3Q7ZmRfYXJyYXkpOwomIzQzOwkvKiBUaGUgZmQgYXJyYXkgaXMgbmVlZGVkIGZvciBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMsCiYjNDM7CSAqIHNvIGRlZmVyIGZyZWVpbmcgaXQgaW4gdGhhdCBjYXNlIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBsaWZldGltZS4KJiM0MzsJICovCiYjNDM7CWlmICghb2JqLSZndDtoYXNfZHlubG9hZF9wcm9ncyB8fCAhb2JqLSZndDtmZF9hcnJheV9jbnQpCiYjNDM7CQl6ZnJlZSgmYW1wO29iai0mZ3Q7ZmRfYXJyYXkpOwogCiAJLyogY2xlYW4gdXAgQlRGICovCiAJYnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopOwpAQCAtOTY3Nyw2ICYjNDM7OTc1Miw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJY2xvc2Uob2JqLSZndDtqdW1wdGFibGVfbWFwc1tpXS5mZCk7CiAJemZyZWUoJmFtcDtvYmotJmd0O2p1bXB0YWJsZV9tYXBzKTsKIAomIzQzOwl6ZnJlZSgmYW1wO29iai0mZ3Q7ZmRfYXJyYXkpOwomIzQzOwogCWZyZWUob2JqKTsKIH0KIApAQCAtOTc5OSwxNiAmIzQzOzk4NzYsMTUgQEAgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX3NlY3Rpb25fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpCiAKIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKIHsKLQlyZXR1cm4gcHJvZy0mZ3Q7YXV0b2xvYWQ7CiYjNDM7CXJldHVybiBwcm9nLSZndDtsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE87CiB9CiAKLWludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvbG9hZCkKJiM0MztpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGF1dG9sb2FkKQogewotCWlmIChwcm9nLSZndDtvYmotJmd0O3N0YXRlICZndDs9IE9CSl9MT0FERUQpCiYjNDM7CWlmIChhdXRvbG9hZCAhPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyAmYW1wOyZhbXA7IGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCkKIAkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiAKLQlwcm9nLSZndDthdXRvbG9hZCA9IGF1dG9sb2FkOwotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgYXV0b2xvYWQpOwogfQogCiBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKQEAgLTE1MTExLDcgJiM0MzsxNTE4Nyw3IEBAIGludCBicGZfb2JqZWN0X19hdHRhY2hfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3Rfc2tlbGV0b24gKnMpCiAJCXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyA9ICpwcm9nX3NrZWwtJmd0O3Byb2c7CiAJCXN0cnVjdCBicGZfbGluayAqKmxpbmsgPSBwcm9nX3NrZWwtJmd0O2xpbms7CiAKLQkJaWYgKCFwcm9nLSZndDthdXRvbG9hZCB8fCAhcHJvZy0mZ3Q7YXV0b2F0dGFjaCkKJiM0MzsJCWlmIChwcm9nLSZndDtsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gfHwgIXByb2ctJmd0O2F1dG9hdHRhY2gpCiAJCQljb250aW51ZTsKIAogCQkvKiBhdXRvLWF0dGFjaGluZyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIHByb2dyYW0gKi8KQEAgLTE1MjIxLDMgJiM0MzsxNTI5NywxMzYgQEAgdm9pZCBicGZfb2JqZWN0X19kZXN0cm95X3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKQogCWZyZWUocy0mZ3Q7cHJvZ3MpOwogCWZyZWUocyk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfb2JqZWN0ICpvYmo7CiYjNDM7CWNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lOwomIzQzOwomIzQzOwlvYmogPSBwcm9nLSZndDtvYmo7CiYjNDM7CWlmICghb2JqKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIER5bmFtaWNhbGx5LWxvYWRlZCBwcm9ncmFtcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ2VuX2xvYWRlci4KJiM0MzsJICogVGhpcyBpcyBiZWNhdXNlIGJwZl9vYmplY3RfbG9hZF9wcm9nIGlzIG5vdCBjYWxsZWQgZm9yCiYjNDM7CSAqIGR5bmFtaWNsb2FkIHByb2dyYW1zLCBzbyBkeW5hbWljbG9hZCBwcm9ncmFtcyBhcmUgbm90IHZpc2libGUKJiM0MzsJICogdG8gZ2VuX2xvYWRlci4gRm9yIHRoaXMgcmVhc29uLCBwcmV2ZW50IGNhbGxpbmcKJiM0MzsJICogYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZCB3aGVuIGdlbl9sb2FkZXIgd2FzIHVzZWQgdG8KJiM0MzsJICogZ2VuZXJhdGUgYSBCUEYgb2JqZWN0IGxvYWRlci4KJiM0MzsJICogQSBnZW5fbG9hZGVyIGltcGxlbWVudGF0aW9uIGlzIGJlaW5nIGNhbGxlZCBmb3IgcHJvZ3JhbXMgd2l0aAomIzQzOwkgKiBsb2FkIHR5cGUgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kIGRlZmluZXMgaXRzIG93biBtb2RlbCBmb3IKJiM0MzsJICogbG9hZGluZyBCUEYgcHJvZ3JhbXMuCiYjNDM7CSAqLwomIzQzOwlpZiAob2JqLSZndDtnZW5fbG9hZGVyKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApOwomIzQzOwomIzQzOwlpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpCiYjNDM7CQlyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJYXR0YWNoX25hbWUgPSBzdHJjaHIocHJvZy0mZ3Q7c2VjX25hbWUsICYjMzk7LyYjMzk7KTsKJiM0MzsJaWYgKCFhdHRhY2hfbmFtZSB8fCBzdHJjaHIoYXR0YWNoX25hbWUsICYjMzk7OiYjMzk7KSkgewomIzQzOwkJLyogT25seSByZWplY3QgcHJvZ3JhbXMgdGhhdCByZXF1aXJlIEJURi1iYXNlZCBhdHRhY2ggdGFyZ2V0CiYjNDM7CQkgKiByZXNvbHV0aW9uIChpbmRpY2F0ZWQgYnkgdGhlIFNFQ19BVFRBQ0hfQlRGIGZsYWcpLiBTdWNoCiYjNDM7CQkgKiBwcm9ncmFtcyBuZWVkIHRoZSBzZWN0aW9uIG5hbWUgcGFyc2VkIGZvciB0aGUgYXR0YWNoIHRhcmdldAomIzQzOwkJICogZnVuY3Rpb24gbmFtZSAoYWZ0ZXIgJiMzOTsvJiMzOTspIGFuZCBvcHRpb25hbGx5IHRoZSBtb2R1bGUgbmFtZQomIzQzOwkJICogKGJlZm9yZSAmIzM5OzomIzM5OykgZm9yIGxpYmJwZl9maW5kX2F0dGFjaF9idGZfaWQuCiYjNDM7CQkgKgomIzQzOwkJICogUHJvZ3JhbXMgbGlrZSBTRUMoJiMzNDtjbGFzc2lmaWVyJiMzNDspLCBTRUMoJiMzNDtzb2NrZXQmIzM0OyksIGV0Yy4gZG8KJiM0MzsJCSAqIG5vdCByZXF1aXJlIEJURiBhdHRhY2ggcmVzb2x1dGlvbiBhbmQgY2FuIHNhZmVseSB1c2UKJiM0MzsJCSAqIGR5bmFtaWMgbG9hZGluZyBkZXNwaXRlIGhhdmluZyBubyAmIzM5Oy8mIzM5OyBpbiB0aGVpciBzZWN0aW9uCiYjNDM7CQkgKiBuYW1lLiBUaGUgQlRGIGd1YXJkIGluIGxpYmJwZl9wcmVwYXJlX3Byb2dfbG9hZCAoY2hlY2tpbmcKJiM0MzsJCSAqIFNFQ19BVFRBQ0hfQlRGKSBpcyB0aGUgYXV0aG9yaXRhdGl2ZSBjaGVjazsgdGhpcyBpcyBhbgomIzQzOwkJICogZWFybHktcmVqZWN0IGZvciBwcm9ncmFtcyB0aGF0IHdvdWxkIGZhaWwgdGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWxvbmcgZmxhZ3MgPSBwcm9nLSZndDtzZWNfZGVmID8KJiM0MzsJCQkobG9uZylwcm9nLSZndDtzZWNfZGVmLSZndDtjb29raWUgOiBTRUNfQVRUQUNIX0JURjsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgU0VDX0FUVEFDSF9CVEYpICZhbXA7JmFtcDsgIXByb2ctJmd0O2F0dGFjaF9idGZfaWQpCiYjNDM7CQkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2JqLSZndDtoYXNfZHlubG9hZF9wcm9ncyA9IHRydWU7CiYjNDM7CXByb2ctJmd0O2xvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDOwomIzQzOwlwcm9nLSZndDthdXRvYXR0YWNoID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJaWYgKCFwcm9nKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmIChwcm9nLSZndDtvYmotJmd0O3N0YXRlICZndDs9IE9CSl9MT0FERUQpCiYjNDM7CQlyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM6CiYjNDM7CQlyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZChwcm9nKTsKJiM0MzsJY2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzoKJiM0MzsJY2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ6CiYjNDM7CQkvKgomIzQzOwkJICogTGVhdmluZyB0aGUgZHluYW1pYyBzdGF0ZTogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJlZAomIzQzOwkJICogYXV0b2F0dGFjaCBiZWNhdXNlIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyBhcmUgYXR0YWNoZWQKJiM0MzsJCSAqIGV4cGxpY2l0bHkuIFJlc3RvcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQgbG9hZCB0eXBlLgomIzQzOwkJICovCiYjNDM7CQlpZiAocHJvZy0mZ3Q7bG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKQomIzQzOwkJCXByb2ctJmd0O2F1dG9hdHRhY2ggPSB0cnVlOwomIzQzOwkJcHJvZy0mZ3Q7bG9hZF90eXBlID0gdHlwZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2VudW0gYnBmX3Byb2dfbG9hZF90eXBlIGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHByb2ctJmd0O2xvYWRfdHlwZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIGJwZl9vYmplY3RfX2xvYWRfcHJvZ3MuCiYjNDM7ICogRHluYW1pY2FsbHktbG9hZGVkIHByb2dyYW0gZGF0YSBpcyBpbml0aWFsaXplZCBvbiBvYmplY3QgbG9hZC4KJiM0MzsgKiBQb3N0LWxvYWQgaW5pdGlhbGl6YXRpb24gaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MztpbnQKJiM0MzticGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwomIzQzOwomIzQzOwlvYmogPSBwcm9nLSZndDtvYmo7CiYjNDM7CWlmICghb2JqIHx8IG9iai0mZ3Q7c3RhdGUgJmx0OyBPQkpfTE9BREVEKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSB8fCBwcm9nLSZndDtsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpCiYjNDM7CQlyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJcHJvZy0mZ3Q7bG9nX2xldmVsIHw9IGV4dHJhX2xvZ19sZXZlbDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX29iamVjdF9sb2FkX3Byb2cob2JqLCBwcm9nLCBwcm9nLSZndDtpbnNucywgcHJvZy0mZ3Q7aW5zbnNfY250LAomIzQzOwkJCQkgICBvYmotJmd0O2xpY2Vuc2UsIG9iai0mZ3Q7a2Vybl92ZXJzaW9uLCAmYW1wO3Byb2ctJmd0O2ZkKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZHluYW1pY2FsbHkgbG9hZDogJWRcbiYjMzQ7LCBwcm9nLSZndDtuYW1lLCBlcnIpOwomIzQzOwkJcHJvZy0mZ3Q7bG9nX2xldmVsICZhbXA7PSB+ZXh0cmFfbG9nX2xldmVsOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcm9nLSZndDtsb2dfbGV2ZWwgJmFtcDs9IH5leHRyYV9sb2dfbGV2ZWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXByb2cgfHwgcHJvZy0mZ3Q7bG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYnV0IHJldGFpbiB0aGUgcHJvZ3JhbSYjMzk7cyBkYXRhIHRvCiYjNDM7CSAqIHN1cHBvcnQgcmVsb2FkaW5nIHRoZSBwcm9ncmFtIGlmIGl0IGlzIHJlcXVpcmVkIGFnYWluLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gemNsb3NlKHByb2ctJmd0O2ZkKTsKJiM0MzsJcmV0dXJuIGVyciA/IGxpYmJwZl9lcnIoLWVycm5vKSA6IDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKaW5kZXggYjk2NWFkNTcxNTQwMy4uYTU2MDY4ZjBmMTEyMiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5oCkBAIC0zNTYsNiAmIzQzOzM1NiwxOSBAQCBMSUJCUEZfQVBJIGludCBsaWJicGZfYXR0YWNoX3R5cGVfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLAogTElCQlBGX0FQSSBpbnQgbGliYnBmX2ZpbmRfdm1saW51eF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSk7CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBwcm9ncmFtIGxvYWQgdHlwZToKJiM0MzsgKgomIzQzOyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOiB0aGUgcHJvZ3JhbSBpcyBub3QgbG9hZGVkLgomIzQzOyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE86IHRoZSBwcm9ncmFtIGlzIGF1dG9sb2FkZWQgd2hlbiB0aGUgYnBmX29iamVjdCBpcyBsb2FkZWQuCiYjNDM7ICogLSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzogdGhlIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBhdHRhY2hlZCBkeW5hbWljYWxseS4KJiM0MzsgKi8KJiM0MztlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB7CiYjNDM7CUJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCA9IDAsCiYjNDM7CUJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLAomIzQzOwlCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQywKJiM0Mzt9OwomIzQzOwogLyogQWNjZXNzb3JzIG9mIGJwZl9wcm9ncmFtICovCiBzdHJ1Y3QgYnBmX3Byb2dyYW07CiAKQEAgLTM3Niw3ICYjNDM7Mzg5LDE4IEBAIExJQkJQRl9BUEkgdm9pZCBicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwogTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7CiBMSUJCUEZfQVBJIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7Ci1MSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvbG9hZCk7CiYjNDM7LyoqCiYjNDM7ICogQGJyaWVmICoqYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpKiogaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkcwomIzQzOyAqIGNvbXBhdGliaWxpdHk7ICoqYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSoqIGlzIHRoZSBwcmVmZXJyZWQgQVBJLgomIzQzOyAqIFRoZSBlbnVtJiMzOTtzIG51bWJlcmluZyAoRElTQUJMRUQ9MCwgQVVUTz0xLCBEWU5BTUlDPTIpIG1hdGNoZXMgdGhlIHByZXZpb3VzCiYjNDM7ICogYm9vbCBzZW1hbnRpY3MgKGZhbHNlPTAsIHRydWU9MSksIHNvIGV4aXN0aW5nIGJvb2wgY2FsbGVycyBrZWVwIGNvbXBpbGluZwomIzQzOyAqIGFuZCBiZWhhdmluZyB1bmNoYW5nZWQuIE9ubHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kCiYjNDM7ICogQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGFyZSBhY2NlcHRlZCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwKJiM0MzsgKiBhdXRvbG9hZCBvbi9vZmYgbWVhbmluZzsgdXNlIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkgdG8gc2V0CiYjNDM7ICogQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMuCiYjNDM7ICovCiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiYjNDM7CQkJCQkgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpOwogTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7CiBMSUJCUEZfQVBJIHZvaWQgYnBmX3Byb2dyYW1fX3NldF9hdXRvYXR0YWNoKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvYXR0YWNoKTsKIApAQCAtMjA3OCw2ICYjNDM7MjEwMiwxMiBAQCBMSUJCUEZfQVBJIGludCBsaWJicGZfdW5yZWdpc3Rlcl9wcm9nX2hhbmRsZXIoaW50IGhhbmRsZXJfaWQpOwogICovCiBMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xvbmUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfbG9hZF9vcHRzICpvcHRzKTsKIAomIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKJiM0MzsJCQkJCSAgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgbG9hZHR5cGUpOwomIzQzO0xJQkJQRl9BUEkgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwomIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgaW50IGV4dHJhX2xvZ19sZXZlbCk7CiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwomIzQzOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAmIzM0O0MmIzM0OyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5tYXAgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXAKaW5kZXggMDhhYjJlYTg4MWZiNi4uNzQzMTJjOTVkMzI4NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcApAQCAtNDYwLDYgJiM0Mzs0NjAsMTAgQEAgTElCQlBGXzEuOC4wIHsKIAlnbG9iYWw6CiAJCWJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aTsKIAkJYnBmX3Byb2dyYW1fX2Nsb25lOwomIzQzOwkJYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHk7CiYjNDM7CQlicGZfcHJvZ3JhbV9fbG9hZF90eXBlOwomIzQzOwkJYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGU7CiYjNDM7CQlicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5OwogCQlidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjsKIAkJYnRmX19uZXdfZW1wdHlfb3B0czsKIH0gTElCQlBGXzEuNy4wOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzk5YzQzMDM0ZmY5MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmMKQEAgLTAsMCAmIzQzOzEsMjIyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2R5bmFtaWNsb2FkLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7LyogcHJvZzQgaXMgdGFnZ2VkIF9fbG9hZF9keW5hbWljIGluIHRoZSBzb3VyY2UgaW5zdGVhZCBvZiBiZWluZyBzZXQKJiM0MzsgKiBpbXBlcmF0aXZlbHk7IHZlcmlmeSB0aGF0IGFuIGV4cGxpY2l0IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkgY2FsbAomIzQzOyAqIGJlZm9yZSBsb2FkIG92ZXJyaWRlcyB0aGUgdGFnJiMzOTtzIGRlY2xhcmF0aXZlIGRlZmF1bHQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZHluYW1pY2xvYWRfdmVyaWZ5X292ZXJyaWRlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9keW5hbWljbG9hZCAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nNCwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldF9sb2FkX3R5cGVfZGlzYWJsZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzQpLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nNF9sb2FkX3R5cGVfb3ZlcnJpZGRlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoga2VlcCB0aGUgb3RoZXIgZHluYW1pYy1sb2FkLW9ubHkgcHJvZ3JhbXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhpcyBsb2FkICovCiYjNDM7CWJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpOwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsKJiM0MzsJZXJyID0gdGVzdF9keW5hbWljbG9hZF9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogcHJvZzQgd2FzIG5ldmVyIGxvYWRlZCwgc28gaXQgY2Fubm90IGJlIGxvYWRlZCBkeW5hbWljYWxseSBlaXRoZXIgKi8KJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC0mZ3Q7cHJvZ3MucHJvZzQsIDApOwomIzQzOwlBU1NFUlRfRVJSKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX292ZXJyaWRlJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CXRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9keW5hbWljbG9hZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwlzdHJ1Y3QgdGVzdF9keW5hbWljbG9hZCAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiB0aGUgX19sb2FkX2R5bmFtaWMgdGFnIGFsb25lLCB3aXRoIG5vIGltcGVyYXRpdmUgY2FsbCwgbXVzdCBzZXQKJiM0MzsJICogcHJvZzQmIzM5O3MgbG9hZCB0eXBlIGJlZm9yZSBpdCBpcyBldmVyIHRvdWNoZWQgYmVsb3cKJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzQpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQywKJiM0MzsJCSAgICAgICAmIzM0O3Byb2c0X3RhZ19sb2FkX3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWlmICghQVNTRVJUX0ZBTFNFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2c0KSwgJiMzNDtwcm9nNF9hdXRvYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBkb24mIzM5O3QgbG9hZCBwcm9nMSAqLwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsKJiM0MzsJLyogcHJvZzIgaXMgYXV0b2xvYWQgKi8KJiM0MzsJYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTsKJiM0MzsKJiM0MzsJLyogcHJvZzMgaXMgZHluYW1pY2FsbHkgbG9hZGVkICovCiYjNDM7CWJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7CiYjNDM7CiYjNDM7CWVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2xvYWQoc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtza2VsX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiB0cmlnZ2VyIHRoZSBCUEYgcHJvZ3JhbXMgKi8KJiM0MzsJdXNsZWVwKDEpOwomIzQzOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMV9jYWxsZWQsICYjMzQ7cHJvZzFfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O3Byb2cyX2NhbGxlZCwgJiMzNDtwcm9nMl9jYWxsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9GQUxTRShza2VsLSZndDtic3MtJmd0O3Byb2czX2NhbGxlZCwgJiMzNDtwcm9nM19jYWxsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9GQUxTRShza2VsLSZndDtic3MtJmd0O3Byb2c0X2NhbGxlZCwgJiMzNDtwcm9nNF9jYWxsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIHByb2cxIGlzIGRpc2FibGVkIGZvciBsb2FkICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cxLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cxKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDt1bmxvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIHByb2cyIGlzIGF1dG9sb2FkICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cyLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2F1dG9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBwcm9nMiBpcyBhdXRvbG9hZCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cyKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDt1bmxvYWRfZHluYW1pY2FsbHlfYXV0b2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIHJlc2V0IHRoZSBjYWxsIGZsYWdzICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzJfY2FsbGVkID0gZmFsc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0ZBTFNFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzFfY2FsbGVkLCAmIzM0O3Byb2cxX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiBsb2FkIHByb2czICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2czLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xvYWRfZHluYW1pY2FsbHkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIGF0dGFjaCBwcm9nMyAqLwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLSZndDtwcm9ncy5wcm9nMyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdXNsZWVwKDEpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkLCAmIzM0O3Byb2czX2NhbGxlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24mIzM5O3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqLwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xpbmtfZGVzdHJveSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgZGV0YWNoICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzJfY2FsbGVkID0gZmFsc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiB1bmxvYWQgcHJvZzMgKi8KJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt1bmxvYWRfZHluYW1pY2FsbHkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIHJlbG9hZCBwcm9nMyAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMywgMCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X3JlbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogcmVhdHRhY2ggcHJvZzMgKi8KJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDtyZWF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdXNsZWVwKDEpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkLCAmIzM0O3Byb2czX2NhbGxlZF9yZWF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24mIzM5O3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqLwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xpbmtfZGVzdHJveV9yZWF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogdmVyaWZ5IHJlZ3VsYXIgdW5sb2FkIGZvciBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbSwKJiM0MzsJICogdW5sb2FkIHByb2czIGFzIGEgcmVndWxhciBwcm9ncmFtCiYjNDM7CSAqLwomIzQzOwlicGZfcHJvZ3JhbV9fdW5sb2FkKHNrZWwtJmd0O3Byb2dzLnByb2czKTsKJiM0MzsKJiM0MzsJLyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgdW5sb2FkICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzJfY2FsbGVkID0gZmFsc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiByZWxvYWRpbmcgcHJvZzMgbXVzdCBmYWlsIGFzIGl0IHdhcyB1bmxvYWRlZCBhcyBhIHJlZ3VsYXIgcHJvZ3JhbSAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMywgMCk7CiYjNDM7CUFTU0VSVF9FUlIoZXJyLCAmIzM0O2xvYWRfZHluYW1pY2FsbHlfYWZ0ZXJfcmVndWxhcl91bmxvYWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIHJ1biBwcm9nNCAoZGVjbGFyYXRpdmVseSB0YWdnZWQpIHRocm91Z2ggdGhlIHNhbWUgZHluYW1pYwomIzQzOwkgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzMKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2c0LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Byb2c0X2xvYWRfZHluYW1pY2FsbHkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2c0KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssICYjMzQ7cHJvZzRfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwl1c2xlZXAoMSk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nNF9jYWxsZWQsICYjMzQ7cHJvZzRfY2FsbGVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Byb2c0X2xpbmtfZGVzdHJveSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nNCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7cHJvZzRfdW5sb2FkX2R5bmFtaWNhbGx5JiMzNDspOwomIzQzOwomIzQzOwl0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpOwomIzQzOwomIzQzOwkvKiBzZXBhcmF0ZSBzY2VuYXJpbzogaW1wZXJhdGl2ZSBvdmVycmlkZSBvZiB0aGUgZGVjbGFyYXRpdmUgdGFnICovCiYjNDM7CWR5bmFtaWNsb2FkX3ZlcmlmeV9vdmVycmlkZSgpOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJdGVzdF9keW5hbWljbG9hZF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjOTFmNjY2NmM1MDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuYwpAQCAtMCwwICYjNDM7MSwxNjcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfbG9hZF90eXBlLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2xvYWRfdHlwZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwlzdHJ1Y3QgdGVzdF9sb2FkX3R5cGUgKnNrZWw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW4mIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIGRvbiYjMzk7dCBsb2FkIHByb2cxICovCiYjNDM7CWJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpOwomIzQzOwomIzQzOwkvKiBsb2FkIGFuZCBhdHRhY2ggcHJvZzIgKi8KJiM0MzsJYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTsKJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2xvYWQoc2tlbC0mZ3Q7cHJvZ3MucHJvZzIpLCAmIzM0O3Byb2cyX2F1dG9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9keW5hbWljJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSBpcyBhIHRoaW4gZm9yd2FyZGVyIHRvIHNldF9sb2FkX3R5cGUoKSwKJiM0MzsJICogcmVzdHJpY3RlZCB0byBBVVRPL0RJU0FCTEVEIHRvIHByZXNlcnZlIGl0cyBvcmlnaW5hbCBib29sIG9uL29mZgomIzQzOwkgKiBtZWFuaW5nOyBpdCBkb2VzIGNoYW5nZSB0aGUgbG9hZCB0eXBlIG9mIGEgcHJvZ3JhbSB0aGF0IGlzbiYjMzk7dAomIzQzOwkgKiBjdXJyZW50bHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8uCiYjNDM7CSAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtJmd0O3Byb2dzLnByb2czLCBmYWxzZSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXRfYXV0b2xvYWRfZmFsc2UmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZmFsc2UmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIHRydWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2F1dG9sb2FkX3RydWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTywKJiM0MzsJCSAgICAgICAmIzM0O3Byb2czX2xvYWRfdHlwZV9hZnRlcl90cnVlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBzZXRfYXV0b2xvYWQoKSBvbmx5IGFjY2VwdHMgQVVUTy9ESVNBQkxFRCwgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsCiYjNDM7CSAqIG9uL29mZiBtZWFuaW5nOyBEWU5BTUlDIG11c3QgZ28gdGhyb3VnaCBzZXRfbG9hZF90eXBlKCkKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtzZXRfYXV0b2xvYWRfZHluYW1pY19yZWplY3RlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLAomIzQzOwkJICAgICAgICYjMzQ7cHJvZzNfbG9hZF90eXBlX3VuY2hhbmdlZF9hZnRlcl9yZWplY3RlZF9hdXRvbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZHluYW1pY19lbnVtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBsZWF2aW5nIERZTkFNSUMgZm9yIEFVVE8gbXVzdCByZXN0b3JlIGF1dG9hdHRhY2ggKHJlZ3Jlc3Npb24gdGVzdCBmb3IKJiM0MzsJICogdGhlIGF1dG9hdHRhY2ggcmVzaWR1ZSBidWc6IHNldF9keW5hbWljbG9hZCgpIGNsZWFycyBhdXRvYXR0YWNoLCBhbmQKJiM0MzsJICogbm90aGluZyB1c2VkIHRvIHJlc3RvcmUgaXQgb24gZXhpdCkKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXRfbG9hZF90eXBlX2F1dG8mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTywKJiM0MzsJCSAgICAgICAmIzM0O3Byb2czX2xvYWRfdHlwZV9hdXRvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgJiMzNDtwcm9nM19hdXRvYXR0YWNoX3Jlc3RvcmVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiB0aGUgc2FtZSByZXNpZHVlIGNhbiByZWxheSB0aHJvdWdoIERJU0FCTEVEIGFuZCByZXN1cmZhY2Ugb24gYSBsYXRlcgomIzQzOwkgKiBESVNBQkxFRCAtJmd0OyBBVVRPIHRyYW5zaXRpb24sIHNvIHRoZSBmaXggbXVzdCBjb3ZlciBib3RoIGV4aXQgZWRnZXMKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXRfbG9hZF90eXBlX2R5bmFtaWNfYWdhaW4mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9kaXNhYmxlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldF9sb2FkX3R5cGVfYXV0b192aWFfZGlzYWJsZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLAomIzQzOwkJCSAmIzM0O3Byb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRfdmlhX2Rpc2FibGVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBhbiBvdXQtb2YtcmFuZ2UgbG9hZCB0eXBlIGlzIHJlamVjdGVkICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCAoZW51bSBicGZfcHJvZ19sb2FkX3R5cGUpOTk5KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtzZXRfbG9hZF90eXBlX2ludmFsaWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIGNoYW5nZSB0aGUgdHlwZSBiYWNrIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDIGZvciB0aGUgcmVzdCBvZiB0aGUgdGVzdCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9keW5hbWljX2ZpbmFsJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGVfZmluYWwmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IHRlc3RfbG9hZF90eXBlX19sb2FkKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2cyKSwgJiMzNDtwcm9nMl9hdXRvYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9GQUxTRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLSZndDtwcm9ncy5wcm9nMyksICYjMzQ7cHJvZzNfYXV0b2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogbG9hZGVkIHByb2dyYW0gdHlwZSBjYW5ub3QgYmUgY2hhbmdlZCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsJQVNTRVJUX0VSUihlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X2xvYWRfdHlwZV9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0ZBTFNFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzFfY2FsbGVkLCAmIzM0O3Byb2cxX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMywgMCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5XzEmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2czLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xvYWRfZHluYW1pY2FsbHlfMiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogYXR0YWNoIHByb2czICovCiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2czKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwl1c2xlZXAoMSk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkX2FnYWluJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBkZXRhY2ggcHJvZzMgYXMgdGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3kgZG9lc24mIzM5O3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqLwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJQVNTRVJUX09LKGVyciwgJiMzNDtsaW5rX2Rlc3Ryb3kmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJdGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNmY1YTVjYjg5ODAzMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmMKQEAgLTAsMCAmIzQzOzEsNDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7Ym9vbCBwcm9nMV9jYWxsZWQgPSBmYWxzZTsKJiM0Mztib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlOwomIzQzO2Jvb2wgcHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7Ym9vbCBwcm9nNF9jYWxsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXByb2cxX2NhbGxlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXByb2cyX2NhbGxlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IHByb2czKGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXByb2czX2NhbGxlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19sb2FkX2R5bmFtaWMKJiM0MztpbnQgcHJvZzQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzRfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2Q5YjgxNjkxZDdhZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jCkBAIC0wLDAgJiM0MzsxLDMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzO2Jvb2wgcHJvZzFfY2FsbGVkID0gZmFsc2U7CiYjNDM7Ym9vbCBwcm9nMl9jYWxsZWQgPSBmYWxzZTsKJiM0Mztib29sIHByb2czX2NhbGxlZCA9IGZhbHNlOwomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgcHJvZzEoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzFfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgcHJvZzIoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzJfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgcHJvZzMoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzNfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTkKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiA5MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbjogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0byBldmFsdWF0ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHdoZXRoZXIgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwgY29kZSB0aGF0IHN5emthbGxlciB3b3VsZCB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIHJlbGF0ZWQgbWFwIGFuZCB0ZXN0IGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBuby1nbyBmb3IgZnV6emluZywgc2luY2UgaXQmIzM5O3MgYWxsIGluIHRoZSBgdG9vbHMvYCBkaXJlY3Rvcnkg4oCTIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGxpYmJwZiB1c2VyLXNwYWNlIGxpYnJhcnkuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc3RhdGVzIHdoYXQgY29uc3RpdHV0ZXMgY2hhbmdlcyB0aGF0ICp3b3VsZG4mIzM5O3QqIHdhcnJhbnQgZnV6emluZywgYW5kIHRoaXMgc2VlbXMgdG8gYWxpZ24uIEl0JiMzOTtzIHVzZXItc3BhY2UgY29kZTsgc3l6a2FsbGVyJiMzOTtzIHByaW1hcnkgZm9jdXMgaXMgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBzeXNjYWxsIGludGVyZmFjZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyB1c2VyLXNwYWNlIGNvZGUgaXNuJiMzOTt0IHNvbWVob3cgaW5mbHVlbmNpbmcga2VybmVsIGV4ZWN1dGlvbiBkaXJlY3RseSAoYmV5b25kIG5vcm1hbCBzeXNjYWxsLWJhc2VkIGludGVyYWN0aW9uKSwgYnV0IEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBpbmhlcmVudGx5IHRoYXQgd291bGQuCgpNeSB0aG91Z2h0IHByb2Nlc3MgaXMgdGhpczogZG9lcyB0aGlzIGNoYW5nZSBwb3RlbnRpYWxseSAqZXhwb3NlKiBuZXcga2VybmVsIGJ1Z3MgdmlhIGFuIHVwZGF0ZWQgbGlicmFyeSBvciBzeXNjYWxsLCBvciBkb2VzIHRoZSBjaGFuZ2VkIGxpYnJhcnkgZG8gc29tZXRoaW5nIHRoYXQmIzM5O3Mgb25seSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCwgb3Igc29tZXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZXhjbHVkZWQ/IE5vLCBmcm9tIHRoaXMgYW5hbHlzaXMsIGl0IGlzIGFsbCBgdG9vbHMvYC4gTGliYnBmICp1c2VzKiBzeXNjYWxscywgc3VyZSwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgaXMganVzdCBtb2RpZnlpbmcgdGhlIHVzZXItc3BhY2Ugc2lkZS4gTXkgY29uY2x1c2lvbiBpcyB0aGF0IGV2ZW4gaWYgdGhlIG5ldyBjb2RlIGNvdWxkIGNhdXNlIGtlcm5lbCBpc3N1ZXMsIGl0IHdpbGwgbm90IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsIGZvciBmdXp6aW5nLgoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZGlmZiBwYXRocywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIE9rYXksIGRvdWJsZS1jaGVja2VkLiBOb3RoaW5nIGlzIG91dHNpZGUgb2YgYHRvb2xzL2AuIFRoYXQmIzM5O3MgaXQsIHRoZW4uCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcGF0Y2ggaXMgc29sZWx5IHdpdGhpbiB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgcmVsYXRlZCB0ZXN0cy4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzeXprYWxsZXIgd291bGQgZGlyZWN0bHkgZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgc2VsZnRlc3RzIGluIHRoZSB0b29scy8gZGlyZWN0b3J5LiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToyMTwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MjE6MzYuMzk3Mzg5OTM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzY4ODI2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MjE6MzYuMzk3Mzk3OTM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAzODczMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTdlMzkyODU3YmNjYmY1NzI2ZmZkNDk3NGNhOTA2NmEyNmJmNDE2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxOToyMTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmggYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcXG5pbmRleCA5ZDE2MGI1YjljMGVlLi41Mjk3OGYwZTA0NTM5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxcbkBAIC0yMTgsNiArMjE4LDExIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcXG4gI2RlZmluZSBfX2FyZ191bnRydXN0ZWQgX19hdHRyaWJ1dGUoKGJ0Zl9kZWNsX3RhZyhcXFwiYXJnOnVudHJ1c3RlZFxcXCIpKSlcXG4gI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFxcXCJhcmc6YXJlbmFcXFwiKSkpXFxuIFxcbisvKiBNYXJrIGEgQlBGIHByb2dyYW0gdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGluc3RlYWQgb2YgYXV0b2xvYWRlZCxcXG4rICogZXF1aXZhbGVudCB0byBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShwcm9nLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykuXFxuKyAqL1xcbisjZGVmaW5lIF9fbG9hZF9keW5hbWljIF9fYXR0cmlidXRlX18oKGJ0Zl9kZWNsX3RhZyhcXFwibG9hZHR5cGU6ZHluYW1pY1xcXCIpKSlcXG4rXFxuICNpZm5kZWYgX19fYnBmX2NvbmNhdFxcbiAjZGVmaW5lIF9fX2JwZl9jb25jYXQoYSwgYikgYSAjIyBiXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IGI3NDljMDE3NDJlZTAuLjVkNThkYmYyNTIzNGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtNDk0LDcgKzQ5NCw3IEBAIHN0cnVjdCBicGZfcHJvZ3JhbSB7XFxuIFxcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuIFxcbiBcXHRpbnQgZmQ7XFxuLVxcdGJvb2wgYXV0b2xvYWQ7XFxuK1xcdGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGxvYWRfdHlwZTtcXG4gXFx0Ym9vbCBhdXRvYXR0YWNoO1xcbiBcXHRib29sIHN5bV9nbG9iYWw7XFxuIFxcdGJvb2wgbWFya19idGZfc3RhdGljO1xcbkBAIC03MjUsNiArNzI1LDcgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXG4gXFx0Ym9vbCBoYXNfc3ViY2FsbHM7XFxuIFxcdGJvb2wgaGFzX3JvZGF0YTtcXG4rXFx0Ym9vbCBoYXNfZHlubG9hZF9wcm9ncztcXG4gXFxuIFxcdHN0cnVjdCBicGZfZ2VuICpnZW5fbG9hZGVyO1xcbiBcXG5AQCAtODcyLDExICs4NzMsMTEgQEAgYnBmX29iamVjdF9faW5pdF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4gXFx0ICogYXV0b2xvYWQgc2V0IHRvIGZhbHNlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNlY19uYW1lWzBdID09ICc/Jykge1xcbi1cXHRcXHRwcm9nLVxcdTAwM2VhdXRvbG9hZCA9IGZhbHNlO1xcbitcXHRcXHRwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XFxuIFxcdFxcdC8qIGZyb20gbm93IG9uIGZvcmdldCB0aGVyZSB3YXMgPyBpbiBzZWN0aW9uIG5hbWUgKi9cXG4gXFx0XFx0c2VjX25hbWUrKztcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cHJvZy1cXHUwMDNlYXV0b2xvYWQgPSB0cnVlO1xcbitcXHRcXHRwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTztcXG4gXFx0fVxcbiBcXG4gXFx0cHJvZy1cXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XFxuQEAgLTExMjUsOSArMTEyNiwxMCBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9zdF9vcHNfcHJvZ3JhbShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxcbiB9XFxuIFxcbiAvKiBGb3IgZWFjaCBzdHJ1Y3Rfb3BzIHByb2dyYW0gUCwgcmVmZXJlbmNlZCBmcm9tIHNvbWUgc3RydWN0X29wcyBtYXAgTSxcXG4tICogZW5hYmxlIFAuYXV0b2xvYWQgaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaCBNLmF1dG9jcmVhdGUgaXMgdHJ1ZSxcXG4tICogZGlzYWJsZSBQLmF1dG9sb2FkIGlmIGZvciBhbGwgTXMgTS5hdXRvY3JlYXRlIGlzIGZhbHNlLlxcbi0gKiBEb24ndCBjaGFuZ2UgUC5hdXRvbG9hZCBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy5cXG4rICogc2V0IFAncyBsb2FkIHR5cGUgdG8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaFxcbisgKiBNLmF1dG9jcmVhdGUgaXMgdHJ1ZSwgb3IgdG8gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGlmIGZvciBhbGwgTXNcXG4rICogTS5hdXRvY3JlYXRlIGlzIGZhbHNlLlxcbisgKiBEb24ndCBjaGFuZ2UgUCdzIGxvYWQgdHlwZSBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuQEAgLTExNjMsNyArMTE2NSw4IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHVzZV9jbnQpXFxuLVxcdFxcdFxcdHByb2ctXFx1MDAzZWF1dG9sb2FkID0gc2hvdWxkX2xvYWQ7XFxuK1xcdFxcdFxcdHByb2ctXFx1MDAzZWxvYWRfdHlwZSA9IHNob3VsZF9sb2FkID8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE9cXG4rXFx0XFx0XFx0XFx0OiBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMjQyLDEzICsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFxuIFxcdFxcdFxcdGlmIChzdF9vcHMtXFx1MDAzZXByb2dzW2ldKSB7XFxuIFxcdFxcdFxcdFxcdC8qIElmIHdlIGhhZCBkZWNsYXJhdGl2ZWx5IHNldCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrLCB3ZSBuZWVkIHRvXFxuLVxcdFxcdFxcdFxcdCAqIGZvcmNlIGl0cyBhdXRvbG9hZCB0byBmYWxzZSwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmVcXG4tXFx0XFx0XFx0XFx0ICogYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGUgY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC5cXG4tXFx0XFx0XFx0XFx0ICogSWYgdGhpcyBwcm9ncmFtIGlzIHN0aWxsIHJlZmVyZW5jZWQgc29tZXdoZXJlIGVsc2UsIHRob3VnaCxcXG4tXFx0XFx0XFx0XFx0ICogdGhlbiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXFxuLVxcdFxcdFxcdFxcdCAqIGF1dG9sb2FkIGFjY29yZGluZ2x5LlxcbitcXHRcXHRcXHRcXHQgKiBmb3JjZSBpdHMgbG9hZCB0eXBlIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCwgYmVjYXVzZVxcbitcXHRcXHRcXHRcXHQgKiBpdCBkb2Vzbid0IGhhdmUgYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGVcXG4rXFx0XFx0XFx0XFx0ICogY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC4gSWYgdGhpcyBwcm9ncmFtIGlzIHN0aWxsIHJlZmVyZW5jZWRcXG4rXFx0XFx0XFx0XFx0ICogc29tZXdoZXJlIGVsc2UsIHRob3VnaCwgdGhlblxcbitcXHRcXHRcXHRcXHQgKiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXFxuK1xcdFxcdFxcdFxcdCAqIGxvYWQgdHlwZSBhY2NvcmRpbmdseS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcXG4gXFx0XFx0XFx0XFx0c3Rfb3BzLVxcdTAwM2Vwcm9nc1tpXSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTEyODcsNyArMTI5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0XFx0ICogaWYgdXNlciByZXBsYWNlZCBpdCB3aXRoIGFub3RoZXIgcHJvZ3JhbSBvciBOVUxMXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoc3Rfb3BzLVxcdTAwM2Vwcm9nc1tpXSBcXHUwMDI2XFx1MDAyNiBzdF9vcHMtXFx1MDAzZXByb2dzW2ldICE9IHByb2cpXFxuLVxcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcXG4gXFxuIFxcdFxcdFxcdC8qIFVwZGF0ZSB0aGUgdmFsdWUgZnJvbSB0aGUgc2hhZG93IHR5cGUgKi9cXG4gXFx0XFx0XFx0c3Rfb3BzLVxcdTAwM2Vwcm9nc1tpXSA9IHByb2c7XFxuQEAgLTM2MDAsNyArMzYwNCw3IEBAIHN0YXRpYyBib29sIG9ial9uZWVkc192bWxpbnV4X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHR9XFxuIFxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9wcm9ncmFtKHByb2csIG9iaikge1xcbi1cXHRcXHRpZiAoIXByb2ctXFx1MDAzZWF1dG9sb2FkKVxcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChwcm9nX25lZWRzX3ZtbGludXhfYnRmKHByb2cpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNjE5NCw3ICs2MTk4LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxcbiBcXHRcXHRcXHQvKiBubyBuZWVkIHRvIGFwcGx5IENPLVJFIHJlbG9jYXRpb24gaWYgdGhlIHByb2dyYW0gaXNcXG4gXFx0XFx0XFx0ICogbm90IGdvaW5nIHRvIGJlIGxvYWRlZFxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXRvbG9hZClcXG4rXFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWxvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0LyogYWRqdXN0IGluc25faWR4IGZyb20gc2VjdGlvbiBmcmFtZSBvZiByZWZlcmVuY2UgdG8gdGhlIGxvY2FsXFxuQEAgLTcxNTQsNiArNzE1OCw1MCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2Fzc2lnbl9leGNfY2Ioc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwclxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rI2RlZmluZSBEWU5MT0FEX0RFQ0xfVEFHIFxcXCJsb2FkdHlwZTpkeW5hbWljXFxcIlxcbitcXG4rLypcXG4rICogQ2hlY2sgd2hldGhlciBhIEJQRiBwcm9ncmFtIGlzIGFubm90YXRlZCB3aXRoIHRoZSBEWU5MT0FEX0RFQ0xfVEFHIEJURlxcbisgKiBkZWNsIHRhZywgcmVxdWVzdGluZyB0aGF0IGl0IGJlIGxvYWRlZCBkeW5hbWljYWxseSBhZnRlciB0aGUgb2JqZWN0IGxvYWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMSBpZiB0aGUgdGFnIGlzIHByZXNlbnQsIDAgaWYgaXQgaXMgbm90LCBuZWdhdGl2ZSBlcnJvciBvdGhlcndpc2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcXG4re1xcbitcXHRpbnQgaSwgbjtcXG4rXFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0biA9IGJ0Zl9fdHlwZV9jbnQob2JqLVxcdTAwM2VidGYpO1xcbitcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbjsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGFnX3QsICpmbl90O1xcbitcXG4rXFx0XFx0dGFnX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLVxcdTAwM2VidGYsIGkpO1xcbitcXHRcXHRpZiAoIWJ0Zl9pc19kZWNsX3RhZyh0YWdfdCkgfHwgYnRmX2RlY2xfdGFnKHRhZ190KS1cXHUwMDNlY29tcG9uZW50X2lkeCAhPSAtMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChzdHJjbXAoYnRmX19zdHJfYnlfb2Zmc2V0KG9iai1cXHUwMDNlYnRmLCB0YWdfdC1cXHUwMDNlbmFtZV9vZmYpLFxcbitcXHRcXHRcXHQgICBEWU5MT0FEX0RFQ0xfVEFHKSAhPSAwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIGEgZGVjbCB0YWcncyB0eXBlIGZpZWxkIHBvaW50cyBhdCB0aGUgZW50aXR5IGl0IGRlY29yYXRlcyAqL1xcbitcXHRcXHRmbl90ID0gYnRmX190eXBlX2J5X2lkKG9iai1cXHUwMDNlYnRmLCB0YWdfdC1cXHUwMDNldHlwZSk7XFxuK1xcdFxcdGlmICghYnRmX2lzX2Z1bmMoZm5fdCkgfHwgYnRmX2Z1bmNfbGlua2FnZShmbl90KSAhPSBCVEZfRlVOQ19HTE9CQUwpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiBcXFwiIERZTkxPQURfREVDTF9UQUdcXG4rXFx0XFx0XFx0XFx0XFxcIiBkZWNsIHRhZyBtdXN0IGJlIGFwcGxpZWQgdG8gYSBnbG9iYWwgZnVuY3Rpb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHByb2ctXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0cmNtcChidGZfX3N0cl9ieV9vZmZzZXQob2JqLVxcdTAwM2VidGYsIGZuX3QtXFx1MDAzZW5hbWVfb2ZmKSwgcHJvZy1cXHUwMDNlbmFtZSkgIT0gMClcXG4rXFx0XFx0XFx0Y29udGludWU7ICAgLyogdGFnIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgcHJvZ3JhbSAqL1xcbitcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHtcXG4gXFx0ZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZTtcXG4gXFx0Y29uc3QgY2hhciAqY3R4X25hbWU7XFxuQEAgLTc1MzAsNyArNzU3OCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0XFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoIXByb2ctXFx1MDAzZWF1dG9sb2FkKVxcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRlcnIgPSBicGZfb2JqZWN0X19yZWxvY2F0ZV9jYWxscyhvYmosIHByb2cpO1xcbkBAIC03NTY2LDcgKzc2MTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3JlbG9jYXRlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRhcmdfYnRmX3BhdFxcbiBcXHRcXHRwcm9nID0gXFx1MDAyNm9iai1cXHUwMDNlcHJvZ3JhbXNbaV07XFxuIFxcdFxcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmICghcHJvZy1cXHUwMDNlYXV0b2xvYWQpXFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdC8qIFByb2Nlc3MgZGF0YSByZWxvcyBmb3IgbWFpbiBwcm9ncmFtcyAqL1xcbkBAIC04MDU1LDcgKzgxMDMsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfbG9hZF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZ1xcbiBcXHRcXHRcXHRsb2dfYnVmID0gcHJvZy1cXHUwMDNlbG9nX2J1ZjtcXG4gXFx0XFx0XFx0bG9nX2J1Zl9zaXplID0gcHJvZy1cXHUwMDNlbG9nX3NpemU7XFxuIFxcdFxcdFxcdG93bl9sb2dfYnVmID0gZmFsc2U7XFxuLVxcdFxcdH0gZWxzZSBpZiAob2JqLVxcdTAwM2Vsb2dfYnVmKSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAob2JqLVxcdTAwM2Vsb2dfYnVmIFxcdTAwMjZcXHUwMDI2IHByb2ctXFx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykge1xcbiBcXHRcXHRcXHRsb2dfYnVmID0gb2JqLVxcdTAwM2Vsb2dfYnVmO1xcbiBcXHRcXHRcXHRsb2dfYnVmX3NpemUgPSBvYmotXFx1MDAzZWxvZ19zaXplO1xcbiBcXHRcXHRcXHRvd25fbG9nX2J1ZiA9IGZhbHNlO1xcbkBAIC04Mzk4LDEwICs4NDQ2LDE0IEBAIGJwZl9vYmplY3RfX2xvYWRfcHJvZ3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgaW50IGxvZ19sZXZlbClcXG4gXFx0XFx0cHJvZyA9IFxcdTAwMjZvYmotXFx1MDAzZXByb2dyYW1zW2ldO1xcbiBcXHRcXHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoIXByb2ctXFx1MDAzZWF1dG9sb2FkKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJwcm9nICclcyc6IHNraXBwZWQgbG9hZGluZ1xcXFxuXFxcIiwgcHJvZy1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pIHtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcInByb2cgJyVzJzogc2tpcHBlZCBsb2FkaW5nLCBsb2FkIHR5cGUgaXMgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBwcm9nLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHRcXHQgcHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDID9cXG4rXFx0XFx0XFx0XFx0IFxcXCJkeW5hbWljXFxcIiA6IFxcXCJkaXNhYmxlZFxcXCIpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbitcXG4gXFx0XFx0cHJvZy1cXHUwMDNlbG9nX2xldmVsIHw9IGxvZ19sZXZlbDtcXG4gXFxuIFxcdFxcdGlmIChvYmotXFx1MDAzZWdlbl9sb2FkZXIpXFxuQEAgLTg0NjQsNiArODUxNiwyMiBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBwcm9nX2hhc19keW5sb2FkX3RhZyhvYmosIHByb2cpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xcbitcXHRcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogZmFpbGVkIHRvIGFwcGx5IFxcXCIgRFlOTE9BRF9ERUNMX1RBR1xcbitcXHRcXHRcXHRcXHRcXHRcXFwiIGRlY2wgdGFnOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlbmFtZSwgZXJyc3RyKGVycikpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTkwNzUsMTUgKzkxNDMsMjIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVzX2xvYWRlZCA9IGZhbHNlO1xcbiBcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlcyk7XFxuIFxcbi1cXHQvKiBjbGVhbiB1cCB2bWxpbnV4IEJURiAqL1xcbi1cXHRidGZfX2ZyZWUob2JqLVxcdTAwM2VidGZfdm1saW51eCk7XFxuLVxcdG9iai1cXHUwMDNlYnRmX3ZtbGludXggPSBOVUxMO1xcbitcXHQvKiBUaGUgYnRmX3ZtbGludXggZGF0YSBpcyBuZWVkZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyxcXG4rXFx0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFvYmotXFx1MDAzZWhhc19keW5sb2FkX3Byb2dzKSB7XFxuK1xcdFxcdGJ0Zl9fZnJlZShvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4rXFx0XFx0b2JqLVxcdTAwM2VidGZfdm1saW51eCA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYnBmX29iamVjdF9wb3N0X2xvYWRfY2xlYW51cChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuLVxcdC8qIGNsZWFuIHVwIGZkX2FycmF5ICovXFxuLVxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWZkX2FycmF5KTtcXG4rXFx0LyogVGhlIGZkIGFycmF5IGlzIG5lZWRlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zLFxcbitcXHQgKiBzbyBkZWZlciBmcmVlaW5nIGl0IGluIHRoYXQgY2FzZSB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgbGlmZXRpbWUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW9iai1cXHUwMDNlaGFzX2R5bmxvYWRfcHJvZ3MgfHwgIW9iai1cXHUwMDNlZmRfYXJyYXlfY250KVxcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VmZF9hcnJheSk7XFxuIFxcbiBcXHQvKiBjbGVhbiB1cCBCVEYgKi9cXG4gXFx0YnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopO1xcbkBAIC05Njc3LDYgKzk3NTIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdGNsb3NlKG9iai1cXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xcbiBcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwcyk7XFxuIFxcbitcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VmZF9hcnJheSk7XFxuK1xcbiBcXHRmcmVlKG9iaik7XFxuIH1cXG4gXFxuQEAgLTk3OTksMTYgKzk4NzYsMTUgQEAgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX3NlY3Rpb25fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIFxcbiBib29sIGJwZl9wcm9ncmFtX19hdXRvbG9hZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIHtcXG4tXFx0cmV0dXJuIHByb2ctXFx1MDAzZWF1dG9sb2FkO1xcbitcXHRyZXR1cm4gcHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPO1xcbiB9XFxuIFxcbi1pbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpXFxuK2ludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpXFxuIHtcXG4tXFx0aWYgKHByb2ctXFx1MDAzZW9iai1cXHUwMDNlc3RhdGUgXFx1MDAzZT0gT0JKX0xPQURFRClcXG4rXFx0aWYgKGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPIFxcdTAwMjZcXHUwMDI2IGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcXG4gXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuIFxcbi1cXHRwcm9nLVxcdTAwM2VhdXRvbG9hZCA9IGF1dG9sb2FkO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIGF1dG9sb2FkKTtcXG4gfVxcbiBcXG4gYm9vbCBicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuQEAgLTE1MTExLDcgKzE1MTg3LDcgQEAgaW50IGJwZl9vYmplY3RfX2F0dGFjaF9za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdF9za2VsZXRvbiAqcylcXG4gXFx0XFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gKnByb2dfc2tlbC1cXHUwMDNlcHJvZztcXG4gXFx0XFx0c3RydWN0IGJwZl9saW5rICoqbGluayA9IHByb2dfc2tlbC1cXHUwMDNlbGluaztcXG4gXFxuLVxcdFxcdGlmICghcHJvZy1cXHUwMDNlYXV0b2xvYWQgfHwgIXByb2ctXFx1MDAzZWF1dG9hdHRhY2gpXFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gfHwgIXByb2ctXFx1MDAzZWF1dG9hdHRhY2gpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0LyogYXV0by1hdHRhY2hpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBwcm9ncmFtICovXFxuQEAgLTE1MjIxLDMgKzE1Mjk3LDEzNiBAQCB2b2lkIGJwZl9vYmplY3RfX2Rlc3Ryb3lfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3Rfc2tlbGV0b24gKnMpXFxuIFxcdGZyZWUocy1cXHUwMDNlcHJvZ3MpO1xcbiBcXHRmcmVlKHMpO1xcbiB9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuK1xcdGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lO1xcbitcXG4rXFx0b2JqID0gcHJvZy1cXHUwMDNlb2JqO1xcbitcXHRpZiAoIW9iailcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuK1xcbitcXHQvKiBEeW5hbWljYWxseS1sb2FkZWQgcHJvZ3JhbXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGdlbl9sb2FkZXIuXFxuK1xcdCAqIFRoaXMgaXMgYmVjYXVzZSBicGZfb2JqZWN0X2xvYWRfcHJvZyBpcyBub3QgY2FsbGVkIGZvclxcbitcXHQgKiBkeW5hbWljbG9hZCBwcm9ncmFtcywgc28gZHluYW1pY2xvYWQgcHJvZ3JhbXMgYXJlIG5vdCB2aXNpYmxlXFxuK1xcdCAqIHRvIGdlbl9sb2FkZXIuIEZvciB0aGlzIHJlYXNvbiwgcHJldmVudCBjYWxsaW5nXFxuK1xcdCAqIGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQgd2hlbiBnZW5fbG9hZGVyIHdhcyB1c2VkIHRvXFxuK1xcdCAqIGdlbmVyYXRlIGEgQlBGIG9iamVjdCBsb2FkZXIuXFxuK1xcdCAqIEEgZ2VuX2xvYWRlciBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyBjYWxsZWQgZm9yIHByb2dyYW1zIHdpdGhcXG4rXFx0ICogbG9hZCB0eXBlIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPIGFuZCBkZWZpbmVzIGl0cyBvd24gbW9kZWwgZm9yXFxuK1xcdCAqIGxvYWRpbmcgQlBGIHByb2dyYW1zLlxcbitcXHQgKi9cXG4rXFx0aWYgKG9iai1cXHUwMDNlZ2VuX2xvYWRlcilcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApO1xcbitcXG4rXFx0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKVxcbitcXHRcXHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcXG4rXFxuK1xcdGF0dGFjaF9uYW1lID0gc3RyY2hyKHByb2ctXFx1MDAzZXNlY19uYW1lLCAnLycpO1xcbitcXHRpZiAoIWF0dGFjaF9uYW1lIHx8IHN0cmNocihhdHRhY2hfbmFtZSwgJzonKSkge1xcbitcXHRcXHQvKiBPbmx5IHJlamVjdCBwcm9ncmFtcyB0aGF0IHJlcXVpcmUgQlRGLWJhc2VkIGF0dGFjaCB0YXJnZXRcXG4rXFx0XFx0ICogcmVzb2x1dGlvbiAoaW5kaWNhdGVkIGJ5IHRoZSBTRUNfQVRUQUNIX0JURiBmbGFnKS4gU3VjaFxcbitcXHRcXHQgKiBwcm9ncmFtcyBuZWVkIHRoZSBzZWN0aW9uIG5hbWUgcGFyc2VkIGZvciB0aGUgYXR0YWNoIHRhcmdldFxcbitcXHRcXHQgKiBmdW5jdGlvbiBuYW1lIChhZnRlciAnLycpIGFuZCBvcHRpb25hbGx5IHRoZSBtb2R1bGUgbmFtZVxcbitcXHRcXHQgKiAoYmVmb3JlICc6JykgZm9yIGxpYmJwZl9maW5kX2F0dGFjaF9idGZfaWQuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIFByb2dyYW1zIGxpa2UgU0VDKFxcXCJjbGFzc2lmaWVyXFxcIiksIFNFQyhcXFwic29ja2V0XFxcIiksIGV0Yy4gZG9cXG4rXFx0XFx0ICogbm90IHJlcXVpcmUgQlRGIGF0dGFjaCByZXNvbHV0aW9uIGFuZCBjYW4gc2FmZWx5IHVzZVxcbitcXHRcXHQgKiBkeW5hbWljIGxvYWRpbmcgZGVzcGl0ZSBoYXZpbmcgbm8gJy8nIGluIHRoZWlyIHNlY3Rpb25cXG4rXFx0XFx0ICogbmFtZS4gVGhlIEJURiBndWFyZCBpbiBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQgKGNoZWNraW5nXFxuK1xcdFxcdCAqIFNFQ19BVFRBQ0hfQlRGKSBpcyB0aGUgYXV0aG9yaXRhdGl2ZSBjaGVjazsgdGhpcyBpcyBhblxcbitcXHRcXHQgKiBlYXJseS1yZWplY3QgZm9yIHByb2dyYW1zIHRoYXQgd291bGQgZmFpbCB0aGVyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxvbmcgZmxhZ3MgPSBwcm9nLVxcdTAwM2VzZWNfZGVmID9cXG4rXFx0XFx0XFx0KGxvbmcpcHJvZy1cXHUwMDNlc2VjX2RlZi1cXHUwMDNlY29va2llIDogU0VDX0FUVEFDSF9CVEY7XFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBTRUNfQVRUQUNIX0JURikgXFx1MDAyNlxcdTAwMjYgIXByb2ctXFx1MDAzZWF0dGFjaF9idGZfaWQpXFxuK1xcdFxcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbitcXHRvYmotXFx1MDAzZWhhc19keW5sb2FkX3Byb2dzID0gdHJ1ZTtcXG4rXFx0cHJvZy1cXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM7XFxuK1xcdHByb2ctXFx1MDAzZWF1dG9hdHRhY2ggPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB0eXBlKVxcbit7XFxuK1xcdGlmICghcHJvZylcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuK1xcbitcXHRpZiAocHJvZy1cXHUwMDNlb2JqLVxcdTAwM2VzdGF0ZSBcXHUwMDNlPSBPQkpfTE9BREVEKVxcbitcXHRcXHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDOlxcbitcXHRcXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZChwcm9nKTtcXG4rXFx0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzpcXG4rXFx0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIExlYXZpbmcgdGhlIGR5bmFtaWMgc3RhdGU6IHNldF9keW5hbWljbG9hZCgpIGNsZWFyZWRcXG4rXFx0XFx0ICogYXV0b2F0dGFjaCBiZWNhdXNlIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyBhcmUgYXR0YWNoZWRcXG4rXFx0XFx0ICogZXhwbGljaXRseS4gUmVzdG9yZSB0aGUgZGVmYXVsdCBmb3IgdGhlIHRhcmdldCBsb2FkIHR5cGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxcbitcXHRcXHRcXHRwcm9nLVxcdTAwM2VhdXRvYXR0YWNoID0gdHJ1ZTtcXG4rXFx0XFx0cHJvZy1cXHUwMDNlbG9hZF90eXBlID0gdHlwZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuK3tcXG4rXFx0cmV0dXJuIHByb2ctXFx1MDAzZWxvYWRfdHlwZTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBicGZfb2JqZWN0X19sb2FkX3Byb2dzLlxcbisgKiBEeW5hbWljYWxseS1sb2FkZWQgcHJvZ3JhbSBkYXRhIGlzIGluaXRpYWxpemVkIG9uIG9iamVjdCBsb2FkLlxcbisgKiBQb3N0LWxvYWQgaW5pdGlhbGl6YXRpb24gaXMgbm90IHN1cHBvcnRlZC5cXG4rICovXFxuK2ludFxcbiticGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcXG4rXFxuK1xcdG9iaiA9IHByb2ctXFx1MDAzZW9iajtcXG4rXFx0aWYgKCFvYmogfHwgb2JqLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIE9CSl9MT0FERUQpXFxuK1xcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXG4rXFx0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpIHx8IHByb2ctXFx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQylcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuK1xcbitcXHRwcm9nLVxcdTAwM2Vsb2dfbGV2ZWwgfD0gZXh0cmFfbG9nX2xldmVsO1xcbitcXG4rXFx0ZXJyID0gYnBmX29iamVjdF9sb2FkX3Byb2cob2JqLCBwcm9nLCBwcm9nLVxcdTAwM2VpbnNucywgcHJvZy1cXHUwMDNlaW5zbnNfY250LFxcbitcXHRcXHRcXHRcXHQgICBvYmotXFx1MDAzZWxpY2Vuc2UsIG9iai1cXHUwMDNla2Vybl92ZXJzaW9uLCBcXHUwMDI2cHJvZy1cXHUwMDNlZmQpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogZmFpbGVkIHRvIGR5bmFtaWNhbGx5IGxvYWQ6ICVkXFxcXG5cXFwiLCBwcm9nLVxcdTAwM2VuYW1lLCBlcnIpO1xcbitcXHRcXHRwcm9nLVxcdTAwM2Vsb2dfbGV2ZWwgXFx1MDAyNj0gfmV4dHJhX2xvZ19sZXZlbDtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cHJvZy1cXHUwMDNlbG9nX2xldmVsIFxcdTAwMjY9IH5leHRyYV9sb2dfbGV2ZWw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghcHJvZyB8fCBwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpXFxuK1xcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXG4rXFx0LyogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBidXQgcmV0YWluIHRoZSBwcm9ncmFtJ3MgZGF0YSB0b1xcbitcXHQgKiBzdXBwb3J0IHJlbG9hZGluZyB0aGUgcHJvZ3JhbSBpZiBpdCBpcyByZXF1aXJlZCBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGVyciA9IHpjbG9zZShwcm9nLVxcdTAwM2VmZCk7XFxuK1xcdHJldHVybiBlcnIgPyBsaWJicGZfZXJyKC1lcnJubykgOiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uYTU2MDY4ZjBmMTEyMiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbkBAIC0zNTYsNiArMzU2LDE5IEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl9hdHRhY2hfdHlwZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsXFxuIExJQkJQRl9BUEkgaW50IGxpYmJwZl9maW5kX3ZtbGludXhfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpO1xcbiBcXG4rLypcXG4rICogVGhlIHByb2dyYW0gbG9hZCB0eXBlOlxcbisgKlxcbisgKiAtIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDogdGhlIHByb2dyYW0gaXMgbm90IGxvYWRlZC5cXG4rICogLSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzogdGhlIHByb2dyYW0gaXMgYXV0b2xvYWRlZCB3aGVuIHRoZSBicGZfb2JqZWN0IGlzIGxvYWRlZC5cXG4rICogLSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzogdGhlIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBhdHRhY2hlZCBkeW5hbWljYWxseS5cXG4rICovXFxuK2VudW0gYnBmX3Byb2dfbG9hZF90eXBlIHtcXG4rXFx0QlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEID0gMCxcXG4rXFx0QlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXFxuK1xcdEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxcbit9O1xcbitcXG4gLyogQWNjZXNzb3JzIG9mIGJwZl9wcm9ncmFtICovXFxuIHN0cnVjdCBicGZfcHJvZ3JhbTtcXG4gXFxuQEAgLTM3Niw3ICszODksMTggQEAgTElCQlBGX0FQSSB2b2lkIGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIExJQkJQRl9BUEkgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcXG4gTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XFxuIExJQkJQRl9BUEkgYm9vbCBicGZfcHJvZ3JhbV9fYXV0b2xvYWQoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcXG4tTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpO1xcbisvKipcXG4rICogQGJyaWVmICoqYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpKiogaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkc1xcbisgKiBjb21wYXRpYmlsaXR5OyAqKmJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkqKiBpcyB0aGUgcHJlZmVycmVkIEFQSS5cXG4rICogVGhlIGVudW0ncyBudW1iZXJpbmcgKERJU0FCTEVEPTAsIEFVVE89MSwgRFlOQU1JQz0yKSBtYXRjaGVzIHRoZSBwcmV2aW91c1xcbisgKiBib29sIHNlbWFudGljcyAoZmFsc2U9MCwgdHJ1ZT0xKSwgc28gZXhpc3RpbmcgYm9vbCBjYWxsZXJzIGtlZXAgY29tcGlsaW5nXFxuKyAqIGFuZCBiZWhhdmluZyB1bmNoYW5nZWQuIE9ubHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kXFxuKyAqIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCBhcmUgYWNjZXB0ZWQsIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsXFxuKyAqIGF1dG9sb2FkIG9uL29mZiBtZWFuaW5nOyB1c2UgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSB0byBzZXRcXG4rICogQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMuXFxuKyAqL1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4rXFx0XFx0XFx0XFx0XFx0IGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGF1dG9sb2FkKTtcXG4gTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XFxuIExJQkJQRl9BUEkgdm9pZCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9hdHRhY2goc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBib29sIGF1dG9hdHRhY2gpO1xcbiBcXG5AQCAtMjA3OCw2ICsyMTAyLDEyIEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl91bnJlZ2lzdGVyX3Byb2dfaGFuZGxlcihpbnQgaGFuZGxlcl9pZCk7XFxuICAqL1xcbiBMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xvbmUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfbG9hZF9vcHRzICpvcHRzKTtcXG4gXFxuK0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBsb2FkdHlwZSk7XFxuK0xJQkJQRl9BUEkgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpO1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XFxuK1xcbiAjaWZkZWYgX19jcGx1c3BsdXNcXG4gfSAvKiBleHRlcm4gXFxcIkNcXFwiICovXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5tYXAgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXBcXG5pbmRleCAwOGFiMmVhODgxZmI2Li43NDMxMmM5NWQzMjg3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxcbkBAIC00NjAsNiArNDYwLDEwIEBAIExJQkJQRl8xLjguMCB7XFxuIFxcdGdsb2JhbDpcXG4gXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpO1xcbiBcXHRcXHRicGZfcHJvZ3JhbV9fY2xvbmU7XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5O1xcbitcXHRcXHRicGZfcHJvZ3JhbV9fbG9hZF90eXBlO1xcbitcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZTtcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseTtcXG4gXFx0XFx0YnRmX19maW5kX2J5X25hbWVfa2luZF9vd247XFxuIFxcdFxcdGJ0Zl9fbmV3X2VtcHR5X29wdHM7XFxuIH0gTElCQlBGXzEuNy4wO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzk5YzQzMDM0ZmY5Mlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jXFxuQEAgLTAsMCArMSwyMjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X2R5bmFtaWNsb2FkLnNrZWwuaFxcXCJcXG4rXFxuKy8qIHByb2c0IGlzIHRhZ2dlZCBfX2xvYWRfZHluYW1pYyBpbiB0aGUgc291cmNlIGluc3RlYWQgb2YgYmVpbmcgc2V0XFxuKyAqIGltcGVyYXRpdmVseTsgdmVyaWZ5IHRoYXQgYW4gZXhwbGljaXQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSBjYWxsXFxuKyAqIGJlZm9yZSBsb2FkIG92ZXJyaWRlcyB0aGUgdGFnJ3MgZGVjbGFyYXRpdmUgZGVmYXVsdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGR5bmFtaWNsb2FkX3ZlcmlmeV9vdmVycmlkZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzQsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZGlzYWJsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nNCksIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nNF9sb2FkX3R5cGVfb3ZlcnJpZGRlblxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBrZWVwIHRoZSBvdGhlciBkeW5hbWljLWxvYWQtb25seSBwcm9ncmFtcyBvdXQgb2YgdGhlIHdheSBvZiB0aGlzIGxvYWQgKi9cXG4rXFx0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9keW5hbWljbG9hZF9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHByb2c0IHdhcyBuZXZlciBsb2FkZWQsIHNvIGl0IGNhbm5vdCBiZSBsb2FkZWQgZHluYW1pY2FsbHkgZWl0aGVyICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2c0LCAwKTtcXG4rXFx0QVNTRVJUX0VSUihlcnIsIFxcXCJsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX292ZXJyaWRlXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHR0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfZHluYW1pY2xvYWQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogdGhlIF9fbG9hZF9keW5hbWljIHRhZyBhbG9uZSwgd2l0aCBubyBpbXBlcmF0aXZlIGNhbGwsIG11c3Qgc2V0XFxuK1xcdCAqIHByb2c0J3MgbG9hZCB0eXBlIGJlZm9yZSBpdCBpcyBldmVyIHRvdWNoZWQgYmVsb3dcXG4rXFx0ICovXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzQpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nNF90YWdfbG9hZF90eXBlXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfRkFMU0UoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzQpLCBcXFwicHJvZzRfYXV0b2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBkb24ndCBsb2FkIHByb2cxICovXFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xcbitcXG4rXFx0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cXG4rXFx0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcXG4rXFxuK1xcdC8qIHByb2czIGlzIGR5bmFtaWNhbGx5IGxvYWRlZCAqL1xcbitcXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9keW5hbWljbG9hZF9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2F0dGFjaChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogdHJpZ2dlciB0aGUgQlBGIHByb2dyYW1zICovXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdEFTU0VSVF9GQUxTRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cxX2NhbGxlZCwgXFxcInByb2cxX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cyX2NhbGxlZCwgXFxcInByb2cyX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0ZBTFNFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzRfY2FsbGVkLCBcXFwicHJvZzRfY2FsbGVkXFxcIik7XFxuK1xcbitcXHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMSwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0VSUihlcnIsIFxcXCJsb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHByb2cxIGlzIGRpc2FibGVkIGZvciBsb2FkICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzEpO1xcbitcXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcXFwidW5sb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHByb2cyIGlzIGF1dG9sb2FkICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2cyLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVJSKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfYXV0b2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMik7XFxuK1xcdGlmICghQVNTRVJUX0VSUihlcnIsIFxcXCJ1bmxvYWRfZHluYW1pY2FsbHlfYXV0b2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMl9jYWxsZWQgPSBmYWxzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdEFTU0VSVF9GQUxTRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cxX2NhbGxlZCwgXFxcInByb2cxX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cyX2NhbGxlZCwgXFxcInByb2cyX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKTtcXG4rXFxuK1xcdC8qIGxvYWQgcHJvZzMgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJsb2FkX2R5bmFtaWNhbGx5XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGF0dGFjaCBwcm9nMyAqL1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24ndCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXFxuK1xcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJsaW5rX2Rlc3Ryb3lcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgZGV0YWNoICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cyX2NhbGxlZCwgXFxcInByb2cyX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKTtcXG4rXFxuK1xcdC8qIHVubG9hZCBwcm9nMyAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2czKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidW5sb2FkX2R5bmFtaWNhbGx5XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHJlbG9hZCBwcm9nMyAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgMCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfcmVsb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHJlYXR0YWNoIHByb2czICovXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2czKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFxcXCJyZWF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkLCBcXFwicHJvZzNfY2FsbGVkX3JlYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95IGRvZXNuJ3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqL1xcbitcXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwibGlua19kZXN0cm95X3JlYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHZlcmlmeSByZWd1bGFyIHVubG9hZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW0sXFxuK1xcdCAqIHVubG9hZCBwcm9nMyBhcyBhIHJlZ3VsYXIgcHJvZ3JhbVxcbitcXHQgKi9cXG4rXFx0YnBmX3Byb2dyYW1fX3VubG9hZChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyk7XFxuK1xcbitcXHQvKiByZXNldCB0aGUgY2FsbCBmbGFncyBhZnRlciB1bmxvYWQgKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMl9jYWxsZWQgPSBmYWxzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdEFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzJfY2FsbGVkLCBcXFwicHJvZzJfY2FsbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9GQUxTRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2czX2NhbGxlZCwgXFxcInByb2czX2NhbGxlZFxcXCIpO1xcbitcXG4rXFx0LyogcmVsb2FkaW5nIHByb2czIG11c3QgZmFpbCBhcyBpdCB3YXMgdW5sb2FkZWQgYXMgYSByZWd1bGFyIHByb2dyYW0gKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xcbitcXHRBU1NFUlRfRVJSKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfYWZ0ZXJfcmVndWxhcl91bmxvYWRcXFwiKTtcXG4rXFxuK1xcdC8qIHJ1biBwcm9nNCAoZGVjbGFyYXRpdmVseSB0YWdnZWQpIHRocm91Z2ggdGhlIHNhbWUgZHluYW1pY1xcbitcXHQgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzNcXG4rXFx0ICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2c0LCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwicHJvZzRfbG9hZF9keW5hbWljYWxseVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nNCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwicHJvZzRfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nNF9jYWxsZWQsIFxcXCJwcm9nNF9jYWxsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInByb2c0X2xpbmtfZGVzdHJveVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2c0KTtcXG4rXFx0QVNTRVJUX09LKGVyciwgXFxcInByb2c0X3VubG9hZF9keW5hbWljYWxseVxcXCIpO1xcbitcXG4rXFx0dGVzdF9keW5hbWljbG9hZF9fZGVzdHJveShza2VsKTtcXG4rXFxuK1xcdC8qIHNlcGFyYXRlIHNjZW5hcmlvOiBpbXBlcmF0aXZlIG92ZXJyaWRlIG9mIHRoZSBkZWNsYXJhdGl2ZSB0YWcgKi9cXG4rXFx0ZHluYW1pY2xvYWRfdmVyaWZ5X292ZXJyaWRlKCk7XFxuK1xcdHJldHVybjtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjOTFmNjY2NmM1MDZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmNcXG5AQCAtMCwwICsxLDE2NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInRlc3RfbG9hZF90eXBlLnNrZWwuaFxcXCJcXG4rXFxuK3ZvaWQgdGVzdF9sb2FkX3R5cGUodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcdHN0cnVjdCB0ZXN0X2xvYWRfdHlwZSAqc2tlbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3BlblxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBkb24ndCBsb2FkIHByb2cxICovXFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xcbitcXG4rXFx0LyogbG9hZCBhbmQgYXR0YWNoIHByb2cyICovXFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2cyLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XFxuK1xcdGlmICghQVNTRVJUX1RSVUUoYnBmX3Byb2dyYW1fX2F1dG9sb2FkKHNrZWwtXFx1MDAzZXByb2dzLnByb2cyKSwgXFxcInByb2cyX2F1dG9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZHluYW1pY1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpIGlzIGEgdGhpbiBmb3J3YXJkZXIgdG8gc2V0X2xvYWRfdHlwZSgpLFxcbitcXHQgKiByZXN0cmljdGVkIHRvIEFVVE8vRElTQUJMRUQgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsIGJvb2wgb24vb2ZmXFxuK1xcdCAqIG1lYW5pbmc7IGl0IGRvZXMgY2hhbmdlIHRoZSBsb2FkIHR5cGUgb2YgYSBwcm9ncmFtIHRoYXQgaXNuJ3RcXG4rXFx0ICogY3VycmVudGx5IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgZmFsc2UpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXRfYXV0b2xvYWRfZmFsc2VcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZmFsc2VcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9hdXRvbG9hZF90cnVlXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfdHJ1ZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBzZXRfYXV0b2xvYWQoKSBvbmx5IGFjY2VwdHMgQVVUTy9ESVNBQkxFRCwgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsXFxuK1xcdCAqIG9uL29mZiBtZWFuaW5nOyBEWU5BTUlDIG11c3QgZ28gdGhyb3VnaCBzZXRfbG9hZF90eXBlKClcXG4rXFx0ICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVJSKGVyciwgXFxcInNldF9hdXRvbG9hZF9keW5hbWljX3JlamVjdGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfdW5jaGFuZ2VkX2FmdGVyX3JlamVjdGVkX2F1dG9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZHluYW1pY19lbnVtXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGxlYXZpbmcgRFlOQU1JQyBmb3IgQVVUTyBtdXN0IHJlc3RvcmUgYXV0b2F0dGFjaCAocmVncmVzc2lvbiB0ZXN0IGZvclxcbitcXHQgKiB0aGUgYXV0b2F0dGFjaCByZXNpZHVlIGJ1Zzogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJzIGF1dG9hdHRhY2gsIGFuZFxcbitcXHQgKiBub3RoaW5nIHVzZWQgdG8gcmVzdG9yZSBpdCBvbiBleGl0KVxcbitcXHQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9hdXRvXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYXV0b1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2czKSwgXFxcInByb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogdGhlIHNhbWUgcmVzaWR1ZSBjYW4gcmVsYXkgdGhyb3VnaCBESVNBQkxFRCBhbmQgcmVzdXJmYWNlIG9uIGEgbGF0ZXJcXG4rXFx0ICogRElTQUJMRUQgLVxcdTAwM2UgQVVUTyB0cmFuc2l0aW9uLCBzbyB0aGUgZml4IG11c3QgY292ZXIgYm90aCBleGl0IGVkZ2VzXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXRfbG9hZF90eXBlX2R5bmFtaWNfYWdhaW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZGlzYWJsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9hdXRvX3ZpYV9kaXNhYmxlZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2czKSxcXG4rXFx0XFx0XFx0IFxcXCJwcm9nM19hdXRvYXR0YWNoX3Jlc3RvcmVkX3ZpYV9kaXNhYmxlZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBhbiBvdXQtb2YtcmFuZ2UgbG9hZCB0eXBlIGlzIHJlamVjdGVkICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCAoZW51bSBicGZfcHJvZ19sb2FkX3R5cGUpOTk5KTtcXG4rXFx0aWYgKCFBU1NFUlRfRVJSKGVyciwgXFxcInNldF9sb2FkX3R5cGVfaW52YWxpZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBjaGFuZ2UgdGhlIHR5cGUgYmFjayB0byBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRlc3QgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9keW5hbWljX2ZpbmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfZmluYWxcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9sb2FkX3R5cGVfX2xvYWQoc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWxfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2cyKSwgXFxcInByb2cyX2F1dG9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRpZiAoIUFTU0VSVF9GQUxTRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyksIFxcXCJwcm9nM19hdXRvYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGxvYWRlZCBwcm9ncmFtIHR5cGUgY2Fubm90IGJlIGNoYW5nZWQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdEFTU0VSVF9FUlIoZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkXFxcIik7XFxuK1xcbitcXHRlcnIgPSB0ZXN0X2xvYWRfdHlwZV9fYXR0YWNoKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJza2VsX2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMV9jYWxsZWQsIFxcXCJwcm9nMV9jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMl9jYWxsZWQsIFxcXCJwcm9nMl9jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0ZBTFNFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkLCBcXFwicHJvZzNfY2FsbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgMCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfMVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgMCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfMlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBhdHRhY2ggcHJvZzMgKi9cXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkLCBcXFwicHJvZzNfY2FsbGVkX2FnYWluXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2xvYWRfdHlwZV9fZGVzdHJveSBkb2Vzbid0IGRldGFjaCBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMgKi9cXG4rXFx0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJsaW5rX2Rlc3Ryb3lcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdHRlc3RfbG9hZF90eXBlX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9keW5hbWljbG9hZC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjVhNWNiODk4MDMxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmNcXG5AQCAtMCwwICsxLDQwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2czX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2c0X2NhbGxlZCA9IGZhbHNlO1xcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMl9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2czKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nM19jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19sb2FkX2R5bmFtaWNcXG4raW50IHByb2c0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nNF9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkOWI4MTY5MWQ3YWRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2czX2NhbGxlZCA9IGZhbHNlO1xcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMl9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2czKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nM19jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjIxOjM4LjYwMjUwMDMyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzOTcxNzUzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTdlMzkyODU3YmNjYmY1NzI2ZmZkNDk3NGNhOTA2NmEyNmJmNDE2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjIxOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG5pbmRleCA5ZDE2MGI1YjljMGVlLi41Mjk3OGYwZTA0NTM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG4rKysgYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbkBAIC0yMTgsNiArMjE4LDExIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcbiAjZGVmaW5lIF9fYXJnX3VudHJ1c3RlZCBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFwiYXJnOnVudHJ1c3RlZFwiKSkpXG4gI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFwiYXJnOmFyZW5hXCIpKSlcbiBcbisvKiBNYXJrIGEgQlBGIHByb2dyYW0gdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGluc3RlYWQgb2YgYXV0b2xvYWRlZCxcbisgKiBlcXVpdmFsZW50IHRvIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKS5cbisgKi9cbisjZGVmaW5lIF9fbG9hZF9keW5hbWljIF9fYXR0cmlidXRlX18oKGJ0Zl9kZWNsX3RhZyhcImxvYWR0eXBlOmR5bmFtaWNcIikpKVxuK1xuICNpZm5kZWYgX19fYnBmX2NvbmNhdFxuICNkZWZpbmUgX19fYnBmX2NvbmNhdChhLCBiKSBhICMjIGJcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYjc0OWMwMTc0MmVlMC4uNWQ1OGRiZjI1MjM0ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC00OTQsNyArNDk0LDcgQEAgc3RydWN0IGJwZl9wcm9ncmFtIHtcbiBcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4gXG4gXHRpbnQgZmQ7XG4tXHRib29sIGF1dG9sb2FkO1xuK1x0ZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgbG9hZF90eXBlO1xuIFx0Ym9vbCBhdXRvYXR0YWNoO1xuIFx0Ym9vbCBzeW1fZ2xvYmFsO1xuIFx0Ym9vbCBtYXJrX2J0Zl9zdGF0aWM7XG5AQCAtNzI1LDYgKzcyNSw3IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcbiBcdGJvb2wgaGFzX3N1YmNhbGxzO1xuIFx0Ym9vbCBoYXNfcm9kYXRhO1xuK1x0Ym9vbCBoYXNfZHlubG9hZF9wcm9ncztcbiBcbiBcdHN0cnVjdCBicGZfZ2VuICpnZW5fbG9hZGVyO1xuIFxuQEAgLTg3MiwxMSArODczLDExIEBAIGJwZl9vYmplY3RfX2luaXRfcHJvZyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHQgKiBhdXRvbG9hZCBzZXQgdG8gZmFsc2UuXG4gXHQgKi9cbiBcdGlmIChzZWNfbmFtZVswXSA9PSAnPycpIHtcbi1cdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IGZhbHNlO1xuK1x0XHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcbiBcdFx0LyogZnJvbSBub3cgb24gZm9yZ2V0IHRoZXJlIHdhcyA/IGluIHNlY3Rpb24gbmFtZSAqL1xuIFx0XHRzZWNfbmFtZSsrO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IHRydWU7XG4rXHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE87XG4gXHR9XG4gXG4gXHRwcm9nLVx1MDAzZWF1dG9hdHRhY2ggPSB0cnVlO1xuQEAgLTExMjUsOSArMTEyNiwxMCBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9zdF9vcHNfcHJvZ3JhbShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIH1cbiBcbiAvKiBGb3IgZWFjaCBzdHJ1Y3Rfb3BzIHByb2dyYW0gUCwgcmVmZXJlbmNlZCBmcm9tIHNvbWUgc3RydWN0X29wcyBtYXAgTSxcbi0gKiBlbmFibGUgUC5hdXRvbG9hZCBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLFxuLSAqIGRpc2FibGUgUC5hdXRvbG9hZCBpZiBmb3IgYWxsIE1zIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS5cbi0gKiBEb24ndCBjaGFuZ2UgUC5hdXRvbG9hZCBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy5cbisgKiBzZXQgUCdzIGxvYWQgdHlwZSB0byBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoXG4rICogTS5hdXRvY3JlYXRlIGlzIHRydWUsIG9yIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCBpZiBmb3IgYWxsIE1zXG4rICogTS5hdXRvY3JlYXRlIGlzIGZhbHNlLlxuKyAqIERvbid0IGNoYW5nZSBQJ3MgbG9hZCB0eXBlIGZvciBwcm9ncmFtcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBmcm9tIGFueSBtYXBzLlxuICAqL1xuIHN0YXRpYyBpbnQgYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbkBAIC0xMTYzLDcgKzExNjUsOCBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKHVzZV9jbnQpXG4tXHRcdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IHNob3VsZF9sb2FkO1xuK1x0XHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gc2hvdWxkX2xvYWQgPyBCUEZfUFJPR19MT0FEX1RZUEVfQVVUT1xuK1x0XHRcdFx0OiBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xMjQyLDEzICsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcbiBcdFx0XHRpZiAoc3Rfb3BzLVx1MDAzZXByb2dzW2ldKSB7XG4gXHRcdFx0XHQvKiBJZiB3ZSBoYWQgZGVjbGFyYXRpdmVseSBzZXQgc3RydWN0X29wcyBjYWxsYmFjaywgd2UgbmVlZCB0b1xuLVx0XHRcdFx0ICogZm9yY2UgaXRzIGF1dG9sb2FkIHRvIGZhbHNlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZVxuLVx0XHRcdFx0ICogYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGUgY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC5cbi1cdFx0XHRcdCAqIElmIHRoaXMgcHJvZ3JhbSBpcyBzdGlsbCByZWZlcmVuY2VkIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsXG4tXHRcdFx0XHQgKiB0aGVuIGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoKSB3aWxsIHVwZGF0ZSBpdHNcbi1cdFx0XHRcdCAqIGF1dG9sb2FkIGFjY29yZGluZ2x5LlxuK1x0XHRcdFx0ICogZm9yY2UgaXRzIGxvYWQgdHlwZSB0byBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsIGJlY2F1c2VcbitcdFx0XHRcdCAqIGl0IGRvZXNuJ3QgaGF2ZSBhIGNoYW5jZSBvZiBzdWNjZWVkaW5nIGZyb20gUE9WIG9mIHRoZVxuK1x0XHRcdFx0ICogY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC4gSWYgdGhpcyBwcm9ncmFtIGlzIHN0aWxsIHJlZmVyZW5jZWRcbitcdFx0XHRcdCAqIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsIHRoZW5cbitcdFx0XHRcdCAqIGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoKSB3aWxsIHVwZGF0ZSBpdHNcbitcdFx0XHRcdCAqIGxvYWQgdHlwZSBhY2NvcmRpbmdseS5cbiBcdFx0XHRcdCAqL1xuLVx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldLVx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XG4rXHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMTI4Nyw3ICsxMjkxLDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRcdCAqIGlmIHVzZXIgcmVwbGFjZWQgaXQgd2l0aCBhbm90aGVyIHByb2dyYW0gb3IgTlVMTFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChzdF9vcHMtXHUwMDNlcHJvZ3NbaV0gXHUwMDI2XHUwMDI2IHN0X29wcy1cdTAwM2Vwcm9nc1tpXSAhPSBwcm9nKVxuLVx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldLVx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XG4rXHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFxuIFx0XHRcdC8qIFVwZGF0ZSB0aGUgdmFsdWUgZnJvbSB0aGUgc2hhZG93IHR5cGUgKi9cbiBcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0gPSBwcm9nO1xuQEAgLTM2MDAsNyArMzYwNCw3IEBAIHN0YXRpYyBib29sIG9ial9uZWVkc192bWxpbnV4X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0fVxuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfcHJvZ3JhbShwcm9nLCBvYmopIHtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuK1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAocHJvZ19uZWVkc192bWxpbnV4X2J0Zihwcm9nKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC02MTk0LDcgKzYxOTgsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9jb3JlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRhcmdfYnRmX3BhdGgpXG4gXHRcdFx0Lyogbm8gbmVlZCB0byBhcHBseSBDTy1SRSByZWxvY2F0aW9uIGlmIHRoZSBwcm9ncmFtIGlzXG4gXHRcdFx0ICogbm90IGdvaW5nIHRvIGJlIGxvYWRlZFxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICghcHJvZy1cdTAwM2VhdXRvbG9hZClcbitcdFx0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0LyogYWRqdXN0IGluc25faWR4IGZyb20gc2VjdGlvbiBmcmFtZSBvZiByZWZlcmVuY2UgdG8gdGhlIGxvY2FsXG5AQCAtNzE1NCw2ICs3MTU4LDUwIEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXNzaWduX2V4Y19jYihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2RlZmluZSBEWU5MT0FEX0RFQ0xfVEFHIFwibG9hZHR5cGU6ZHluYW1pY1wiXG4rXG4rLypcbisgKiBDaGVjayB3aGV0aGVyIGEgQlBGIHByb2dyYW0gaXMgYW5ub3RhdGVkIHdpdGggdGhlIERZTkxPQURfREVDTF9UQUcgQlRGXG4rICogZGVjbCB0YWcsIHJlcXVlc3RpbmcgdGhhdCBpdCBiZSBsb2FkZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdGhlIG9iamVjdCBsb2FkLlxuKyAqXG4rICogUmV0dXJucyAxIGlmIHRoZSB0YWcgaXMgcHJlc2VudCwgMCBpZiBpdCBpcyBub3QsIG5lZ2F0aXZlIGVycm9yIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbit7XG4rXHRpbnQgaSwgbjtcbitcbitcdGlmICghb2JqLVx1MDAzZWJ0ZilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRuID0gYnRmX190eXBlX2NudChvYmotXHUwMDNlYnRmKTtcbitcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG47IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnRhZ190LCAqZm5fdDtcbitcbitcdFx0dGFnX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgaSk7XG4rXHRcdGlmICghYnRmX2lzX2RlY2xfdGFnKHRhZ190KSB8fCBidGZfZGVjbF90YWcodGFnX3QpLVx1MDAzZWNvbXBvbmVudF9pZHggIT0gLTEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChzdHJjbXAoYnRmX19zdHJfYnlfb2Zmc2V0KG9iai1cdTAwM2VidGYsIHRhZ190LVx1MDAzZW5hbWVfb2ZmKSxcbitcdFx0XHQgICBEWU5MT0FEX0RFQ0xfVEFHKSAhPSAwKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBhIGRlY2wgdGFnJ3MgdHlwZSBmaWVsZCBwb2ludHMgYXQgdGhlIGVudGl0eSBpdCBkZWNvcmF0ZXMgKi9cbitcdFx0Zm5fdCA9IGJ0Zl9fdHlwZV9ieV9pZChvYmotXHUwMDNlYnRmLCB0YWdfdC1cdTAwM2V0eXBlKTtcbitcdFx0aWYgKCFidGZfaXNfZnVuYyhmbl90KSB8fCBidGZfZnVuY19saW5rYWdlKGZuX3QpICE9IEJURl9GVU5DX0dMT0JBTCkge1xuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IFwiIERZTkxPQURfREVDTF9UQUdcbitcdFx0XHRcdFwiIGRlY2wgdGFnIG11c3QgYmUgYXBwbGllZCB0byBhIGdsb2JhbCBmdW5jdGlvblxcblwiLFxuK1x0XHRcdFx0cHJvZy1cdTAwM2VuYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotXHUwMDNlYnRmLCBmbl90LVx1MDAzZW5hbWVfb2ZmKSwgcHJvZy1cdTAwM2VuYW1lKSAhPSAwKVxuK1x0XHRcdGNvbnRpbnVlOyAgIC8qIHRhZyBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHByb2dyYW0gKi9cbitcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB7XG4gXHRlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlO1xuIFx0Y29uc3QgY2hhciAqY3R4X25hbWU7XG5AQCAtNzUzMCw3ICs3NTc4LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRcbiBcdFx0ICovXG4gXHRcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuK1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRlcnIgPSBicGZfb2JqZWN0X19yZWxvY2F0ZV9jYWxscyhvYmosIHByb2cpO1xuQEAgLTc1NjYsNyArNzYxNCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0XG4gXHRcdHByb2cgPSBcdTAwMjZvYmotXHUwMDNlcHJvZ3JhbXNbaV07XG4gXHRcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuK1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBQcm9jZXNzIGRhdGEgcmVsb3MgZm9yIG1haW4gcHJvZ3JhbXMgKi9cbkBAIC04MDU1LDcgKzgxMDMsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfbG9hZF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZ1xuIFx0XHRcdGxvZ19idWYgPSBwcm9nLVx1MDAzZWxvZ19idWY7XG4gXHRcdFx0bG9nX2J1Zl9zaXplID0gcHJvZy1cdTAwM2Vsb2dfc2l6ZTtcbiBcdFx0XHRvd25fbG9nX2J1ZiA9IGZhbHNlO1xuLVx0XHR9IGVsc2UgaWYgKG9iai1cdTAwM2Vsb2dfYnVmKSB7XG4rXHRcdH0gZWxzZSBpZiAob2JqLVx1MDAzZWxvZ19idWYgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKSB7XG4gXHRcdFx0bG9nX2J1ZiA9IG9iai1cdTAwM2Vsb2dfYnVmO1xuIFx0XHRcdGxvZ19idWZfc2l6ZSA9IG9iai1cdTAwM2Vsb2dfc2l6ZTtcbiBcdFx0XHRvd25fbG9nX2J1ZiA9IGZhbHNlO1xuQEAgLTgzOTgsMTAgKzg0NDYsMTQgQEAgYnBmX29iamVjdF9fbG9hZF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgbG9nX2xldmVsKVxuIFx0XHRwcm9nID0gXHUwMDI2b2JqLVx1MDAzZXByb2dyYW1zW2ldO1xuIFx0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJvZy1cdTAwM2VhdXRvbG9hZCkge1xuLVx0XHRcdHByX2RlYnVnKFwicHJvZyAnJXMnOiBza2lwcGVkIGxvYWRpbmdcXG5cIiwgcHJvZy1cdTAwM2VuYW1lKTtcbitcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKSB7XG4rXHRcdFx0cHJfZGVidWcoXCJwcm9nICclcyc6IHNraXBwZWQgbG9hZGluZywgbG9hZCB0eXBlIGlzICVzXFxuXCIsXG4rXHRcdFx0XHQgcHJvZy1cdTAwM2VuYW1lLFxuK1x0XHRcdFx0IHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDID9cbitcdFx0XHRcdCBcImR5bmFtaWNcIiA6IFwiZGlzYWJsZWRcIik7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbitcbiBcdFx0cHJvZy1cdTAwM2Vsb2dfbGV2ZWwgfD0gbG9nX2xldmVsO1xuIFxuIFx0XHRpZiAob2JqLVx1MDAzZWdlbl9sb2FkZXIpXG5AQCAtODQ2NCw2ICs4NTE2LDIyIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X3Byb2dzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0XG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IHByb2dfaGFzX2R5bmxvYWRfdGFnKG9iaiwgcHJvZyk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0aWYgKGVyciBcdTAwM2UgMCkge1xuK1x0XHRcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gYXBwbHkgXCIgRFlOTE9BRF9ERUNMX1RBR1xuK1x0XHRcdFx0XHRcIiBkZWNsIHRhZzogJXNcXG5cIixcbitcdFx0XHRcdFx0cHJvZy1cdTAwM2VuYW1lLCBlcnJzdHIoZXJyKSk7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdH1cbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTA3NSwxNSArOTE0MywyMiBAQCBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2NsZWFudXBfYnRmKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRvYmotXHUwMDNlYnRmX21vZHVsZXNfbG9hZGVkID0gZmFsc2U7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZXMpO1xuIFxuLVx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbi1cdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuLVx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbitcdC8qIFRoZSBidGZfdm1saW51eCBkYXRhIGlzIG5lZWRlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zLFxuK1x0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxuK1x0ICovXG4rXHRpZiAoIW9iai1cdTAwM2VoYXNfZHlubG9hZF9wcm9ncykge1xuK1x0XHRidGZfX2ZyZWUob2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbitcdFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX29iamVjdF9wb3N0X2xvYWRfY2xlYW51cChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbi1cdC8qIGNsZWFuIHVwIGZkX2FycmF5ICovXG4tXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlZmRfYXJyYXkpO1xuK1x0LyogVGhlIGZkIGFycmF5IGlzIG5lZWRlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zLFxuK1x0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxuK1x0ICovXG4rXHRpZiAoIW9iai1cdTAwM2VoYXNfZHlubG9hZF9wcm9ncyB8fCAhb2JqLVx1MDAzZWZkX2FycmF5X2NudClcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWZkX2FycmF5KTtcbiBcbiBcdC8qIGNsZWFuIHVwIEJURiAqL1xuIFx0YnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopO1xuQEAgLTk2NzcsNiArOTc1Miw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0Y2xvc2Uob2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcbiBcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VqdW1wdGFibGVfbWFwcyk7XG4gXG4rXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlZmRfYXJyYXkpO1xuK1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbkBAIC05Nzk5LDE2ICs5ODc2LDE1IEBAIGNvbnN0IGNoYXIgKmJwZl9wcm9ncmFtX19zZWN0aW9uX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuIFxuIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiB7XG4tXHRyZXR1cm4gcHJvZy1cdTAwM2VhdXRvbG9hZDtcbitcdHJldHVybiBwcm9nLVx1MDAzZWxvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTztcbiB9XG4gXG4taW50IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBib29sIGF1dG9sb2FkKVxuK2ludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpXG4ge1xuLVx0aWYgKHByb2ctXHUwMDNlb2JqLVx1MDAzZXN0YXRlIFx1MDAzZT0gT0JKX0xPQURFRClcbitcdGlmIChhdXRvbG9hZCAhPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBcdTAwMjZcdTAwMjYgYXV0b2xvYWQgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiBcbi1cdHByb2ctXHUwMDNlYXV0b2xvYWQgPSBhdXRvbG9hZDtcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIGF1dG9sb2FkKTtcbiB9XG4gXG4gYm9vbCBicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG5AQCAtMTUxMTEsNyArMTUxODcsNyBAQCBpbnQgYnBmX29iamVjdF9fYXR0YWNoX3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKVxuIFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSAqcHJvZ19za2VsLVx1MDAzZXByb2c7XG4gXHRcdHN0cnVjdCBicGZfbGluayAqKmxpbmsgPSBwcm9nX3NrZWwtXHUwMDNlbGluaztcbiBcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkIHx8ICFwcm9nLVx1MDAzZWF1dG9hdHRhY2gpXG4rXHRcdGlmIChwcm9nLVx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyB8fCAhcHJvZy1cdTAwM2VhdXRvYXR0YWNoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBhdXRvLWF0dGFjaGluZyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIHByb2dyYW0gKi9cbkBAIC0xNTIyMSwzICsxNTI5NywxMzYgQEAgdm9pZCBicGZfb2JqZWN0X19kZXN0cm95X3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKVxuIFx0ZnJlZShzLVx1MDAzZXByb2dzKTtcbiBcdGZyZWUocyk7XG4gfVxuK1xuK3N0YXRpYyBpbnQgYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4re1xuK1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbitcdGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lO1xuK1xuK1x0b2JqID0gcHJvZy1cdTAwM2VvYmo7XG4rXHRpZiAoIW9iailcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4rXG4rXHQvKiBEeW5hbWljYWxseS1sb2FkZWQgcHJvZ3JhbXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGdlbl9sb2FkZXIuXG4rXHQgKiBUaGlzIGlzIGJlY2F1c2UgYnBmX29iamVjdF9sb2FkX3Byb2cgaXMgbm90IGNhbGxlZCBmb3JcbitcdCAqIGR5bmFtaWNsb2FkIHByb2dyYW1zLCBzbyBkeW5hbWljbG9hZCBwcm9ncmFtcyBhcmUgbm90IHZpc2libGVcbitcdCAqIHRvIGdlbl9sb2FkZXIuIEZvciB0aGlzIHJlYXNvbiwgcHJldmVudCBjYWxsaW5nXG4rXHQgKiBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkIHdoZW4gZ2VuX2xvYWRlciB3YXMgdXNlZCB0b1xuK1x0ICogZ2VuZXJhdGUgYSBCUEYgb2JqZWN0IGxvYWRlci5cbitcdCAqIEEgZ2VuX2xvYWRlciBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyBjYWxsZWQgZm9yIHByb2dyYW1zIHdpdGhcbitcdCAqIGxvYWQgdHlwZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBhbmQgZGVmaW5lcyBpdHMgb3duIG1vZGVsIGZvclxuK1x0ICogbG9hZGluZyBCUEYgcHJvZ3JhbXMuXG4rXHQgKi9cbitcdGlmIChvYmotXHUwMDNlZ2VuX2xvYWRlcilcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApO1xuK1xuK1x0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKVxuK1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcbitcdGF0dGFjaF9uYW1lID0gc3RyY2hyKHByb2ctXHUwMDNlc2VjX25hbWUsICcvJyk7XG4rXHRpZiAoIWF0dGFjaF9uYW1lIHx8IHN0cmNocihhdHRhY2hfbmFtZSwgJzonKSkge1xuK1x0XHQvKiBPbmx5IHJlamVjdCBwcm9ncmFtcyB0aGF0IHJlcXVpcmUgQlRGLWJhc2VkIGF0dGFjaCB0YXJnZXRcbitcdFx0ICogcmVzb2x1dGlvbiAoaW5kaWNhdGVkIGJ5IHRoZSBTRUNfQVRUQUNIX0JURiBmbGFnKS4gU3VjaFxuK1x0XHQgKiBwcm9ncmFtcyBuZWVkIHRoZSBzZWN0aW9uIG5hbWUgcGFyc2VkIGZvciB0aGUgYXR0YWNoIHRhcmdldFxuK1x0XHQgKiBmdW5jdGlvbiBuYW1lIChhZnRlciAnLycpIGFuZCBvcHRpb25hbGx5IHRoZSBtb2R1bGUgbmFtZVxuK1x0XHQgKiAoYmVmb3JlICc6JykgZm9yIGxpYmJwZl9maW5kX2F0dGFjaF9idGZfaWQuXG4rXHRcdCAqXG4rXHRcdCAqIFByb2dyYW1zIGxpa2UgU0VDKFwiY2xhc3NpZmllclwiKSwgU0VDKFwic29ja2V0XCIpLCBldGMuIGRvXG4rXHRcdCAqIG5vdCByZXF1aXJlIEJURiBhdHRhY2ggcmVzb2x1dGlvbiBhbmQgY2FuIHNhZmVseSB1c2VcbitcdFx0ICogZHluYW1pYyBsb2FkaW5nIGRlc3BpdGUgaGF2aW5nIG5vICcvJyBpbiB0aGVpciBzZWN0aW9uXG4rXHRcdCAqIG5hbWUuIFRoZSBCVEYgZ3VhcmQgaW4gbGliYnBmX3ByZXBhcmVfcHJvZ19sb2FkIChjaGVja2luZ1xuK1x0XHQgKiBTRUNfQVRUQUNIX0JURikgaXMgdGhlIGF1dGhvcml0YXRpdmUgY2hlY2s7IHRoaXMgaXMgYW5cbitcdFx0ICogZWFybHktcmVqZWN0IGZvciBwcm9ncmFtcyB0aGF0IHdvdWxkIGZhaWwgdGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRsb25nIGZsYWdzID0gcHJvZy1cdTAwM2VzZWNfZGVmID9cbitcdFx0XHQobG9uZylwcm9nLVx1MDAzZXNlY19kZWYtXHUwMDNlY29va2llIDogU0VDX0FUVEFDSF9CVEY7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IFNFQ19BVFRBQ0hfQlRGKSBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXR0YWNoX2J0Zl9pZClcbitcdFx0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcdH1cbitcbitcdG9iai1cdTAwM2VoYXNfZHlubG9hZF9wcm9ncyA9IHRydWU7XG4rXHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDO1xuK1x0cHJvZy1cdTAwM2VhdXRvYXR0YWNoID0gZmFsc2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgdHlwZSlcbit7XG4rXHRpZiAoIXByb2cpXG4rXHRcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNlb2JqLVx1MDAzZXN0YXRlIFx1MDAzZT0gT0JKX0xPQURFRClcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM6XG4rXHRcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkKHByb2cpO1xuK1x0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzpcbitcdGNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOlxuK1x0XHQvKlxuK1x0XHQgKiBMZWF2aW5nIHRoZSBkeW5hbWljIHN0YXRlOiBzZXRfZHluYW1pY2xvYWQoKSBjbGVhcmVkXG4rXHRcdCAqIGF1dG9hdHRhY2ggYmVjYXVzZSBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMgYXJlIGF0dGFjaGVkXG4rXHRcdCAqIGV4cGxpY2l0bHkuIFJlc3RvcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQgbG9hZCB0eXBlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxuK1x0XHRcdHByb2ctXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XG4rXHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gdHlwZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBicGZfcHJvZ3JhbV9fbG9hZF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbit7XG4rXHRyZXR1cm4gcHJvZy1cdTAwM2Vsb2FkX3R5cGU7XG4rfVxuK1xuKy8qXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBicGZfb2JqZWN0X19sb2FkX3Byb2dzLlxuKyAqIER5bmFtaWNhbGx5LWxvYWRlZCBwcm9ncmFtIGRhdGEgaXMgaW5pdGlhbGl6ZWQgb24gb2JqZWN0IGxvYWQuXG4rICogUG9zdC1sb2FkIGluaXRpYWxpemF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4rICovXG4raW50XG4rYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBpbnQgZXh0cmFfbG9nX2xldmVsKVxuK3tcbitcdGludCBlcnI7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1xuK1x0b2JqID0gcHJvZy1cdTAwM2VvYmo7XG4rXHRpZiAoIW9iaiB8fCBvYmotXHUwMDNlc3RhdGUgXHUwMDNjIE9CSl9MT0FERUQpXG4rXHRcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xuK1xuK1x0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpIHx8IHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxuK1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcbitcdHByb2ctXHUwMDNlbG9nX2xldmVsIHw9IGV4dHJhX2xvZ19sZXZlbDtcbitcbitcdGVyciA9IGJwZl9vYmplY3RfbG9hZF9wcm9nKG9iaiwgcHJvZywgcHJvZy1cdTAwM2VpbnNucywgcHJvZy1cdTAwM2VpbnNuc19jbnQsXG4rXHRcdFx0XHQgICBvYmotXHUwMDNlbGljZW5zZSwgb2JqLVx1MDAzZWtlcm5fdmVyc2lvbiwgXHUwMDI2cHJvZy1cdTAwM2VmZCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IGZhaWxlZCB0byBkeW5hbWljYWxseSBsb2FkOiAlZFxcblwiLCBwcm9nLVx1MDAzZW5hbWUsIGVycik7XG4rXHRcdHByb2ctXHUwMDNlbG9nX2xldmVsIFx1MDAyNj0gfmV4dHJhX2xvZ19sZXZlbDtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHByb2ctXHUwMDNlbG9nX2xldmVsIFx1MDAyNj0gfmV4dHJhX2xvZ19sZXZlbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmICghcHJvZyB8fCBwcm9nLVx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQylcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4rXG4rXHQvKiBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGJ1dCByZXRhaW4gdGhlIHByb2dyYW0ncyBkYXRhIHRvXG4rXHQgKiBzdXBwb3J0IHJlbG9hZGluZyB0aGUgcHJvZ3JhbSBpZiBpdCBpcyByZXF1aXJlZCBhZ2Fpbi5cbitcdCAqL1xuK1x0ZXJyID0gemNsb3NlKHByb2ctXHUwMDNlZmQpO1xuK1x0cmV0dXJuIGVyciA/IGxpYmJwZl9lcnIoLWVycm5vKSA6IDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi5hNTYwNjhmMGYxMTIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuQEAgLTM1Niw2ICszNTYsMTkgQEAgTElCQlBGX0FQSSBpbnQgbGliYnBmX2F0dGFjaF90eXBlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSxcbiBMSUJCUEZfQVBJIGludCBsaWJicGZfZmluZF92bWxpbnV4X2J0Zl9pZChjb25zdCBjaGFyICpuYW1lLFxuIFx0XHRcdFx0XHQgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKTtcbiBcbisvKlxuKyAqIFRoZSBwcm9ncmFtIGxvYWQgdHlwZTpcbisgKlxuKyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOiB0aGUgcHJvZ3JhbSBpcyBub3QgbG9hZGVkLlxuKyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE86IHRoZSBwcm9ncmFtIGlzIGF1dG9sb2FkZWQgd2hlbiB0aGUgYnBmX29iamVjdCBpcyBsb2FkZWQuXG4rICogLSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzogdGhlIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBhdHRhY2hlZCBkeW5hbWljYWxseS5cbisgKi9cbitlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB7XG4rXHRCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQgPSAwLFxuK1x0QlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4rXHRCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcbit9O1xuK1xuIC8qIEFjY2Vzc29ycyBvZiBicGZfcHJvZ3JhbSAqL1xuIHN0cnVjdCBicGZfcHJvZ3JhbTtcbiBcbkBAIC0zNzYsNyArMzg5LDE4IEBAIExJQkJQRl9BUEkgdm9pZCBicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIExJQkJQRl9BUEkgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIGNvbnN0IGNoYXIgKmJwZl9wcm9ncmFtX19zZWN0aW9uX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4tTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpO1xuKy8qKlxuKyAqIEBicmllZiAqKmJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSoqIGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHNcbisgKiBjb21wYXRpYmlsaXR5OyAqKmJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkqKiBpcyB0aGUgcHJlZmVycmVkIEFQSS5cbisgKiBUaGUgZW51bSdzIG51bWJlcmluZyAoRElTQUJMRUQ9MCwgQVVUTz0xLCBEWU5BTUlDPTIpIG1hdGNoZXMgdGhlIHByZXZpb3VzXG4rICogYm9vbCBzZW1hbnRpY3MgKGZhbHNlPTAsIHRydWU9MSksIHNvIGV4aXN0aW5nIGJvb2wgY2FsbGVycyBrZWVwIGNvbXBpbGluZ1xuKyAqIGFuZCBiZWhhdmluZyB1bmNoYW5nZWQuIE9ubHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kXG4rICogQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGFyZSBhY2NlcHRlZCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWxcbisgKiBhdXRvbG9hZCBvbi9vZmYgbWVhbmluZzsgdXNlIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkgdG8gc2V0XG4rICogQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMuXG4rICovXG4rTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4rXHRcdFx0XHRcdCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBhdXRvbG9hZCk7XG4gTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4gTElCQlBGX0FQSSB2b2lkIGJwZl9wcm9ncmFtX19zZXRfYXV0b2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2F0dGFjaCk7XG4gXG5AQCAtMjA3OCw2ICsyMTAyLDEyIEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl91bnJlZ2lzdGVyX3Byb2dfaGFuZGxlcihpbnQgaGFuZGxlcl9pZCk7XG4gICovXG4gTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2Nsb25lKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3Qgc3RydWN0IGJwZl9wcm9nX2xvYWRfb3B0cyAqb3B0cyk7XG4gXG4rTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuK1x0XHRcdFx0XHQgIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGxvYWR0eXBlKTtcbitMSUJCUEZfQVBJIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpO1xuK0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbitcbiAjaWZkZWYgX19jcGx1c3BsdXNcbiB9IC8qIGV4dGVybiBcIkNcIiAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuaW5kZXggMDhhYjJlYTg4MWZiNi4uNzQzMTJjOTVkMzI4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5AQCAtNDYwLDYgKzQ2MCwxMCBAQCBMSUJCUEZfMS44LjAge1xuIFx0Z2xvYmFsOlxuIFx0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XG4gXHRcdGJwZl9wcm9ncmFtX19jbG9uZTtcbitcdFx0YnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHk7XG4rXHRcdGJwZl9wcm9ncmFtX19sb2FkX3R5cGU7XG4rXHRcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlO1xuK1x0XHRicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5O1xuIFx0XHRidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjtcbiBcdFx0YnRmX19uZXdfZW1wdHlfb3B0cztcbiB9IExJQkJQRl8xLjcuMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5OWM0MzAzNGZmOTJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmNcbkBAIC0wLDAgKzEsMjIyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcInRlc3RfZHluYW1pY2xvYWQuc2tlbC5oXCJcbitcbisvKiBwcm9nNCBpcyB0YWdnZWQgX19sb2FkX2R5bmFtaWMgaW4gdGhlIHNvdXJjZSBpbnN0ZWFkIG9mIGJlaW5nIHNldFxuKyAqIGltcGVyYXRpdmVseTsgdmVyaWZ5IHRoYXQgYW4gZXhwbGljaXQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSBjYWxsXG4rICogYmVmb3JlIGxvYWQgb3ZlcnJpZGVzIHRoZSB0YWcncyBkZWNsYXJhdGl2ZSBkZWZhdWx0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGR5bmFtaWNsb2FkX3ZlcmlmeV9vdmVycmlkZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSB0ZXN0X2R5bmFtaWNsb2FkX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5cIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2V0X2xvYWRfdHlwZV9kaXNhYmxlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVELFxuK1x0XHQgICAgICAgXCJwcm9nNF9sb2FkX3R5cGVfb3ZlcnJpZGRlblwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Lyoga2VlcCB0aGUgb3RoZXIgZHluYW1pYy1sb2FkLW9ubHkgcHJvZ3JhbXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhpcyBsb2FkICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbitcbitcdGVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2xvYWQoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2tlbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBwcm9nNCB3YXMgbmV2ZXIgbG9hZGVkLCBzbyBpdCBjYW5ub3QgYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGVpdGhlciAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCwgMCk7XG4rXHRBU1NFUlRfRVJSKGVyciwgXCJsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX292ZXJyaWRlXCIpO1xuK1xuK2NsZWFudXA6XG4rXHR0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3RfZHluYW1pY2xvYWQodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXHRzdHJ1Y3QgdGVzdF9keW5hbWljbG9hZCAqc2tlbDtcbitcdGludCBlcnI7XG4rXG4rXHRza2VsID0gdGVzdF9keW5hbWljbG9hZF9fb3BlbigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiB0aGUgX19sb2FkX2R5bmFtaWMgdGFnIGFsb25lLCB3aXRoIG5vIGltcGVyYXRpdmUgY2FsbCwgbXVzdCBzZXRcbitcdCAqIHByb2c0J3MgbG9hZCB0eXBlIGJlZm9yZSBpdCBpcyBldmVyIHRvdWNoZWQgYmVsb3dcbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4rXHRcdCAgICAgICBcInByb2c0X3RhZ19sb2FkX3R5cGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGlmICghQVNTRVJUX0ZBTFNFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQpLCBcInByb2c0X2F1dG9hdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIGRvbid0IGxvYWQgcHJvZzEgKi9cbitcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4rXG4rXHQvKiBwcm9nMiBpcyBhdXRvbG9hZCAqL1xuK1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMiwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pO1xuK1xuK1x0LyogcHJvZzMgaXMgZHluYW1pY2FsbHkgbG9hZGVkICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4rXG4rXHRlcnIgPSB0ZXN0X2R5bmFtaWNsb2FkX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gdGVzdF9keW5hbWljbG9hZF9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiB0cmlnZ2VyIHRoZSBCUEYgcHJvZ3JhbXMgKi9cbitcdHVzbGVlcCgxKTtcbitcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMV9jYWxsZWQsIFwicHJvZzFfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkLCBcInByb2cyX2NhbGxlZFwiKTtcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwicHJvZzNfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2c0X2NhbGxlZCwgXCJwcm9nNF9jYWxsZWRcIik7XG4rXG4rXHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcImxvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHByb2cxIGlzIGRpc2FibGVkIGZvciBsb2FkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEpO1xuK1x0aWYgKCFBU1NFUlRfRVJSKGVyciwgXCJ1bmxvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHByb2cyIGlzIGF1dG9sb2FkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2cyLCAwKTtcbitcdGlmICghQVNTRVJUX0VSUihlcnIsIFwibG9hZF9keW5hbWljYWxseV9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cbitcdGVyciA9IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMik7XG4rXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcInVubG9hZF9keW5hbWljYWxseV9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCA9IGZhbHNlO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4rXG4rXHR1c2xlZXAoMSk7XG4rXG4rXHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzFfY2FsbGVkLCBcInByb2cxX2NhbGxlZFwiKTtcbitcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCwgXCJwcm9nMl9jYWxsZWRcIik7XG4rXHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcInByb2czX2NhbGxlZFwiKTtcbitcbitcdC8qIGxvYWQgcHJvZzMgKi9cbitcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImxvYWRfZHluYW1pY2FsbHlcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIGF0dGFjaCBwcm9nMyAqL1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHVzbGVlcCgxKTtcbitcbitcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcInByb2czX2NhbGxlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24ndCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4rXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsaW5rX2Rlc3Ryb3lcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHJlc2V0IHRoZSBjYWxsIGZsYWdzIGFmdGVyIGRldGFjaCAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcbitcbitcdHVzbGVlcCgxKTtcbitcbitcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCwgXCJwcm9nMl9jYWxsZWRcIik7XG4rXHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcInByb2czX2NhbGxlZFwiKTtcbitcbitcdC8qIHVubG9hZCBwcm9nMyAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ1bmxvYWRfZHluYW1pY2FsbHlcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHJlbG9hZCBwcm9nMyAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwibG9hZF9keW5hbWljYWxseV9yZWxvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHJlYXR0YWNoIHByb2czICovXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcInJlYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHR1c2xlZXAoMSk7XG4rXG4rXHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCJwcm9nM19jYWxsZWRfcmVhdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95IGRvZXNuJ3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqL1xuK1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwibGlua19kZXN0cm95X3JlYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiB2ZXJpZnkgcmVndWxhciB1bmxvYWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtLFxuK1x0ICogdW5sb2FkIHByb2czIGFzIGEgcmVndWxhciBwcm9ncmFtXG4rXHQgKi9cbitcdGJwZl9wcm9ncmFtX191bmxvYWQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyk7XG4rXG4rXHQvKiByZXNldCB0aGUgY2FsbCBmbGFncyBhZnRlciB1bmxvYWQgKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCA9IGZhbHNlO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4rXG4rXHR1c2xlZXAoMSk7XG4rXG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwicHJvZzJfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCJwcm9nM19jYWxsZWRcIik7XG4rXG4rXHQvKiByZWxvYWRpbmcgcHJvZzMgbXVzdCBmYWlsIGFzIGl0IHdhcyB1bmxvYWRlZCBhcyBhIHJlZ3VsYXIgcHJvZ3JhbSAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgMCk7XG4rXHRBU1NFUlRfRVJSKGVyciwgXCJsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX3JlZ3VsYXJfdW5sb2FkXCIpO1xuK1xuK1x0LyogcnVuIHByb2c0IChkZWNsYXJhdGl2ZWx5IHRhZ2dlZCkgdGhyb3VnaCB0aGUgc2FtZSBkeW5hbWljXG4rXHQgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzNcbitcdCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicHJvZzRfbG9hZF9keW5hbWljYWxseVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJwcm9nNF9hdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHVzbGVlcCgxKTtcbitcbitcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzRfY2FsbGVkLCBcInByb2c0X2NhbGxlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicHJvZzRfbGlua19kZXN0cm95XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJwcm9nNF91bmxvYWRfZHluYW1pY2FsbHlcIik7XG4rXG4rXHR0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0Lyogc2VwYXJhdGUgc2NlbmFyaW86IGltcGVyYXRpdmUgb3ZlcnJpZGUgb2YgdGhlIGRlY2xhcmF0aXZlIHRhZyAqL1xuK1x0ZHluYW1pY2xvYWRfdmVyaWZ5X292ZXJyaWRlKCk7XG4rXHRyZXR1cm47XG4rXG4rY2xlYW51cDpcbitcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mYzkxZjY2NjZjNTA2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuY1xuQEAgLTAsMCArMSwxNjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFwidGVzdF9sb2FkX3R5cGUuc2tlbC5oXCJcbitcbit2b2lkIHRlc3RfbG9hZF90eXBlKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1x0c3RydWN0IHRlc3RfbG9hZF90eXBlICpza2VsO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBkb24ndCBsb2FkIHByb2cxICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1xuK1x0LyogbG9hZCBhbmQgYXR0YWNoIHByb2cyICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2cyLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XG4rXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCJwcm9nMl9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfZHluYW1pY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4rXHRcdCAgICAgICBcInByb2czX2xvYWRfdHlwZVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpIGlzIGEgdGhpbiBmb3J3YXJkZXIgdG8gc2V0X2xvYWRfdHlwZSgpLFxuK1x0ICogcmVzdHJpY3RlZCB0byBBVVRPL0RJU0FCTEVEIHRvIHByZXNlcnZlIGl0cyBvcmlnaW5hbCBib29sIG9uL29mZlxuK1x0ICogbWVhbmluZzsgaXQgZG9lcyBjaGFuZ2UgdGhlIGxvYWQgdHlwZSBvZiBhIHByb2dyYW0gdGhhdCBpc24ndFxuK1x0ICogY3VycmVudGx5IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLlxuK1x0ICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIGZhbHNlKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXRfYXV0b2xvYWRfZmFsc2VcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX2FmdGVyX2ZhbHNlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIHRydWUpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9hdXRvbG9hZF90cnVlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX2FmdGVyX3RydWVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHNldF9hdXRvbG9hZCgpIG9ubHkgYWNjZXB0cyBBVVRPL0RJU0FCTEVELCB0byBwcmVzZXJ2ZSBpdHMgb3JpZ2luYWxcbitcdCAqIG9uL29mZiBtZWFuaW5nOyBEWU5BTUlDIG11c3QgZ28gdGhyb3VnaCBzZXRfbG9hZF90eXBlKClcbitcdCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4rXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcInNldF9hdXRvbG9hZF9keW5hbWljX3JlamVjdGVkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX3VuY2hhbmdlZF9hZnRlcl9yZWplY3RlZF9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX2FmdGVyX2R5bmFtaWNfZW51bVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogbGVhdmluZyBEWU5BTUlDIGZvciBBVVRPIG11c3QgcmVzdG9yZSBhdXRvYXR0YWNoIChyZWdyZXNzaW9uIHRlc3QgZm9yXG4rXHQgKiB0aGUgYXV0b2F0dGFjaCByZXNpZHVlIGJ1Zzogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJzIGF1dG9hdHRhY2gsIGFuZFxuK1x0ICogbm90aGluZyB1c2VkIHRvIHJlc3RvcmUgaXQgb24gZXhpdClcbitcdCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfYXV0b1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4rXHRcdCAgICAgICBcInByb2czX2xvYWRfdHlwZV9hdXRvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBcInByb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHRoZSBzYW1lIHJlc2lkdWUgY2FuIHJlbGF5IHRocm91Z2ggRElTQUJMRUQgYW5kIHJlc3VyZmFjZSBvbiBhIGxhdGVyXG4rXHQgKiBESVNBQkxFRCAtXHUwMDNlIEFVVE8gdHJhbnNpdGlvbiwgc28gdGhlIGZpeCBtdXN0IGNvdmVyIGJvdGggZXhpdCBlZGdlc1xuK1x0ICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2V0X2xvYWRfdHlwZV9keW5hbWljX2FnYWluXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfZGlzYWJsZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXRfbG9hZF90eXBlX2F1dG9fdmlhX2Rpc2FibGVkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLFxuK1x0XHRcdCBcInByb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRfdmlhX2Rpc2FibGVkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBhbiBvdXQtb2YtcmFuZ2UgbG9hZCB0eXBlIGlzIHJlamVjdGVkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCAoZW51bSBicGZfcHJvZ19sb2FkX3R5cGUpOTk5KTtcbitcdGlmICghQVNTRVJUX0VSUihlcnIsIFwic2V0X2xvYWRfdHlwZV9pbnZhbGlkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBjaGFuZ2UgdGhlIHR5cGUgYmFjayB0byBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRlc3QgKi9cbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXRfbG9hZF90eXBlX2R5bmFtaWNfZmluYWxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxuK1x0XHQgICAgICAgXCJwcm9nM19sb2FkX3R5cGVfZmluYWxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IHRlc3RfbG9hZF90eXBlX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCJwcm9nMl9hdXRvYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIUFTU0VSVF9GQUxTRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKSwgXCJwcm9nM19hdXRvYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBsb2FkZWQgcHJvZ3JhbSB0eXBlIGNhbm5vdCBiZSBjaGFuZ2VkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1x0QVNTRVJUX0VSUihlcnIsIFwic2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkXCIpO1xuK1xuK1x0ZXJyID0gdGVzdF9sb2FkX3R5cGVfX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dXNsZWVwKDEpO1xuK1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cxX2NhbGxlZCwgXCJwcm9nMV9jYWxsZWRcIik7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwicHJvZzJfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCJwcm9nM19jYWxsZWRcIik7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czLCAwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb2FkX2R5bmFtaWNhbGx5XzFcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImxvYWRfZHluYW1pY2FsbHlfMlwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogYXR0YWNoIHByb2czICovXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImF0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dXNsZWVwKDEpO1xuK1xuK1x0aWYgKCFBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwicHJvZzNfY2FsbGVkX2FnYWluXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBkZXRhY2ggcHJvZzMgYXMgdGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3kgZG9lc24ndCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4rXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwibGlua19kZXN0cm95XCIpO1xuK1xuK2NsZWFudXA6XG4rXHR0ZXN0X2xvYWRfdHlwZV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjVhNWNiODk4MDMxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9keW5hbWljbG9hZC5jXG5AQCAtMCwwICsxLDQwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbitcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xuK2Jvb2wgcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4rYm9vbCBwcm9nM19jYWxsZWQgPSBmYWxzZTtcbitib29sIHByb2c0X2NhbGxlZCA9IGZhbHNlO1xuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitpbnQgcHJvZzEoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHByb2cxX2NhbGxlZCA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBwcm9nMihjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cHJvZzJfY2FsbGVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4raW50IHByb2czKGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRwcm9nM19jYWxsZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2xvYWRfZHluYW1pY1xuK2ludCBwcm9nNChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cHJvZzRfY2FsbGVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9sb2FkX3R5cGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkOWI4MTY5MWQ3YWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jXG5AQCAtMCwwICsxLDMxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbitcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xuK2Jvb2wgcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4rYm9vbCBwcm9nM19jYWxsZWQgPSBmYWxzZTtcbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4raW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitpbnQgcHJvZzIoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHByb2cyX2NhbGxlZCA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBwcm9nMyhjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cHJvZzNfY2FsbGVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToyMTozOC42MDI1MDM4NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk3MTY5MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0byBldmFsdWF0ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHdoZXRoZXIgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwgY29kZSB0aGF0IHN5emthbGxlciB3b3VsZCB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIHJlbGF0ZWQgbWFwIGFuZCB0ZXN0IGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBuby1nbyBmb3IgZnV6emluZywgc2luY2UgaXQncyBhbGwgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSDigJMgYW5kIHNwZWNpZmljYWxseSB0aGUgbGliYnBmIHVzZXItc3BhY2UgbGlicmFyeS5cblxuVGhlIHByb21wdCBleHBsaWNpdGx5IHN0YXRlcyB3aGF0IGNvbnN0aXR1dGVzIGNoYW5nZXMgdGhhdCAqd291bGRuJ3QqIHdhcnJhbnQgZnV6emluZywgYW5kIHRoaXMgc2VlbXMgdG8gYWxpZ24uIEl0J3MgdXNlci1zcGFjZSBjb2RlOyBzeXprYWxsZXIncyBwcmltYXJ5IGZvY3VzIGlzIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgc3lzY2FsbCBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgdXNlci1zcGFjZSBjb2RlIGlzbid0IHNvbWVob3cgaW5mbHVlbmNpbmcga2VybmVsIGV4ZWN1dGlvbiBkaXJlY3RseSAoYmV5b25kIG5vcm1hbCBzeXNjYWxsLWJhc2VkIGludGVyYWN0aW9uKSwgYnV0IEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGluaGVyZW50bHkgdGhhdCB3b3VsZC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IGRvZXMgdGhpcyBjaGFuZ2UgcG90ZW50aWFsbHkgKmV4cG9zZSogbmV3IGtlcm5lbCBidWdzIHZpYSBhbiB1cGRhdGVkIGxpYnJhcnkgb3Igc3lzY2FsbCwgb3IgZG9lcyB0aGUgY2hhbmdlZCBsaWJyYXJ5IGRvIHNvbWV0aGluZyB0aGF0J3Mgb25seSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCwgb3Igc29tZXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZXhjbHVkZWQ/IE5vLCBmcm9tIHRoaXMgYW5hbHlzaXMsIGl0IGlzIGFsbCBgdG9vbHMvYC4gTGliYnBmICp1c2VzKiBzeXNjYWxscywgc3VyZSwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgaXMganVzdCBtb2RpZnlpbmcgdGhlIHVzZXItc3BhY2Ugc2lkZS4gTXkgY29uY2x1c2lvbiBpcyB0aGF0IGV2ZW4gaWYgdGhlIG5ldyBjb2RlIGNvdWxkIGNhdXNlIGtlcm5lbCBpc3N1ZXMsIGl0IHdpbGwgbm90IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsIGZvciBmdXp6aW5nLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHBhdGhzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgZG91YmxlLWNoZWNrZWQuIE5vdGhpbmcgaXMgb3V0c2lkZSBvZiBgdG9vbHMvYC4gVGhhdCdzIGl0LCB0aGVuLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwYXRjaCBpcyBzb2xlbHkgd2l0aGluIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCByZWxhdGVkIHRlc3RzLiBJdCBkb2Vzbid0IG1vZGlmeSBhbnkga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3l6a2FsbGVyIHdvdWxkIGRpcmVjdGx5IGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE5LCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MjE6NTIuNTc0MjAxMTIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBzZWxmdGVzdHMgaW4gdGhlIHRvb2xzLyBkaXJlY3RvcnkuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjIxOjUyLjU3NDI1NzM0MloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsgfr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 18:37:23 +0000 UTC FinishedAt: 2026-08-26 19:21:54 +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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBzZWxmdGVzdHMgaW4gdGhlIHRvb2xzLyBkaXJlY3RvcnkuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlN2UzOTI4NTdiY2NiZjU3MjZmZmQ0OTc0Y2E5MDY2YTI2YmY0MTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MjE6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG5pbmRleCA5ZDE2MGI1YjljMGVlLi41Mjk3OGYwZTA0NTM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbkBAIC0yMTgsNiAmIzQzOzIxOCwxMSBAQCBlbnVtIGxpYmJwZl90cmlzdGF0ZSB7XG4gI2RlZmluZSBfX2FyZ191bnRydXN0ZWQgX19hdHRyaWJ1dGUoKGJ0Zl9kZWNsX3RhZyhcJiMzNDthcmc6dW50cnVzdGVkXCYjMzQ7KSkpXG4gI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFwmIzM0O2FyZzphcmVuYVwmIzM0OykpKVxuIFxuJiM0MzsvKiBNYXJrIGEgQlBGIHByb2dyYW0gdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGluc3RlYWQgb2YgYXV0b2xvYWRlZCxcbiYjNDM7ICogZXF1aXZhbGVudCB0byBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShwcm9nLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fbG9hZF9keW5hbWljIF9fYXR0cmlidXRlX18oKGJ0Zl9kZWNsX3RhZyhcJiMzNDtsb2FkdHlwZTpkeW5hbWljXCYjMzQ7KSkpXG4mIzQzO1xuICNpZm5kZWYgX19fYnBmX2NvbmNhdFxuICNkZWZpbmUgX19fYnBmX2NvbmNhdChhLCBiKSBhICMjIGJcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYjc0OWMwMTc0MmVlMC4uNWQ1OGRiZjI1MjM0ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIHN0cnVjdCBicGZfcHJvZ3JhbSB7XG4gXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuIFxuIFx0aW50IGZkO1xuLVx0Ym9vbCBhdXRvbG9hZDtcbiYjNDM7XHRlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBsb2FkX3R5cGU7XG4gXHRib29sIGF1dG9hdHRhY2g7XG4gXHRib29sIHN5bV9nbG9iYWw7XG4gXHRib29sIG1hcmtfYnRmX3N0YXRpYztcbkBAIC03MjUsNiAmIzQzOzcyNSw3IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcbiBcdGJvb2wgaGFzX3N1YmNhbGxzO1xuIFx0Ym9vbCBoYXNfcm9kYXRhO1xuJiM0MztcdGJvb2wgaGFzX2R5bmxvYWRfcHJvZ3M7XG4gXG4gXHRzdHJ1Y3QgYnBmX2dlbiAqZ2VuX2xvYWRlcjtcbiBcbkBAIC04NzIsMTEgJiM0Mzs4NzMsMTEgQEAgYnBmX29iamVjdF9faW5pdF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdCAqIGF1dG9sb2FkIHNldCB0byBmYWxzZS5cbiBcdCAqL1xuIFx0aWYgKHNlY19uYW1lWzBdID09ICYjMzk7PyYjMzk7KSB7XG4tXHRcdHByb2ctXHUwMDNlYXV0b2xvYWQgPSBmYWxzZTtcbiYjNDM7XHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFx0XHQvKiBmcm9tIG5vdyBvbiBmb3JnZXQgdGhlcmUgd2FzID8gaW4gc2VjdGlvbiBuYW1lICovXG4gXHRcdHNlY19uYW1lJiM0MzsmIzQzOztcbiBcdH0gZWxzZSB7XG4tXHRcdHByb2ctXHUwMDNlYXV0b2xvYWQgPSB0cnVlO1xuJiM0MztcdFx0cHJvZy1cdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTztcbiBcdH1cbiBcbiBcdHByb2ctXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XG5AQCAtMTEyNSw5ICYjNDM7MTEyNiwxMCBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9zdF9vcHNfcHJvZ3JhbShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIH1cbiBcbiAvKiBGb3IgZWFjaCBzdHJ1Y3Rfb3BzIHByb2dyYW0gUCwgcmVmZXJlbmNlZCBmcm9tIHNvbWUgc3RydWN0X29wcyBtYXAgTSxcbi0gKiBlbmFibGUgUC5hdXRvbG9hZCBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLFxuLSAqIGRpc2FibGUgUC5hdXRvbG9hZCBpZiBmb3IgYWxsIE1zIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS5cbi0gKiBEb24mIzM5O3QgY2hhbmdlIFAuYXV0b2xvYWQgZm9yIHByb2dyYW1zIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGZyb20gYW55IG1hcHMuXG4mIzQzOyAqIHNldCBQJiMzOTtzIGxvYWQgdHlwZSB0byBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoXG4mIzQzOyAqIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLCBvciB0byBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQgaWYgZm9yIGFsbCBNc1xuJiM0MzsgKiBNLmF1dG9jcmVhdGUgaXMgZmFsc2UuXG4mIzQzOyAqIERvbiYjMzk7dCBjaGFuZ2UgUCYjMzk7cyBsb2FkIHR5cGUgZm9yIHByb2dyYW1zIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGZyb20gYW55IG1hcHMuXG4gICovXG4gc3RhdGljIGludCBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuQEAgLTExNjMsNyAmIzQzOzExNjUsOCBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKHVzZV9jbnQpXG4tXHRcdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IHNob3VsZF9sb2FkO1xuJiM0MztcdFx0XHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IHNob3VsZF9sb2FkID8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE9cbiYjNDM7XHRcdFx0XHQ6IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTEyNDIsMTMgJiM0MzsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcbiBcdFx0XHRpZiAoc3Rfb3BzLVx1MDAzZXByb2dzW2ldKSB7XG4gXHRcdFx0XHQvKiBJZiB3ZSBoYWQgZGVjbGFyYXRpdmVseSBzZXQgc3RydWN0X29wcyBjYWxsYmFjaywgd2UgbmVlZCB0b1xuLVx0XHRcdFx0ICogZm9yY2UgaXRzIGF1dG9sb2FkIHRvIGZhbHNlLCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGhhdmVcbi1cdFx0XHRcdCAqIGEgY2hhbmNlIG9mIHN1Y2NlZWRpbmcgZnJvbSBQT1Ygb2YgdGhlIGN1cnJlbnQgc3RydWN0X29wcyBtYXAuXG4tXHRcdFx0XHQgKiBJZiB0aGlzIHByb2dyYW0gaXMgc3RpbGwgcmVmZXJlbmNlZCBzb21ld2hlcmUgZWxzZSwgdGhvdWdoLFxuLVx0XHRcdFx0ICogdGhlbiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXG4tXHRcdFx0XHQgKiBhdXRvbG9hZCBhY2NvcmRpbmdseS5cbiYjNDM7XHRcdFx0XHQgKiBmb3JjZSBpdHMgbG9hZCB0eXBlIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCwgYmVjYXVzZVxuJiM0MztcdFx0XHRcdCAqIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGVcbiYjNDM7XHRcdFx0XHQgKiBjdXJyZW50IHN0cnVjdF9vcHMgbWFwLiBJZiB0aGlzIHByb2dyYW0gaXMgc3RpbGwgcmVmZXJlbmNlZFxuJiM0MztcdFx0XHRcdCAqIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsIHRoZW5cbiYjNDM7XHRcdFx0XHQgKiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXG4mIzQzO1x0XHRcdFx0ICogbG9hZCB0eXBlIGFjY29yZGluZ2x5LlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlYXV0b2xvYWQgPSBmYWxzZTtcbiYjNDM7XHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMTI4Nyw3ICYjNDM7MTI5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0XHQgKiBpZiB1c2VyIHJlcGxhY2VkIGl0IHdpdGggYW5vdGhlciBwcm9ncmFtIG9yIE5VTExcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoc3Rfb3BzLVx1MDAzZXByb2dzW2ldIFx1MDAyNlx1MDAyNiBzdF9vcHMtXHUwMDNlcHJvZ3NbaV0gIT0gcHJvZylcbi1cdFx0XHRcdHN0X29wcy1cdTAwM2Vwcm9nc1tpXS1cdTAwM2VhdXRvbG9hZCA9IGZhbHNlO1xuJiM0MztcdFx0XHRcdHN0X29wcy1cdTAwM2Vwcm9nc1tpXS1cdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XG4gXG4gXHRcdFx0LyogVXBkYXRlIHRoZSB2YWx1ZSBmcm9tIHRoZSBzaGFkb3cgdHlwZSAqL1xuIFx0XHRcdHN0X29wcy1cdTAwM2Vwcm9nc1tpXSA9IHByb2c7XG5AQCAtMzYwMCw3ICYjNDM7MzYwNCw3IEBAIHN0YXRpYyBib29sIG9ial9uZWVkc192bWxpbnV4X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0fVxuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfcHJvZ3JhbShwcm9nLCBvYmopIHtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKHByb2dfbmVlZHNfdm1saW51eF9idGYocHJvZykpXG4gXHRcdFx0cmV0dXJuIHRydWU7XG5AQCAtNjE5NCw3ICYjNDM7NjE5OCw3IEBAIGJwZl9vYmplY3RfX3JlbG9jYXRlX2NvcmUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0aClcbiBcdFx0XHQvKiBubyBuZWVkIHRvIGFwcGx5IENPLVJFIHJlbG9jYXRpb24gaWYgdGhlIHByb2dyYW0gaXNcbiBcdFx0XHQgKiBub3QgZ29pbmcgdG8gYmUgbG9hZGVkXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuJiM0MztcdFx0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0LyogYWRqdXN0IGluc25faWR4IGZyb20gc2VjdGlvbiBmcmFtZSBvZiByZWZlcmVuY2UgdG8gdGhlIGxvY2FsXG5AQCAtNzE1NCw2ICYjNDM7NzE1OCw1MCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2Fzc2lnbl9leGNfY2Ioc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwclxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIERZTkxPQURfREVDTF9UQUcgXCYjMzQ7bG9hZHR5cGU6ZHluYW1pY1wmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgd2hldGhlciBhIEJQRiBwcm9ncmFtIGlzIGFubm90YXRlZCB3aXRoIHRoZSBEWU5MT0FEX0RFQ0xfVEFHIEJURlxuJiM0MzsgKiBkZWNsIHRhZywgcmVxdWVzdGluZyB0aGF0IGl0IGJlIGxvYWRlZCBkeW5hbWljYWxseSBhZnRlciB0aGUgb2JqZWN0IGxvYWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMSBpZiB0aGUgdGFnIGlzIHByZXNlbnQsIDAgaWYgaXQgaXMgbm90LCBuZWdhdGl2ZSBlcnJvciBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGludCBpLCBuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VidGYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0biA9IGJ0Zl9fdHlwZV9jbnQob2JqLVx1MDAzZWJ0Zik7XG4mIzQzO1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGFnX3QsICpmbl90O1xuJiM0MztcbiYjNDM7XHRcdHRhZ190ID0gYnRmX190eXBlX2J5X2lkKG9iai1cdTAwM2VidGYsIGkpO1xuJiM0MztcdFx0aWYgKCFidGZfaXNfZGVjbF90YWcodGFnX3QpIHx8IGJ0Zl9kZWNsX3RhZyh0YWdfdCktXHUwMDNlY29tcG9uZW50X2lkeCAhPSAtMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotXHUwMDNlYnRmLCB0YWdfdC1cdTAwM2VuYW1lX29mZiksXG4mIzQzO1x0XHRcdCAgIERZTkxPQURfREVDTF9UQUcpICE9IDApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGEgZGVjbCB0YWcmIzM5O3MgdHlwZSBmaWVsZCBwb2ludHMgYXQgdGhlIGVudGl0eSBpdCBkZWNvcmF0ZXMgKi9cbiYjNDM7XHRcdGZuX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgdGFnX3QtXHUwMDNldHlwZSk7XG4mIzQzO1x0XHRpZiAoIWJ0Zl9pc19mdW5jKGZuX3QpIHx8IGJ0Zl9mdW5jX2xpbmthZ2UoZm5fdCkgIT0gQlRGX0ZVTkNfR0xPQkFMKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IFwmIzM0OyBEWU5MT0FEX0RFQ0xfVEFHXG4mIzQzO1x0XHRcdFx0XCYjMzQ7IGRlY2wgdGFnIG11c3QgYmUgYXBwbGllZCB0byBhIGdsb2JhbCBmdW5jdGlvblxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotXHUwMDNlYnRmLCBmbl90LVx1MDAzZW5hbWVfb2ZmKSwgcHJvZy1cdTAwM2VuYW1lKSAhPSAwKVxuJiM0MztcdFx0XHRjb250aW51ZTsgICAvKiB0YWcgYmVsb25ncyB0byBhIGRpZmZlcmVudCBwcm9ncmFtICovXG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHtcbiBcdGVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGU7XG4gXHRjb25zdCBjaGFyICpjdHhfbmFtZTtcbkBAIC03NTMwLDcgJiM0Mzs3NTc4LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRcbiBcdFx0ICovXG4gXHRcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0ZXJyID0gYnBmX29iamVjdF9fcmVsb2NhdGVfY2FsbHMob2JqLCBwcm9nKTtcbkBAIC03NTY2LDcgJiM0Mzs3NjE0LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRcbiBcdFx0cHJvZyA9IFx1MDAyNm9iai1cdTAwM2Vwcm9ncmFtc1tpXTtcbiBcdFx0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoIXByb2ctXHUwMDNlYXV0b2xvYWQpXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBQcm9jZXNzIGRhdGEgcmVsb3MgZm9yIG1haW4gcHJvZ3JhbXMgKi9cbkBAIC04MDU1LDcgJiM0Mzs4MTAzLDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X2xvYWRfcHJvZyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2dcbiBcdFx0XHRsb2dfYnVmID0gcHJvZy1cdTAwM2Vsb2dfYnVmO1xuIFx0XHRcdGxvZ19idWZfc2l6ZSA9IHByb2ctXHUwMDNlbG9nX3NpemU7XG4gXHRcdFx0b3duX2xvZ19idWYgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIGlmIChvYmotXHUwMDNlbG9nX2J1Zikge1xuJiM0MztcdFx0fSBlbHNlIGlmIChvYmotXHUwMDNlbG9nX2J1ZiBcdTAwMjZcdTAwMjYgcHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpIHtcbiBcdFx0XHRsb2dfYnVmID0gb2JqLVx1MDAzZWxvZ19idWY7XG4gXHRcdFx0bG9nX2J1Zl9zaXplID0gb2JqLVx1MDAzZWxvZ19zaXplO1xuIFx0XHRcdG93bl9sb2dfYnVmID0gZmFsc2U7XG5AQCAtODM5OCwxMCAmIzQzOzg0NDYsMTQgQEAgYnBmX29iamVjdF9fbG9hZF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgbG9nX2xldmVsKVxuIFx0XHRwcm9nID0gXHUwMDI2b2JqLVx1MDAzZXByb2dyYW1zW2ldO1xuIFx0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJvZy1cdTAwM2VhdXRvbG9hZCkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBza2lwcGVkIGxvYWRpbmdcXG5cJiMzNDssIHByb2ctXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pIHtcbiYjNDM7XHRcdFx0cHJfZGVidWcoXCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6IHNraXBwZWQgbG9hZGluZywgbG9hZCB0eXBlIGlzICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBwcm9nLVx1MDAzZW5hbWUsXG4mIzQzO1x0XHRcdFx0IHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDID9cbiYjNDM7XHRcdFx0XHQgXCYjMzQ7ZHluYW1pY1wmIzM0OyA6IFwmIzM0O2Rpc2FibGVkXCYjMzQ7KTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuJiM0MztcbiBcdFx0cHJvZy1cdTAwM2Vsb2dfbGV2ZWwgfD0gbG9nX2xldmVsO1xuIFxuIFx0XHRpZiAob2JqLVx1MDAzZWdlbl9sb2FkZXIpXG5AQCAtODQ2NCw2ICYjNDM7ODUxNiwyMiBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdFxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHByb2dfaGFzX2R5bmxvYWRfdGFnKG9iaiwgcHJvZyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShwcm9nLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRwcl93YXJuKFwmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gYXBwbHkgXCYjMzQ7IERZTkxPQURfREVDTF9UQUdcbiYjNDM7XHRcdFx0XHRcdFwmIzM0OyBkZWNsIHRhZzogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRwcm9nLVx1MDAzZW5hbWUsIGVycnN0cihlcnIpKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC05MDc1LDE1ICYjNDM7OTE0MywyMiBAQCBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2NsZWFudXBfYnRmKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRvYmotXHUwMDNlYnRmX21vZHVsZXNfbG9hZGVkID0gZmFsc2U7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZXMpO1xuIFxuLVx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbi1cdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuLVx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbiYjNDM7XHQvKiBUaGUgYnRmX3ZtbGludXggZGF0YSBpcyBuZWVkZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyxcbiYjNDM7XHQgKiBzbyBkZWZlciBmcmVlaW5nIGl0IGluIHRoYXQgY2FzZSB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgbGlmZXRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlaGFzX2R5bmxvYWRfcHJvZ3MpIHtcbiYjNDM7XHRcdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuJiM0MztcdFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4tXHQvKiBjbGVhbiB1cCBmZF9hcnJheSAqL1xuLVx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWZkX2FycmF5KTtcbiYjNDM7XHQvKiBUaGUgZmQgYXJyYXkgaXMgbmVlZGVkIGZvciBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMsXG4mIzQzO1x0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWhhc19keW5sb2FkX3Byb2dzIHx8ICFvYmotXHUwMDNlZmRfYXJyYXlfY250KVxuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWZkX2FycmF5KTtcbiBcbiBcdC8qIGNsZWFuIHVwIEJURiAqL1xuIFx0YnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopO1xuQEAgLTk2NzcsNiAmIzQzOzk3NTIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VmZF9hcnJheSk7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbkBAIC05Nzk5LDE2ICYjNDM7OTg3NiwxNSBAQCBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiBcbiBib29sIGJwZl9wcm9ncmFtX19hdXRvbG9hZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4ge1xuLVx0cmV0dXJuIHByb2ctXHUwMDNlYXV0b2xvYWQ7XG4mIzQzO1x0cmV0dXJuIHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPO1xuIH1cbiBcbi1pbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpXG4mIzQzO2ludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpXG4ge1xuLVx0aWYgKHByb2ctXHUwMDNlb2JqLVx1MDAzZXN0YXRlIFx1MDAzZT0gT0JKX0xPQURFRClcbiYjNDM7XHRpZiAoYXV0b2xvYWQgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gXHUwMDI2XHUwMDI2IGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcbiBcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4gXG4tXHRwcm9nLVx1MDAzZWF1dG9sb2FkID0gYXV0b2xvYWQ7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgYXV0b2xvYWQpO1xuIH1cbiBcbiBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbkBAIC0xNTExMSw3ICYjNDM7MTUxODcsNyBAQCBpbnQgYnBmX29iamVjdF9fYXR0YWNoX3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKVxuIFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSAqcHJvZ19za2VsLVx1MDAzZXByb2c7XG4gXHRcdHN0cnVjdCBicGZfbGluayAqKmxpbmsgPSBwcm9nX3NrZWwtXHUwMDNlbGluaztcbiBcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkIHx8ICFwcm9nLVx1MDAzZWF1dG9hdHRhY2gpXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gfHwgIXByb2ctXHUwMDNlYXV0b2F0dGFjaClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0LyogYXV0by1hdHRhY2hpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBwcm9ncmFtICovXG5AQCAtMTUyMjEsMyAmIzQzOzE1Mjk3LDEzNiBAQCB2b2lkIGJwZl9vYmplY3RfX2Rlc3Ryb3lfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3Rfc2tlbGV0b24gKnMpXG4gXHRmcmVlKHMtXHUwMDNlcHJvZ3MpO1xuIFx0ZnJlZShzKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiYjNDM7XHRjb25zdCBjaGFyICphdHRhY2hfbmFtZTtcbiYjNDM7XG4mIzQzO1x0b2JqID0gcHJvZy1cdTAwM2VvYmo7XG4mIzQzO1x0aWYgKCFvYmopXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogRHluYW1pY2FsbHktbG9hZGVkIHByb2dyYW1zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBnZW5fbG9hZGVyLlxuJiM0MztcdCAqIFRoaXMgaXMgYmVjYXVzZSBicGZfb2JqZWN0X2xvYWRfcHJvZyBpcyBub3QgY2FsbGVkIGZvclxuJiM0MztcdCAqIGR5bmFtaWNsb2FkIHByb2dyYW1zLCBzbyBkeW5hbWljbG9hZCBwcm9ncmFtcyBhcmUgbm90IHZpc2libGVcbiYjNDM7XHQgKiB0byBnZW5fbG9hZGVyLiBGb3IgdGhpcyByZWFzb24sIHByZXZlbnQgY2FsbGluZ1xuJiM0MztcdCAqIGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQgd2hlbiBnZW5fbG9hZGVyIHdhcyB1c2VkIHRvXG4mIzQzO1x0ICogZ2VuZXJhdGUgYSBCUEYgb2JqZWN0IGxvYWRlci5cbiYjNDM7XHQgKiBBIGdlbl9sb2FkZXIgaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgY2FsbGVkIGZvciBwcm9ncmFtcyB3aXRoXG4mIzQzO1x0ICogbG9hZCB0eXBlIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPIGFuZCBkZWZpbmVzIGl0cyBvd24gbW9kZWwgZm9yXG4mIzQzO1x0ICogbG9hZGluZyBCUEYgcHJvZ3JhbXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG9iai1cdTAwM2VnZW5fbG9hZGVyKVxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0YXR0YWNoX25hbWUgPSBzdHJjaHIocHJvZy1cdTAwM2VzZWNfbmFtZSwgJiMzOTsvJiMzOTspO1xuJiM0MztcdGlmICghYXR0YWNoX25hbWUgfHwgc3RyY2hyKGF0dGFjaF9uYW1lLCAmIzM5OzomIzM5OykpIHtcbiYjNDM7XHRcdC8qIE9ubHkgcmVqZWN0IHByb2dyYW1zIHRoYXQgcmVxdWlyZSBCVEYtYmFzZWQgYXR0YWNoIHRhcmdldFxuJiM0MztcdFx0ICogcmVzb2x1dGlvbiAoaW5kaWNhdGVkIGJ5IHRoZSBTRUNfQVRUQUNIX0JURiBmbGFnKS4gU3VjaFxuJiM0MztcdFx0ICogcHJvZ3JhbXMgbmVlZCB0aGUgc2VjdGlvbiBuYW1lIHBhcnNlZCBmb3IgdGhlIGF0dGFjaCB0YXJnZXRcbiYjNDM7XHRcdCAqIGZ1bmN0aW9uIG5hbWUgKGFmdGVyICYjMzk7LyYjMzk7KSBhbmQgb3B0aW9uYWxseSB0aGUgbW9kdWxlIG5hbWVcbiYjNDM7XHRcdCAqIChiZWZvcmUgJiMzOTs6JiMzOTspIGZvciBsaWJicGZfZmluZF9hdHRhY2hfYnRmX2lkLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIFByb2dyYW1zIGxpa2UgU0VDKFwmIzM0O2NsYXNzaWZpZXJcJiMzNDspLCBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KSwgZXRjLiBkb1xuJiM0MztcdFx0ICogbm90IHJlcXVpcmUgQlRGIGF0dGFjaCByZXNvbHV0aW9uIGFuZCBjYW4gc2FmZWx5IHVzZVxuJiM0MztcdFx0ICogZHluYW1pYyBsb2FkaW5nIGRlc3BpdGUgaGF2aW5nIG5vICYjMzk7LyYjMzk7IGluIHRoZWlyIHNlY3Rpb25cbiYjNDM7XHRcdCAqIG5hbWUuIFRoZSBCVEYgZ3VhcmQgaW4gbGliYnBmX3ByZXBhcmVfcHJvZ19sb2FkIChjaGVja2luZ1xuJiM0MztcdFx0ICogU0VDX0FUVEFDSF9CVEYpIGlzIHRoZSBhdXRob3JpdGF0aXZlIGNoZWNrOyB0aGlzIGlzIGFuXG4mIzQzO1x0XHQgKiBlYXJseS1yZWplY3QgZm9yIHByb2dyYW1zIHRoYXQgd291bGQgZmFpbCB0aGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bG9uZyBmbGFncyA9IHByb2ctXHUwMDNlc2VjX2RlZiA/XG4mIzQzO1x0XHRcdChsb25nKXByb2ctXHUwMDNlc2VjX2RlZi1cdTAwM2Vjb29raWUgOiBTRUNfQVRUQUNIX0JURjtcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IFNFQ19BVFRBQ0hfQlRGKSBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXR0YWNoX2J0Zl9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvYmotXHUwMDNlaGFzX2R5bmxvYWRfcHJvZ3MgPSB0cnVlO1xuJiM0MztcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM7XG4mIzQzO1x0cHJvZy1cdTAwM2VhdXRvYXR0YWNoID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwcm9nKVxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZW9iai1cdTAwM2VzdGF0ZSBcdTAwM2U9IE9CSl9MT0FERUQpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzpcbiYjNDM7XHRcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkKHByb2cpO1xuJiM0MztcdGNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE86XG4mIzQzO1x0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTGVhdmluZyB0aGUgZHluYW1pYyBzdGF0ZTogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJlZFxuJiM0MztcdFx0ICogYXV0b2F0dGFjaCBiZWNhdXNlIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyBhcmUgYXR0YWNoZWRcbiYjNDM7XHRcdCAqIGV4cGxpY2l0bHkuIFJlc3RvcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQgbG9hZCB0eXBlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpXG4mIzQzO1x0XHRcdHByb2ctXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IHR5cGU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJvZy1cdTAwM2Vsb2FkX3R5cGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYnBmX29iamVjdF9fbG9hZF9wcm9ncy5cbiYjNDM7ICogRHluYW1pY2FsbHktbG9hZGVkIHByb2dyYW0gZGF0YSBpcyBpbml0aWFsaXplZCBvbiBvYmplY3QgbG9hZC5cbiYjNDM7ICogUG9zdC1sb2FkIGluaXRpYWxpemF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzOyAqL1xuJiM0MztpbnRcbiYjNDM7YnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBpbnQgZXh0cmFfbG9nX2xldmVsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuJiM0MztcbiYjNDM7XHRvYmogPSBwcm9nLVx1MDAzZW9iajtcbiYjNDM7XHRpZiAoIW9iaiB8fCBvYmotXHUwMDNlc3RhdGUgXHUwMDNjIE9CSl9MT0FERUQpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpIHx8IHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxuJiM0MztcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHByb2ctXHUwMDNlbG9nX2xldmVsIHw9IGV4dHJhX2xvZ19sZXZlbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX29iamVjdF9sb2FkX3Byb2cob2JqLCBwcm9nLCBwcm9nLVx1MDAzZWluc25zLCBwcm9nLVx1MDAzZWluc25zX2NudCxcbiYjNDM7XHRcdFx0XHQgICBvYmotXHUwMDNlbGljZW5zZSwgb2JqLVx1MDAzZWtlcm5fdmVyc2lvbiwgXHUwMDI2cHJvZy1cdTAwM2VmZCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGR5bmFtaWNhbGx5IGxvYWQ6ICVkXFxuXCYjMzQ7LCBwcm9nLVx1MDAzZW5hbWUsIGVycik7XG4mIzQzO1x0XHRwcm9nLVx1MDAzZWxvZ19sZXZlbCBcdTAwMjY9IH5leHRyYV9sb2dfbGV2ZWw7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJvZy1cdTAwM2Vsb2dfbGV2ZWwgXHUwMDI2PSB+ZXh0cmFfbG9nX2xldmVsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByb2cgfHwgcHJvZy1cdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpXG4mIzQzO1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBidXQgcmV0YWluIHRoZSBwcm9ncmFtJiMzOTtzIGRhdGEgdG9cbiYjNDM7XHQgKiBzdXBwb3J0IHJlbG9hZGluZyB0aGUgcHJvZ3JhbSBpZiBpdCBpcyByZXF1aXJlZCBhZ2Fpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSB6Y2xvc2UocHJvZy1cdTAwM2VmZCk7XG4mIzQzO1x0cmV0dXJuIGVyciA/IGxpYmJwZl9lcnIoLWVycm5vKSA6IDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uYTU2MDY4ZjBmMTEyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0zNTYsNiAmIzQzOzM1NiwxOSBAQCBMSUJCUEZfQVBJIGludCBsaWJicGZfYXR0YWNoX3R5cGVfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuIExJQkJQRl9BUEkgaW50IGxpYmJwZl9maW5kX3ZtbGludXhfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRcdFx0XHRcdCAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgcHJvZ3JhbSBsb2FkIHR5cGU6XG4mIzQzOyAqXG4mIzQzOyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOiB0aGUgcHJvZ3JhbSBpcyBub3QgbG9hZGVkLlxuJiM0MzsgKiAtIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPOiB0aGUgcHJvZ3JhbSBpcyBhdXRvbG9hZGVkIHdoZW4gdGhlIGJwZl9vYmplY3QgaXMgbG9hZGVkLlxuJiM0MzsgKiAtIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDOiB0aGUgcHJvZ3JhbSBpcyBsb2FkZWQgYW5kIGF0dGFjaGVkIGR5bmFtaWNhbGx5LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBicGZfcHJvZ19sb2FkX3R5cGUge1xuJiM0MztcdEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCA9IDAsXG4mIzQzO1x0QlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4mIzQzO1x0QlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4mIzQzO307XG4mIzQzO1xuIC8qIEFjY2Vzc29ycyBvZiBicGZfcHJvZ3JhbSAqL1xuIHN0cnVjdCBicGZfcHJvZ3JhbTtcbiBcbkBAIC0zNzYsNyAmIzQzOzM4OSwxOCBAQCBMSUJCUEZfQVBJIHZvaWQgYnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBMSUJCUEZfQVBJIGNvbnN0IGNoYXIgKmJwZl9wcm9ncmFtX19uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4gTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4gTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvbG9hZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xuLUxJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBib29sIGF1dG9sb2FkKTtcbiYjNDM7LyoqXG4mIzQzOyAqIEBicmllZiAqKmJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSoqIGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHNcbiYjNDM7ICogY29tcGF0aWJpbGl0eTsgKipicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZSgpKiogaXMgdGhlIHByZWZlcnJlZCBBUEkuXG4mIzQzOyAqIFRoZSBlbnVtJiMzOTtzIG51bWJlcmluZyAoRElTQUJMRUQ9MCwgQVVUTz0xLCBEWU5BTUlDPTIpIG1hdGNoZXMgdGhlIHByZXZpb3VzXG4mIzQzOyAqIGJvb2wgc2VtYW50aWNzIChmYWxzZT0wLCB0cnVlPTEpLCBzbyBleGlzdGluZyBib29sIGNhbGxlcnMga2VlcCBjb21waWxpbmdcbiYjNDM7ICogYW5kIGJlaGF2aW5nIHVuY2hhbmdlZC4gT25seSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBhbmRcbiYjNDM7ICogQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGFyZSBhY2NlcHRlZCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWxcbiYjNDM7ICogYXV0b2xvYWQgb24vb2ZmIG1lYW5pbmc7IHVzZSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZSgpIHRvIHNldFxuJiM0MzsgKiBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQy5cbiYjNDM7ICovXG4mIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0IGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGF1dG9sb2FkKTtcbiBMSUJCUEZfQVBJIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIHZvaWQgYnBmX3Byb2dyYW1fX3NldF9hdXRvYXR0YWNoKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvYXR0YWNoKTtcbiBcbkBAIC0yMDc4LDYgJiM0MzsyMTAyLDEyIEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl91bnJlZ2lzdGVyX3Byb2dfaGFuZGxlcihpbnQgaGFuZGxlcl9pZCk7XG4gICovXG4gTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2Nsb25lKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3Qgc3RydWN0IGJwZl9wcm9nX2xvYWRfb3B0cyAqb3B0cyk7XG4gXG4mIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgbG9hZHR5cGUpO1xuJiM0MztMSUJCUEZfQVBJIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBpbnQgZXh0cmFfbG9nX2xldmVsKTtcbiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xuJiM0MztcbiAjaWZkZWYgX19jcGx1c3BsdXNcbiB9IC8qIGV4dGVybiBcJiMzNDtDXCYjMzQ7ICovXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5pbmRleCAwOGFiMmVhODgxZmI2Li43NDMxMmM5NWQzMjg3IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXBcbkBAIC00NjAsNiAmIzQzOzQ2MCwxMCBAQCBMSUJCUEZfMS44LjAge1xuIFx0Z2xvYmFsOlxuIFx0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XG4gXHRcdGJwZl9wcm9ncmFtX19jbG9uZTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5O1xuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2xvYWRfdHlwZTtcbiYjNDM7XHRcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlO1xuJiM0MztcdFx0YnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseTtcbiBcdFx0YnRmX19maW5kX2J5X25hbWVfa2luZF9vd247XG4gXHRcdGJ0Zl9fbmV3X2VtcHR5X29wdHM7XG4gfSBMSUJCUEZfMS43LjA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OTljNDMwMzRmZjkyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jXG5AQCAtMCwwICYjNDM7MSwyMjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF9keW5hbWljbG9hZC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIHByb2c0IGlzIHRhZ2dlZCBfX2xvYWRfZHluYW1pYyBpbiB0aGUgc291cmNlIGluc3RlYWQgb2YgYmVpbmcgc2V0XG4mIzQzOyAqIGltcGVyYXRpdmVseTsgdmVyaWZ5IHRoYXQgYW4gZXhwbGljaXQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSBjYWxsXG4mIzQzOyAqIGJlZm9yZSBsb2FkIG92ZXJyaWRlcyB0aGUgdGFnJiMzOTtzIGRlY2xhcmF0aXZlIGRlZmF1bHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBkeW5hbWljbG9hZF92ZXJpZnlfb3ZlcnJpZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2R5bmFtaWNsb2FkX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3BlblwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVELFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3Byb2c0X2xvYWRfdHlwZV9vdmVycmlkZGVuXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Lyoga2VlcCB0aGUgb3RoZXIgZHluYW1pYy1sb2FkLW9ubHkgcHJvZ3JhbXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhpcyBsb2FkICovXG4mIzQzO1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbiYjNDM7XHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB0ZXN0X2R5bmFtaWNsb2FkX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2tlbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogcHJvZzQgd2FzIG5ldmVyIGxvYWRlZCwgc28gaXQgY2Fubm90IGJlIGxvYWRlZCBkeW5hbWljYWxseSBlaXRoZXIgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2c0LCAwKTtcbiYjNDM7XHRBU1NFUlRfRVJSKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseV9hZnRlcl9vdmVycmlkZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9keW5hbWljbG9hZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2R5bmFtaWNsb2FkX19vcGVuKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3BlblwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBfX2xvYWRfZHluYW1pYyB0YWcgYWxvbmUsIHdpdGggbm8gaW1wZXJhdGl2ZSBjYWxsLCBtdXN0IHNldFxuJiM0MztcdCAqIHByb2c0JiMzOTtzIGxvYWQgdHlwZSBiZWZvcmUgaXQgaXMgZXZlciB0b3VjaGVkIGJlbG93XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzRfdGFnX2xvYWRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRkFMU0UoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCksIFwmIzM0O3Byb2c0X2F1dG9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBkb24mIzM5O3QgbG9hZCBwcm9nMSAqL1xuJiM0MztcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIHByb2cyIGlzIGF1dG9sb2FkICovXG4mIzQzO1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMiwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pO1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nMyBpcyBkeW5hbWljYWxseSBsb2FkZWQgKi9cbiYjNDM7XHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2xvYWQoc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB0ZXN0X2R5bmFtaWNsb2FkX19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHRyaWdnZXIgdGhlIEJQRiBwcm9ncmFtcyAqL1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cxX2NhbGxlZCwgXCYjMzQ7cHJvZzFfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwmIzM0O3Byb2cyX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCYjMzQ7cHJvZzNfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzRfY2FsbGVkLCBcJiMzNDtwcm9nNF9jYWxsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O2xvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVJSKGVyciwgXCYjMzQ7dW5sb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2cyLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2F1dG9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzIpO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O3VubG9hZF9keW5hbWljYWxseV9hdXRvbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHJlc2V0IHRoZSBjYWxsIGZsYWdzICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cxX2NhbGxlZCwgXCYjMzQ7cHJvZzFfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwmIzM0O3Byb2cyX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCYjMzQ7cHJvZzNfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogbG9hZCBwcm9nMyAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGF0dGFjaCBwcm9nMyAqL1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDthdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoMSk7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcJiMzNDtwcm9nM19jYWxsZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBkZXRhY2ggcHJvZzMgYXMgdGVzdF9keW5hbWljbG9hZF9fZGVzdHJveSBkb2VzbiYjMzk7dCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtsaW5rX2Rlc3Ryb3lcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiByZXNldCB0aGUgY2FsbCBmbGFncyBhZnRlciBkZXRhY2ggKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDEpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwmIzM0O3Byb2cyX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCYjMzQ7cHJvZzNfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogdW5sb2FkIHByb2czICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3VubG9hZF9keW5hbWljYWxseVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHJlbG9hZCBwcm9nMyAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseV9yZWxvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiByZWF0dGFjaCBwcm9nMyAqL1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDtyZWF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwmIzM0O3Byb2czX2NhbGxlZF9yZWF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95IGRvZXNuJiMzOTt0IGRldGFjaCBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMgKi9cbiYjNDM7XHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2xpbmtfZGVzdHJveV9yZWF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIHZlcmlmeSByZWd1bGFyIHVubG9hZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW0sXG4mIzQzO1x0ICogdW5sb2FkIHByb2czIGFzIGEgcmVndWxhciBwcm9ncmFtXG4mIzQzO1x0ICovXG4mIzQzO1x0YnBmX3Byb2dyYW1fX3VubG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbiYjNDM7XG4mIzQzO1x0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgdW5sb2FkICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkLCBcJiMzNDtwcm9nMl9jYWxsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwmIzM0O3Byb2czX2NhbGxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIHJlbG9hZGluZyBwcm9nMyBtdXN0IGZhaWwgYXMgaXQgd2FzIHVubG9hZGVkIGFzIGEgcmVndWxhciBwcm9ncmFtICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgMCk7XG4mIzQzO1x0QVNTRVJUX0VSUihlcnIsIFwmIzM0O2xvYWRfZHluYW1pY2FsbHlfYWZ0ZXJfcmVndWxhcl91bmxvYWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBydW4gcHJvZzQgKGRlY2xhcmF0aXZlbHkgdGFnZ2VkKSB0aHJvdWdoIHRoZSBzYW1lIGR5bmFtaWNcbiYjNDM7XHQgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzNcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2c0LCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3Byb2c0X2xvYWRfZHluYW1pY2FsbHlcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2c0KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCYjMzQ7cHJvZzRfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDEpO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2c0X2NhbGxlZCwgXCYjMzQ7cHJvZzRfY2FsbGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwcm9nNF9saW5rX2Rlc3Ryb3lcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQpO1xuJiM0MztcdEFTU0VSVF9PSyhlcnIsIFwmIzM0O3Byb2c0X3VubG9hZF9keW5hbWljYWxseVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1xuJiM0MztcdC8qIHNlcGFyYXRlIHNjZW5hcmlvOiBpbXBlcmF0aXZlIG92ZXJyaWRlIG9mIHRoZSBkZWNsYXJhdGl2ZSB0YWcgKi9cbiYjNDM7XHRkeW5hbWljbG9hZF92ZXJpZnlfb3ZlcnJpZGUoKTtcbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjOTFmNjY2NmM1MDZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jXG5AQCAtMCwwICYjNDM7MSwxNjcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdF9sb2FkX3R5cGUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfbG9hZF90eXBlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1x0c3RydWN0IHRlc3RfbG9hZF90eXBlICpza2VsO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtza2VsX29wZW5cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBkb24mIzM5O3QgbG9hZCBwcm9nMSAqL1xuJiM0MztcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIGxvYWQgYW5kIGF0dGFjaCBwcm9nMiAqL1xuJiM0MztcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCYjMzQ7cHJvZzJfYXV0b2xvYWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2R5bmFtaWNcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3Byb2czX2xvYWRfdHlwZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSBpcyBhIHRoaW4gZm9yd2FyZGVyIHRvIHNldF9sb2FkX3R5cGUoKSxcbiYjNDM7XHQgKiByZXN0cmljdGVkIHRvIEFVVE8vRElTQUJMRUQgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsIGJvb2wgb24vb2ZmXG4mIzQzO1x0ICogbWVhbmluZzsgaXQgZG9lcyBjaGFuZ2UgdGhlIGxvYWQgdHlwZSBvZiBhIHByb2dyYW0gdGhhdCBpc24mIzM5O3RcbiYjNDM7XHQgKiBjdXJyZW50bHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czLCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfYXV0b2xvYWRfZmFsc2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX2FmdGVyX2ZhbHNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czLCB0cnVlKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9hdXRvbG9hZF90cnVlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX2FmdGVyX3RydWVcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBzZXRfYXV0b2xvYWQoKSBvbmx5IGFjY2VwdHMgQVVUTy9ESVNBQkxFRCwgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsXG4mIzQzO1x0ICogb24vb2ZmIG1lYW5pbmc7IERZTkFNSUMgbXVzdCBnbyB0aHJvdWdoIHNldF9sb2FkX3R5cGUoKVxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O3NldF9hdXRvbG9hZF9keW5hbWljX3JlamVjdGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX3VuY2hhbmdlZF9hZnRlcl9yZWplY3RlZF9hdXRvbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7cHJvZzNfbG9hZF90eXBlX2FmdGVyX2R5bmFtaWNfZW51bVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGxlYXZpbmcgRFlOQU1JQyBmb3IgQVVUTyBtdXN0IHJlc3RvcmUgYXV0b2F0dGFjaCAocmVncmVzc2lvbiB0ZXN0IGZvclxuJiM0MztcdCAqIHRoZSBhdXRvYXR0YWNoIHJlc2lkdWUgYnVnOiBzZXRfZHluYW1pY2xvYWQoKSBjbGVhcnMgYXV0b2F0dGFjaCwgYW5kXG4mIzQzO1x0ICogbm90aGluZyB1c2VkIHRvIHJlc3RvcmUgaXQgb24gZXhpdClcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2F1dG9cJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtwcm9nM19sb2FkX3R5cGVfYXV0b1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIFwmIzM0O3Byb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgc2FtZSByZXNpZHVlIGNhbiByZWxheSB0aHJvdWdoIERJU0FCTEVEIGFuZCByZXN1cmZhY2Ugb24gYSBsYXRlclxuJiM0MztcdCAqIERJU0FCTEVEIC1cdTAwM2UgQVVUTyB0cmFuc2l0aW9uLCBzbyB0aGUgZml4IG11c3QgY292ZXIgYm90aCBleGl0IGVkZ2VzXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0X2xvYWRfdHlwZV9keW5hbWljX2FnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfZGlzYWJsZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtzZXRfbG9hZF90eXBlX2F1dG9fdmlhX2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKSxcbiYjNDM7XHRcdFx0IFwmIzM0O3Byb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRfdmlhX2Rpc2FibGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogYW4gb3V0LW9mLXJhbmdlIGxvYWQgdHlwZSBpcyByZWplY3RlZCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIChlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSk5OTkpO1xuJiM0MztcdGlmICghQVNTRVJUX0VSUihlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfaW52YWxpZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGNoYW5nZSB0aGUgdHlwZSBiYWNrIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDIGZvciB0aGUgcmVzdCBvZiB0aGUgdGVzdCAqL1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldF9sb2FkX3R5cGVfZHluYW1pY19maW5hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O3Byb2czX2xvYWRfdHlwZV9maW5hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IHRlc3RfbG9hZF90eXBlX19sb2FkKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2tlbF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCYjMzQ7cHJvZzJfYXV0b2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRkFMU0UoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIFwmIzM0O3Byb2czX2F1dG9hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBsb2FkZWQgcHJvZ3JhbSB0eXBlIGNhbm5vdCBiZSBjaGFuZ2VkICovXG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbiYjNDM7XHRBU1NFUlRfRVJSKGVyciwgXCYjMzQ7c2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdGVzdF9sb2FkX3R5cGVfX2F0dGFjaChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NrZWxfYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDEpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzFfY2FsbGVkLCBcJiMzNDtwcm9nMV9jYWxsZWRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCwgXCYjMzQ7cHJvZzJfY2FsbGVkXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcJiMzNDtwcm9nM19jYWxsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2xvYWRfZHluYW1pY2FsbHlfMVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7bG9hZF9keW5hbWljYWxseV8yXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0LyogYXR0YWNoIHByb2czICovXG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFwmIzM0O2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwmIzM0O3Byb2czX2NhbGxlZF9hZ2FpblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2xvYWRfdHlwZV9fZGVzdHJveSBkb2VzbiYjMzk7dCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4mIzQzO1x0QVNTRVJUX09LKGVyciwgXCYjMzQ7bGlua19kZXN0cm95XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0dGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9keW5hbWljbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZHluYW1pY2xvYWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjZmNWE1Y2I4OTgwMzFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmNcbkBAIC0wLDAgJiM0MzsxLDQwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2Jvb2wgcHJvZzFfY2FsbGVkID0gZmFsc2U7XG4mIzQzO2Jvb2wgcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4mIzQzO2Jvb2wgcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4mIzQzO2Jvb2wgcHJvZzRfY2FsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7aW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHByb2cxX2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztpbnQgcHJvZzIoY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cHJvZzJfY2FsbGVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nMyhjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRwcm9nM19jYWxsZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7X19sb2FkX2R5bmFtaWNcbiYjNDM7aW50IHByb2c0KGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHByb2c0X2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9sb2FkX3R5cGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkOWI4MTY5MWQ3YWRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jXG5AQCAtMCwwICYjNDM7MSwzMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzO1xuJiM0Mztib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xuJiM0Mztib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlO1xuJiM0Mztib29sIHByb2czX2NhbGxlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cC9zeXNfZW50ZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nMShjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwL3N5c19lbnRlclwmIzM0OylcbiYjNDM7aW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHByb2cyX2NhbGxlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHAvc3lzX2VudGVyXCYjMzQ7KVxuJiM0MztpbnQgcHJvZzMoY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cHJvZzNfY2FsbGVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBzZWxmdGVzdHMgaW4gdGhlIHRvb2xzLyBkaXJlY3RvcnkuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlN2UzOTI4NTdiY2NiZjU3MjZmZmQ0OTc0Y2E5MDY2YTI2YmY0MTYyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTk6MjE6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmggYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmgKaW5kZXggOWQxNjBiNWI5YzBlZS4uNTI5NzhmMGUwNDUzOSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaApAQCAtMjE4LDYgJiM0MzsyMTgsMTEgQEAgZW51bSBsaWJicGZfdHJpc3RhdGUgewogI2RlZmluZSBfX2FyZ191bnRydXN0ZWQgX19hdHRyaWJ1dGUoKGJ0Zl9kZWNsX3RhZygmIzM0O2FyZzp1bnRydXN0ZWQmIzM0OykpKQogI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKCYjMzQ7YXJnOmFyZW5hJiMzNDspKSkKIAomIzQzOy8qIE1hcmsgYSBCUEYgcHJvZ3JhbSB0byBiZSBsb2FkZWQgZHluYW1pY2FsbHkgaW5zdGVhZCBvZiBhdXRvbG9hZGVkLAomIzQzOyAqIGVxdWl2YWxlbnQgdG8gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19sb2FkX2R5bmFtaWMgX19hdHRyaWJ1dGVfXygoYnRmX2RlY2xfdGFnKCYjMzQ7bG9hZHR5cGU6ZHluYW1pYyYjMzQ7KSkpCiYjNDM7CiAjaWZuZGVmIF9fX2JwZl9jb25jYXQKICNkZWZpbmUgX19fYnBmX2NvbmNhdChhLCBiKSBhICMjIGIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKaW5kZXggYjc0OWMwMTc0MmVlMC4uNWQ1OGRiZjI1MjM0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCkBAIC00OTQsNyAmIzQzOzQ5NCw3IEBAIHN0cnVjdCBicGZfcHJvZ3JhbSB7CiAJc3RydWN0IGJwZl9vYmplY3QgKm9iajsKIAogCWludCBmZDsKLQlib29sIGF1dG9sb2FkOwomIzQzOwllbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBsb2FkX3R5cGU7CiAJYm9vbCBhdXRvYXR0YWNoOwogCWJvb2wgc3ltX2dsb2JhbDsKIAlib29sIG1hcmtfYnRmX3N0YXRpYzsKQEAgLTcyNSw2ICYjNDM7NzI1LDcgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCiAJYm9vbCBoYXNfc3ViY2FsbHM7CiAJYm9vbCBoYXNfcm9kYXRhOwomIzQzOwlib29sIGhhc19keW5sb2FkX3Byb2dzOwogCiAJc3RydWN0IGJwZl9nZW4gKmdlbl9sb2FkZXI7CiAKQEAgLTg3MiwxMSAmIzQzOzg3MywxMSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCSAqIGF1dG9sb2FkIHNldCB0byBmYWxzZS4KIAkgKi8KIAlpZiAoc2VjX25hbWVbMF0gPT0gJiMzOTs/JiMzOTspIHsKLQkJcHJvZy0mZ3Q7YXV0b2xvYWQgPSBmYWxzZTsKJiM0MzsJCXByb2ctJmd0O2xvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDsKIAkJLyogZnJvbSBub3cgb24gZm9yZ2V0IHRoZXJlIHdhcyA/IGluIHNlY3Rpb24gbmFtZSAqLwogCQlzZWNfbmFtZSYjNDM7JiM0Mzs7CiAJfSBlbHNlIHsKLQkJcHJvZy0mZ3Q7YXV0b2xvYWQgPSB0cnVlOwomIzQzOwkJcHJvZy0mZ3Q7bG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE87CiAJfQogCiAJcHJvZy0mZ3Q7YXV0b2F0dGFjaCA9IHRydWU7CkBAIC0xMTI1LDkgJiM0MzsxMTI2LDEwIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3N0X29wc19wcm9ncmFtKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiB9CiAKIC8qIEZvciBlYWNoIHN0cnVjdF9vcHMgcHJvZ3JhbSBQLCByZWZlcmVuY2VkIGZyb20gc29tZSBzdHJ1Y3Rfb3BzIG1hcCBNLAotICogZW5hYmxlIFAuYXV0b2xvYWQgaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaCBNLmF1dG9jcmVhdGUgaXMgdHJ1ZSwKLSAqIGRpc2FibGUgUC5hdXRvbG9hZCBpZiBmb3IgYWxsIE1zIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS4KLSAqIERvbiYjMzk7dCBjaGFuZ2UgUC5hdXRvbG9hZCBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy4KJiM0MzsgKiBzZXQgUCYjMzk7cyBsb2FkIHR5cGUgdG8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaAomIzQzOyAqIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLCBvciB0byBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQgaWYgZm9yIGFsbCBNcwomIzQzOyAqIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS4KJiM0MzsgKiBEb24mIzM5O3QgY2hhbmdlIFAmIzM5O3MgbG9hZCB0eXBlIGZvciBwcm9ncmFtcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBmcm9tIGFueSBtYXBzLgogICovCiBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIHsKQEAgLTExNjMsNyAmIzQzOzExNjUsOCBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCX0KIAkJfQogCQlpZiAodXNlX2NudCkKLQkJCXByb2ctJmd0O2F1dG9sb2FkID0gc2hvdWxkX2xvYWQ7CiYjNDM7CQkJcHJvZy0mZ3Q7bG9hZF90eXBlID0gc2hvdWxkX2xvYWQgPyBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTwomIzQzOwkJCQk6IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEyNDIsMTMgJiM0MzsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcCkKIAogCQkJaWYgKHN0X29wcy0mZ3Q7cHJvZ3NbaV0pIHsKIAkJCQkvKiBJZiB3ZSBoYWQgZGVjbGFyYXRpdmVseSBzZXQgc3RydWN0X29wcyBjYWxsYmFjaywgd2UgbmVlZCB0bwotCQkJCSAqIGZvcmNlIGl0cyBhdXRvbG9hZCB0byBmYWxzZSwgYmVjYXVzZSBpdCBkb2VzbiYjMzk7dCBoYXZlCi0JCQkJICogYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGUgY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC4KLQkJCQkgKiBJZiB0aGlzIHByb2dyYW0gaXMgc3RpbGwgcmVmZXJlbmNlZCBzb21ld2hlcmUgZWxzZSwgdGhvdWdoLAotCQkJCSAqIHRoZW4gYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZCgpIHdpbGwgdXBkYXRlIGl0cwotCQkJCSAqIGF1dG9sb2FkIGFjY29yZGluZ2x5LgomIzQzOwkJCQkgKiBmb3JjZSBpdHMgbG9hZCB0eXBlIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCwgYmVjYXVzZQomIzQzOwkJCQkgKiBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgY2hhbmNlIG9mIHN1Y2NlZWRpbmcgZnJvbSBQT1Ygb2YgdGhlCiYjNDM7CQkJCSAqIGN1cnJlbnQgc3RydWN0X29wcyBtYXAuIElmIHRoaXMgcHJvZ3JhbSBpcyBzdGlsbCByZWZlcmVuY2VkCiYjNDM7CQkJCSAqIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsIHRoZW4KJiM0MzsJCQkJICogYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZCgpIHdpbGwgdXBkYXRlIGl0cwomIzQzOwkJCQkgKiBsb2FkIHR5cGUgYWNjb3JkaW5nbHkuCiAJCQkJICovCi0JCQkJc3Rfb3BzLSZndDtwcm9nc1tpXS0mZ3Q7YXV0b2xvYWQgPSBmYWxzZTsKJiM0MzsJCQkJc3Rfb3BzLSZndDtwcm9nc1tpXS0mZ3Q7bG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOwogCQkJCXN0X29wcy0mZ3Q7cHJvZ3NbaV0gPSBOVUxMOwogCQkJfQogCkBAIC0xMjg3LDcgJiM0MzsxMjkxLDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCQkJICogaWYgdXNlciByZXBsYWNlZCBpdCB3aXRoIGFub3RoZXIgcHJvZ3JhbSBvciBOVUxMCiAJCQkgKi8KIAkJCWlmIChzdF9vcHMtJmd0O3Byb2dzW2ldICZhbXA7JmFtcDsgc3Rfb3BzLSZndDtwcm9nc1tpXSAhPSBwcm9nKQotCQkJCXN0X29wcy0mZ3Q7cHJvZ3NbaV0tJmd0O2F1dG9sb2FkID0gZmFsc2U7CiYjNDM7CQkJCXN0X29wcy0mZ3Q7cHJvZ3NbaV0tJmd0O2xvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDsKIAogCQkJLyogVXBkYXRlIHRoZSB2YWx1ZSBmcm9tIHRoZSBzaGFkb3cgdHlwZSAqLwogCQkJc3Rfb3BzLSZndDtwcm9nc1tpXSA9IHByb2c7CkBAIC0zNjAwLDcgJiM0MzszNjA0LDcgQEAgc3RhdGljIGJvb2wgb2JqX25lZWRzX3ZtbGludXhfYnRmKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJfQogCiAJYnBmX29iamVjdF9fZm9yX2VhY2hfcHJvZ3JhbShwcm9nLCBvYmopIHsKLQkJaWYgKCFwcm9nLSZndDthdXRvbG9hZCkKJiM0MzsJCWlmIChwcm9nLSZndDtsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKQogCQkJY29udGludWU7CiAJCWlmIChwcm9nX25lZWRzX3ZtbGludXhfYnRmKHByb2cpKQogCQkJcmV0dXJuIHRydWU7CkBAIC02MTk0LDcgJiM0Mzs2MTk4LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKQogCQkJLyogbm8gbmVlZCB0byBhcHBseSBDTy1SRSByZWxvY2F0aW9uIGlmIHRoZSBwcm9ncmFtIGlzCiAJCQkgKiBub3QgZ29pbmcgdG8gYmUgbG9hZGVkCiAJCQkgKi8KLQkJCWlmICghcHJvZy0mZ3Q7YXV0b2xvYWQpCiYjNDM7CQkJaWYgKHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIGFkanVzdCBpbnNuX2lkeCBmcm9tIHNlY3Rpb24gZnJhbWUgb2YgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbApAQCAtNzE1NCw2ICYjNDM7NzE1OCw1MCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2Fzc2lnbl9leGNfY2Ioc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcgogCXJldHVybiAwOwogfQogCiYjNDM7I2RlZmluZSBEWU5MT0FEX0RFQ0xfVEFHICYjMzQ7bG9hZHR5cGU6ZHluYW1pYyYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDaGVjayB3aGV0aGVyIGEgQlBGIHByb2dyYW0gaXMgYW5ub3RhdGVkIHdpdGggdGhlIERZTkxPQURfREVDTF9UQUcgQlRGCiYjNDM7ICogZGVjbCB0YWcsIHJlcXVlc3RpbmcgdGhhdCBpdCBiZSBsb2FkZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdGhlIG9iamVjdCBsb2FkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAxIGlmIHRoZSB0YWcgaXMgcHJlc2VudCwgMCBpZiBpdCBpcyBub3QsIG5lZ2F0aXZlIGVycm9yIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKJiM0Mzt7CiYjNDM7CWludCBpLCBuOwomIzQzOwomIzQzOwlpZiAoIW9iai0mZ3Q7YnRmKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW4gPSBidGZfX3R5cGVfY250KG9iai0mZ3Q7YnRmKTsKJiM0MzsJZm9yIChpID0gMTsgaSAmbHQ7IG47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnRhZ190LCAqZm5fdDsKJiM0MzsKJiM0MzsJCXRhZ190ID0gYnRmX190eXBlX2J5X2lkKG9iai0mZ3Q7YnRmLCBpKTsKJiM0MzsJCWlmICghYnRmX2lzX2RlY2xfdGFnKHRhZ190KSB8fCBidGZfZGVjbF90YWcodGFnX3QpLSZndDtjb21wb25lbnRfaWR4ICE9IC0xKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKHN0cmNtcChidGZfX3N0cl9ieV9vZmZzZXQob2JqLSZndDtidGYsIHRhZ190LSZndDtuYW1lX29mZiksCiYjNDM7CQkJICAgRFlOTE9BRF9ERUNMX1RBRykgIT0gMCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIGEgZGVjbCB0YWcmIzM5O3MgdHlwZSBmaWVsZCBwb2ludHMgYXQgdGhlIGVudGl0eSBpdCBkZWNvcmF0ZXMgKi8KJiM0MzsJCWZuX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLSZndDtidGYsIHRhZ190LSZndDt0eXBlKTsKJiM0MzsJCWlmICghYnRmX2lzX2Z1bmMoZm5fdCkgfHwgYnRmX2Z1bmNfbGlua2FnZShmbl90KSAhPSBCVEZfRlVOQ19HTE9CQUwpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7cHJvZyAmIzM5OyVzJiMzOTs6ICYjMzQ7IERZTkxPQURfREVDTF9UQUcKJiM0MzsJCQkJJiMzNDsgZGVjbCB0YWcgbXVzdCBiZSBhcHBsaWVkIHRvIGEgZ2xvYmFsIGZ1bmN0aW9uXG4mIzM0OywKJiM0MzsJCQkJcHJvZy0mZ3Q7bmFtZSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotJmd0O2J0ZiwgZm5fdC0mZ3Q7bmFtZV9vZmYpLCBwcm9nLSZndDtuYW1lKSAhPSAwKQomIzQzOwkJCWNvbnRpbnVlOyAgIC8qIHRhZyBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHByb2dyYW0gKi8KJiM0MzsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgewogCWVudW0gYnBmX3Byb2dfdHlwZSBwcm9nX3R5cGU7CiAJY29uc3QgY2hhciAqY3R4X25hbWU7CkBAIC03NTMwLDcgJiM0Mzs3NTc4LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXQKIAkJICovCiAJCWlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIXByb2ctJmd0O2F1dG9sb2FkKQomIzQzOwkJaWYgKHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpCiAJCQljb250aW51ZTsKIAogCQllcnIgPSBicGZfb2JqZWN0X19yZWxvY2F0ZV9jYWxscyhvYmosIHByb2cpOwpAQCAtNzU2Niw3ICYjNDM7NzYxNCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0CiAJCXByb2cgPSAmYW1wO29iai0mZ3Q7cHJvZ3JhbXNbaV07CiAJCWlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIXByb2ctJmd0O2F1dG9sb2FkKQomIzQzOwkJaWYgKHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpCiAJCQljb250aW51ZTsKIAogCQkvKiBQcm9jZXNzIGRhdGEgcmVsb3MgZm9yIG1haW4gcHJvZ3JhbXMgKi8KQEAgLTgwNTUsNyAmIzQzOzgxMDMsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfbG9hZF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZwogCQkJbG9nX2J1ZiA9IHByb2ctJmd0O2xvZ19idWY7CiAJCQlsb2dfYnVmX3NpemUgPSBwcm9nLSZndDtsb2dfc2l6ZTsKIAkJCW93bl9sb2dfYnVmID0gZmFsc2U7Ci0JCX0gZWxzZSBpZiAob2JqLSZndDtsb2dfYnVmKSB7CiYjNDM7CQl9IGVsc2UgaWYgKG9iai0mZ3Q7bG9nX2J1ZiAmYW1wOyZhbXA7IHByb2ctJmd0O2xvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykgewogCQkJbG9nX2J1ZiA9IG9iai0mZ3Q7bG9nX2J1ZjsKIAkJCWxvZ19idWZfc2l6ZSA9IG9iai0mZ3Q7bG9nX3NpemU7CiAJCQlvd25fbG9nX2J1ZiA9IGZhbHNlOwpAQCAtODM5OCwxMCAmIzQzOzg0NDYsMTQgQEAgYnBmX29iamVjdF9fbG9hZF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgbG9nX2xldmVsKQogCQlwcm9nID0gJmFtcDtvYmotJmd0O3Byb2dyYW1zW2ldOwogCQlpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpCiAJCQljb250aW51ZTsKLQkJaWYgKCFwcm9nLSZndDthdXRvbG9hZCkgewotCQkJcHJfZGVidWcoJiMzNDtwcm9nICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBsb2FkaW5nXG4mIzM0OywgcHJvZy0mZ3Q7bmFtZSk7CiYjNDM7CQlpZiAocHJvZy0mZ3Q7bG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKSB7CiYjNDM7CQkJcHJfZGVidWcoJiMzNDtwcm9nICYjMzk7JXMmIzM5Ozogc2tpcHBlZCBsb2FkaW5nLCBsb2FkIHR5cGUgaXMgJXNcbiYjMzQ7LAomIzQzOwkJCQkgcHJvZy0mZ3Q7bmFtZSwKJiM0MzsJCQkJIHByb2ctJmd0O2xvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyA/CiYjNDM7CQkJCSAmIzM0O2R5bmFtaWMmIzM0OyA6ICYjMzQ7ZGlzYWJsZWQmIzM0Oyk7CiAJCQljb250aW51ZTsKIAkJfQomIzQzOwogCQlwcm9nLSZndDtsb2dfbGV2ZWwgfD0gbG9nX2xldmVsOwogCiAJCWlmIChvYmotJmd0O2dlbl9sb2FkZXIpCkBAIC04NDY0LDYgJiM0Mzs4NTE2LDIyIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X3Byb2dzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0CiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KIAkJfQomIzQzOwomIzQzOwkJaWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gcHJvZ19oYXNfZHlubG9hZF90YWcob2JqLCBwcm9nKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQlpZiAoZXJyICZndDsgMCkgewomIzQzOwkJCWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCXByX3dhcm4oJiMzNDtwcm9nICYjMzk7JXMmIzM5OzogZmFpbGVkIHRvIGFwcGx5ICYjMzQ7IERZTkxPQURfREVDTF9UQUcKJiM0MzsJCQkJCSYjMzQ7IGRlY2wgdGFnOiAlc1xuJiMzNDssCiYjNDM7CQkJCQlwcm9nLSZndDtuYW1lLCBlcnJzdHIoZXJyKSk7CiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtOTA3NSwxNSAmIzQzOzkxNDMsMjIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCW9iai0mZ3Q7YnRmX21vZHVsZXNfbG9hZGVkID0gZmFsc2U7CiAJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVzKTsKIAotCS8qIGNsZWFuIHVwIHZtbGludXggQlRGICovCi0JYnRmX19mcmVlKG9iai0mZ3Q7YnRmX3ZtbGludXgpOwotCW9iai0mZ3Q7YnRmX3ZtbGludXggPSBOVUxMOwomIzQzOwkvKiBUaGUgYnRmX3ZtbGludXggZGF0YSBpcyBuZWVkZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcywKJiM0MzsJICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFvYmotJmd0O2hhc19keW5sb2FkX3Byb2dzKSB7CiYjNDM7CQlidGZfX2ZyZWUob2JqLSZndDtidGZfdm1saW51eCk7CiYjNDM7CQlvYmotJmd0O2J0Zl92bWxpbnV4ID0gTlVMTDsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X3Bvc3RfbG9hZF9jbGVhbnVwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7Ci0JLyogY2xlYW4gdXAgZmRfYXJyYXkgKi8KLQl6ZnJlZSgmYW1wO29iai0mZ3Q7ZmRfYXJyYXkpOwomIzQzOwkvKiBUaGUgZmQgYXJyYXkgaXMgbmVlZGVkIGZvciBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMsCiYjNDM7CSAqIHNvIGRlZmVyIGZyZWVpbmcgaXQgaW4gdGhhdCBjYXNlIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBsaWZldGltZS4KJiM0MzsJICovCiYjNDM7CWlmICghb2JqLSZndDtoYXNfZHlubG9hZF9wcm9ncyB8fCAhb2JqLSZndDtmZF9hcnJheV9jbnQpCiYjNDM7CQl6ZnJlZSgmYW1wO29iai0mZ3Q7ZmRfYXJyYXkpOwogCiAJLyogY2xlYW4gdXAgQlRGICovCiAJYnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopOwpAQCAtOTY3Nyw2ICYjNDM7OTc1Miw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJY2xvc2Uob2JqLSZndDtqdW1wdGFibGVfbWFwc1tpXS5mZCk7CiAJemZyZWUoJmFtcDtvYmotJmd0O2p1bXB0YWJsZV9tYXBzKTsKIAomIzQzOwl6ZnJlZSgmYW1wO29iai0mZ3Q7ZmRfYXJyYXkpOwomIzQzOwogCWZyZWUob2JqKTsKIH0KIApAQCAtOTc5OSwxNiAmIzQzOzk4NzYsMTUgQEAgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX3NlY3Rpb25fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpCiAKIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKIHsKLQlyZXR1cm4gcHJvZy0mZ3Q7YXV0b2xvYWQ7CiYjNDM7CXJldHVybiBwcm9nLSZndDtsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE87CiB9CiAKLWludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvbG9hZCkKJiM0MztpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGF1dG9sb2FkKQogewotCWlmIChwcm9nLSZndDtvYmotJmd0O3N0YXRlICZndDs9IE9CSl9MT0FERUQpCiYjNDM7CWlmIChhdXRvbG9hZCAhPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyAmYW1wOyZhbXA7IGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCkKIAkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiAKLQlwcm9nLSZndDthdXRvbG9hZCA9IGF1dG9sb2FkOwotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgYXV0b2xvYWQpOwogfQogCiBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKQEAgLTE1MTExLDcgJiM0MzsxNTE4Nyw3IEBAIGludCBicGZfb2JqZWN0X19hdHRhY2hfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3Rfc2tlbGV0b24gKnMpCiAJCXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyA9ICpwcm9nX3NrZWwtJmd0O3Byb2c7CiAJCXN0cnVjdCBicGZfbGluayAqKmxpbmsgPSBwcm9nX3NrZWwtJmd0O2xpbms7CiAKLQkJaWYgKCFwcm9nLSZndDthdXRvbG9hZCB8fCAhcHJvZy0mZ3Q7YXV0b2F0dGFjaCkKJiM0MzsJCWlmIChwcm9nLSZndDtsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gfHwgIXByb2ctJmd0O2F1dG9hdHRhY2gpCiAJCQljb250aW51ZTsKIAogCQkvKiBhdXRvLWF0dGFjaGluZyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIHByb2dyYW0gKi8KQEAgLTE1MjIxLDMgJiM0MzsxNTI5NywxMzYgQEAgdm9pZCBicGZfb2JqZWN0X19kZXN0cm95X3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKQogCWZyZWUocy0mZ3Q7cHJvZ3MpOwogCWZyZWUocyk7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfb2JqZWN0ICpvYmo7CiYjNDM7CWNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lOwomIzQzOwomIzQzOwlvYmogPSBwcm9nLSZndDtvYmo7CiYjNDM7CWlmICghb2JqKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIER5bmFtaWNhbGx5LWxvYWRlZCBwcm9ncmFtcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ2VuX2xvYWRlci4KJiM0MzsJICogVGhpcyBpcyBiZWNhdXNlIGJwZl9vYmplY3RfbG9hZF9wcm9nIGlzIG5vdCBjYWxsZWQgZm9yCiYjNDM7CSAqIGR5bmFtaWNsb2FkIHByb2dyYW1zLCBzbyBkeW5hbWljbG9hZCBwcm9ncmFtcyBhcmUgbm90IHZpc2libGUKJiM0MzsJICogdG8gZ2VuX2xvYWRlci4gRm9yIHRoaXMgcmVhc29uLCBwcmV2ZW50IGNhbGxpbmcKJiM0MzsJICogYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZCB3aGVuIGdlbl9sb2FkZXIgd2FzIHVzZWQgdG8KJiM0MzsJICogZ2VuZXJhdGUgYSBCUEYgb2JqZWN0IGxvYWRlci4KJiM0MzsJICogQSBnZW5fbG9hZGVyIGltcGxlbWVudGF0aW9uIGlzIGJlaW5nIGNhbGxlZCBmb3IgcHJvZ3JhbXMgd2l0aAomIzQzOwkgKiBsb2FkIHR5cGUgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kIGRlZmluZXMgaXRzIG93biBtb2RlbCBmb3IKJiM0MzsJICogbG9hZGluZyBCUEYgcHJvZ3JhbXMuCiYjNDM7CSAqLwomIzQzOwlpZiAob2JqLSZndDtnZW5fbG9hZGVyKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApOwomIzQzOwomIzQzOwlpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpCiYjNDM7CQlyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJYXR0YWNoX25hbWUgPSBzdHJjaHIocHJvZy0mZ3Q7c2VjX25hbWUsICYjMzk7LyYjMzk7KTsKJiM0MzsJaWYgKCFhdHRhY2hfbmFtZSB8fCBzdHJjaHIoYXR0YWNoX25hbWUsICYjMzk7OiYjMzk7KSkgewomIzQzOwkJLyogT25seSByZWplY3QgcHJvZ3JhbXMgdGhhdCByZXF1aXJlIEJURi1iYXNlZCBhdHRhY2ggdGFyZ2V0CiYjNDM7CQkgKiByZXNvbHV0aW9uIChpbmRpY2F0ZWQgYnkgdGhlIFNFQ19BVFRBQ0hfQlRGIGZsYWcpLiBTdWNoCiYjNDM7CQkgKiBwcm9ncmFtcyBuZWVkIHRoZSBzZWN0aW9uIG5hbWUgcGFyc2VkIGZvciB0aGUgYXR0YWNoIHRhcmdldAomIzQzOwkJICogZnVuY3Rpb24gbmFtZSAoYWZ0ZXIgJiMzOTsvJiMzOTspIGFuZCBvcHRpb25hbGx5IHRoZSBtb2R1bGUgbmFtZQomIzQzOwkJICogKGJlZm9yZSAmIzM5OzomIzM5OykgZm9yIGxpYmJwZl9maW5kX2F0dGFjaF9idGZfaWQuCiYjNDM7CQkgKgomIzQzOwkJICogUHJvZ3JhbXMgbGlrZSBTRUMoJiMzNDtjbGFzc2lmaWVyJiMzNDspLCBTRUMoJiMzNDtzb2NrZXQmIzM0OyksIGV0Yy4gZG8KJiM0MzsJCSAqIG5vdCByZXF1aXJlIEJURiBhdHRhY2ggcmVzb2x1dGlvbiBhbmQgY2FuIHNhZmVseSB1c2UKJiM0MzsJCSAqIGR5bmFtaWMgbG9hZGluZyBkZXNwaXRlIGhhdmluZyBubyAmIzM5Oy8mIzM5OyBpbiB0aGVpciBzZWN0aW9uCiYjNDM7CQkgKiBuYW1lLiBUaGUgQlRGIGd1YXJkIGluIGxpYmJwZl9wcmVwYXJlX3Byb2dfbG9hZCAoY2hlY2tpbmcKJiM0MzsJCSAqIFNFQ19BVFRBQ0hfQlRGKSBpcyB0aGUgYXV0aG9yaXRhdGl2ZSBjaGVjazsgdGhpcyBpcyBhbgomIzQzOwkJICogZWFybHktcmVqZWN0IGZvciBwcm9ncmFtcyB0aGF0IHdvdWxkIGZhaWwgdGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWxvbmcgZmxhZ3MgPSBwcm9nLSZndDtzZWNfZGVmID8KJiM0MzsJCQkobG9uZylwcm9nLSZndDtzZWNfZGVmLSZndDtjb29raWUgOiBTRUNfQVRUQUNIX0JURjsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgU0VDX0FUVEFDSF9CVEYpICZhbXA7JmFtcDsgIXByb2ctJmd0O2F0dGFjaF9idGZfaWQpCiYjNDM7CQkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2JqLSZndDtoYXNfZHlubG9hZF9wcm9ncyA9IHRydWU7CiYjNDM7CXByb2ctJmd0O2xvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDOwomIzQzOwlwcm9nLSZndDthdXRvYXR0YWNoID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJaWYgKCFwcm9nKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmIChwcm9nLSZndDtvYmotJmd0O3N0YXRlICZndDs9IE9CSl9MT0FERUQpCiYjNDM7CQlyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM6CiYjNDM7CQlyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZChwcm9nKTsKJiM0MzsJY2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzoKJiM0MzsJY2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ6CiYjNDM7CQkvKgomIzQzOwkJICogTGVhdmluZyB0aGUgZHluYW1pYyBzdGF0ZTogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJlZAomIzQzOwkJICogYXV0b2F0dGFjaCBiZWNhdXNlIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyBhcmUgYXR0YWNoZWQKJiM0MzsJCSAqIGV4cGxpY2l0bHkuIFJlc3RvcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQgbG9hZCB0eXBlLgomIzQzOwkJICovCiYjNDM7CQlpZiAocHJvZy0mZ3Q7bG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKQomIzQzOwkJCXByb2ctJmd0O2F1dG9hdHRhY2ggPSB0cnVlOwomIzQzOwkJcHJvZy0mZ3Q7bG9hZF90eXBlID0gdHlwZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2VudW0gYnBmX3Byb2dfbG9hZF90eXBlIGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHByb2ctJmd0O2xvYWRfdHlwZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIGJwZl9vYmplY3RfX2xvYWRfcHJvZ3MuCiYjNDM7ICogRHluYW1pY2FsbHktbG9hZGVkIHByb2dyYW0gZGF0YSBpcyBpbml0aWFsaXplZCBvbiBvYmplY3QgbG9hZC4KJiM0MzsgKiBQb3N0LWxvYWQgaW5pdGlhbGl6YXRpb24gaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MztpbnQKJiM0MzticGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwomIzQzOwomIzQzOwlvYmogPSBwcm9nLSZndDtvYmo7CiYjNDM7CWlmICghb2JqIHx8IG9iai0mZ3Q7c3RhdGUgJmx0OyBPQkpfTE9BREVEKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSB8fCBwcm9nLSZndDtsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpCiYjNDM7CQlyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJcHJvZy0mZ3Q7bG9nX2xldmVsIHw9IGV4dHJhX2xvZ19sZXZlbDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX29iamVjdF9sb2FkX3Byb2cob2JqLCBwcm9nLCBwcm9nLSZndDtpbnNucywgcHJvZy0mZ3Q7aW5zbnNfY250LAomIzQzOwkJCQkgICBvYmotJmd0O2xpY2Vuc2UsIG9iai0mZ3Q7a2Vybl92ZXJzaW9uLCAmYW1wO3Byb2ctJmd0O2ZkKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcHJfd2FybigmIzM0O3Byb2cgJiMzOTslcyYjMzk7OiBmYWlsZWQgdG8gZHluYW1pY2FsbHkgbG9hZDogJWRcbiYjMzQ7LCBwcm9nLSZndDtuYW1lLCBlcnIpOwomIzQzOwkJcHJvZy0mZ3Q7bG9nX2xldmVsICZhbXA7PSB+ZXh0cmFfbG9nX2xldmVsOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcm9nLSZndDtsb2dfbGV2ZWwgJmFtcDs9IH5leHRyYV9sb2dfbGV2ZWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXByb2cgfHwgcHJvZy0mZ3Q7bG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKQomIzQzOwkJcmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYnV0IHJldGFpbiB0aGUgcHJvZ3JhbSYjMzk7cyBkYXRhIHRvCiYjNDM7CSAqIHN1cHBvcnQgcmVsb2FkaW5nIHRoZSBwcm9ncmFtIGlmIGl0IGlzIHJlcXVpcmVkIGFnYWluLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gemNsb3NlKHByb2ctJmd0O2ZkKTsKJiM0MzsJcmV0dXJuIGVyciA/IGxpYmJwZl9lcnIoLWVycm5vKSA6IDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKaW5kZXggYjk2NWFkNTcxNTQwMy4uYTU2MDY4ZjBmMTEyMiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5oCkBAIC0zNTYsNiAmIzQzOzM1NiwxOSBAQCBMSUJCUEZfQVBJIGludCBsaWJicGZfYXR0YWNoX3R5cGVfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLAogTElCQlBGX0FQSSBpbnQgbGliYnBmX2ZpbmRfdm1saW51eF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSk7CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBwcm9ncmFtIGxvYWQgdHlwZToKJiM0MzsgKgomIzQzOyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOiB0aGUgcHJvZ3JhbSBpcyBub3QgbG9hZGVkLgomIzQzOyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE86IHRoZSBwcm9ncmFtIGlzIGF1dG9sb2FkZWQgd2hlbiB0aGUgYnBmX29iamVjdCBpcyBsb2FkZWQuCiYjNDM7ICogLSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzogdGhlIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBhdHRhY2hlZCBkeW5hbWljYWxseS4KJiM0MzsgKi8KJiM0MztlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB7CiYjNDM7CUJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCA9IDAsCiYjNDM7CUJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLAomIzQzOwlCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQywKJiM0Mzt9OwomIzQzOwogLyogQWNjZXNzb3JzIG9mIGJwZl9wcm9ncmFtICovCiBzdHJ1Y3QgYnBmX3Byb2dyYW07CiAKQEAgLTM3Niw3ICYjNDM7Mzg5LDE4IEBAIExJQkJQRl9BUEkgdm9pZCBicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwogTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7CiBMSUJCUEZfQVBJIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7Ci1MSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvbG9hZCk7CiYjNDM7LyoqCiYjNDM7ICogQGJyaWVmICoqYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpKiogaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkcwomIzQzOyAqIGNvbXBhdGliaWxpdHk7ICoqYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSoqIGlzIHRoZSBwcmVmZXJyZWQgQVBJLgomIzQzOyAqIFRoZSBlbnVtJiMzOTtzIG51bWJlcmluZyAoRElTQUJMRUQ9MCwgQVVUTz0xLCBEWU5BTUlDPTIpIG1hdGNoZXMgdGhlIHByZXZpb3VzCiYjNDM7ICogYm9vbCBzZW1hbnRpY3MgKGZhbHNlPTAsIHRydWU9MSksIHNvIGV4aXN0aW5nIGJvb2wgY2FsbGVycyBrZWVwIGNvbXBpbGluZwomIzQzOyAqIGFuZCBiZWhhdmluZyB1bmNoYW5nZWQuIE9ubHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kCiYjNDM7ICogQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGFyZSBhY2NlcHRlZCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwKJiM0MzsgKiBhdXRvbG9hZCBvbi9vZmYgbWVhbmluZzsgdXNlIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkgdG8gc2V0CiYjNDM7ICogQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMuCiYjNDM7ICovCiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiYjNDM7CQkJCQkgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpOwogTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7CiBMSUJCUEZfQVBJIHZvaWQgYnBmX3Byb2dyYW1fX3NldF9hdXRvYXR0YWNoKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgYm9vbCBhdXRvYXR0YWNoKTsKIApAQCAtMjA3OCw2ICYjNDM7MjEwMiwxMiBAQCBMSUJCUEZfQVBJIGludCBsaWJicGZfdW5yZWdpc3Rlcl9wcm9nX2hhbmRsZXIoaW50IGhhbmRsZXJfaWQpOwogICovCiBMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xvbmUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfbG9hZF9vcHRzICpvcHRzKTsKIAomIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKJiM0MzsJCQkJCSAgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgbG9hZHR5cGUpOwomIzQzO0xJQkJQRl9BUEkgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwomIzQzO0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgaW50IGV4dHJhX2xvZ19sZXZlbCk7CiYjNDM7TElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpOwomIzQzOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8qIGV4dGVybiAmIzM0O0MmIzM0OyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5tYXAgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXAKaW5kZXggMDhhYjJlYTg4MWZiNi4uNzQzMTJjOTVkMzI4NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYubWFwCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcApAQCAtNDYwLDYgJiM0Mzs0NjAsMTAgQEAgTElCQlBGXzEuOC4wIHsKIAlnbG9iYWw6CiAJCWJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aTsKIAkJYnBmX3Byb2dyYW1fX2Nsb25lOwomIzQzOwkJYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHk7CiYjNDM7CQlicGZfcHJvZ3JhbV9fbG9hZF90eXBlOwomIzQzOwkJYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGU7CiYjNDM7CQlicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5OwogCQlidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjsKIAkJYnRmX19uZXdfZW1wdHlfb3B0czsKIH0gTElCQlBGXzEuNy4wOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzk5YzQzMDM0ZmY5MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmMKQEAgLTAsMCAmIzQzOzEsMjIyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2R5bmFtaWNsb2FkLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7LyogcHJvZzQgaXMgdGFnZ2VkIF9fbG9hZF9keW5hbWljIGluIHRoZSBzb3VyY2UgaW5zdGVhZCBvZiBiZWluZyBzZXQKJiM0MzsgKiBpbXBlcmF0aXZlbHk7IHZlcmlmeSB0aGF0IGFuIGV4cGxpY2l0IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkgY2FsbAomIzQzOyAqIGJlZm9yZSBsb2FkIG92ZXJyaWRlcyB0aGUgdGFnJiMzOTtzIGRlY2xhcmF0aXZlIGRlZmF1bHQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZHluYW1pY2xvYWRfdmVyaWZ5X292ZXJyaWRlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9keW5hbWljbG9hZCAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nNCwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldF9sb2FkX3R5cGVfZGlzYWJsZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzQpLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nNF9sb2FkX3R5cGVfb3ZlcnJpZGRlbiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyoga2VlcCB0aGUgb3RoZXIgZHluYW1pYy1sb2FkLW9ubHkgcHJvZ3JhbXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhpcyBsb2FkICovCiYjNDM7CWJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpOwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsKJiM0MzsJZXJyID0gdGVzdF9keW5hbWljbG9hZF9fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogcHJvZzQgd2FzIG5ldmVyIGxvYWRlZCwgc28gaXQgY2Fubm90IGJlIGxvYWRlZCBkeW5hbWljYWxseSBlaXRoZXIgKi8KJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC0mZ3Q7cHJvZ3MucHJvZzQsIDApOwomIzQzOwlBU1NFUlRfRVJSKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX292ZXJyaWRlJiMzNDspOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CXRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9keW5hbWljbG9hZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwlzdHJ1Y3QgdGVzdF9keW5hbWljbG9hZCAqc2tlbDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiB0aGUgX19sb2FkX2R5bmFtaWMgdGFnIGFsb25lLCB3aXRoIG5vIGltcGVyYXRpdmUgY2FsbCwgbXVzdCBzZXQKJiM0MzsJICogcHJvZzQmIzM5O3MgbG9hZCB0eXBlIGJlZm9yZSBpdCBpcyBldmVyIHRvdWNoZWQgYmVsb3cKJiM0MzsJICovCiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzQpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQywKJiM0MzsJCSAgICAgICAmIzM0O3Byb2c0X3RhZ19sb2FkX3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CWlmICghQVNTRVJUX0ZBTFNFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2c0KSwgJiMzNDtwcm9nNF9hdXRvYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBkb24mIzM5O3QgbG9hZCBwcm9nMSAqLwomIzQzOwlicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsKJiM0MzsJLyogcHJvZzIgaXMgYXV0b2xvYWQgKi8KJiM0MzsJYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTsKJiM0MzsKJiM0MzsJLyogcHJvZzMgaXMgZHluYW1pY2FsbHkgbG9hZGVkICovCiYjNDM7CWJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7CiYjNDM7CiYjNDM7CWVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2xvYWQoc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtza2VsX2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2F0dGFjaChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NrZWxfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiB0cmlnZ2VyIHRoZSBCUEYgcHJvZ3JhbXMgKi8KJiM0MzsJdXNsZWVwKDEpOwomIzQzOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMV9jYWxsZWQsICYjMzQ7cHJvZzFfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfVFJVRShza2VsLSZndDtic3MtJmd0O3Byb2cyX2NhbGxlZCwgJiMzNDtwcm9nMl9jYWxsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9GQUxTRShza2VsLSZndDtic3MtJmd0O3Byb2czX2NhbGxlZCwgJiMzNDtwcm9nM19jYWxsZWQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9GQUxTRShza2VsLSZndDtic3MtJmd0O3Byb2c0X2NhbGxlZCwgJiMzNDtwcm9nNF9jYWxsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIHByb2cxIGlzIGRpc2FibGVkIGZvciBsb2FkICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cxLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cxKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDt1bmxvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIHByb2cyIGlzIGF1dG9sb2FkICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cyLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X2F1dG9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBwcm9nMiBpcyBhdXRvbG9hZCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2cyKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDt1bmxvYWRfZHluYW1pY2FsbHlfYXV0b2xvYWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIHJlc2V0IHRoZSBjYWxsIGZsYWdzICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzJfY2FsbGVkID0gZmFsc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0ZBTFNFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzFfY2FsbGVkLCAmIzM0O3Byb2cxX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiBsb2FkIHByb2czICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2czLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xvYWRfZHluYW1pY2FsbHkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIGF0dGFjaCBwcm9nMyAqLwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLSZndDtwcm9ncy5wcm9nMyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdXNsZWVwKDEpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkLCAmIzM0O3Byb2czX2NhbGxlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24mIzM5O3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqLwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xpbmtfZGVzdHJveSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgZGV0YWNoICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzJfY2FsbGVkID0gZmFsc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiB1bmxvYWQgcHJvZzMgKi8KJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt1bmxvYWRfZHluYW1pY2FsbHkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIHJlbG9hZCBwcm9nMyAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMywgMCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5X3JlbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogcmVhdHRhY2ggcHJvZzMgKi8KJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIobGluaywgJiMzNDtyZWF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJdXNsZWVwKDEpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkLCAmIzM0O3Byb2czX2NhbGxlZF9yZWF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24mIzM5O3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqLwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xpbmtfZGVzdHJveV9yZWF0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogdmVyaWZ5IHJlZ3VsYXIgdW5sb2FkIGZvciBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbSwKJiM0MzsJICogdW5sb2FkIHByb2czIGFzIGEgcmVndWxhciBwcm9ncmFtCiYjNDM7CSAqLwomIzQzOwlicGZfcHJvZ3JhbV9fdW5sb2FkKHNrZWwtJmd0O3Byb2dzLnByb2czKTsKJiM0MzsKJiM0MzsJLyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgdW5sb2FkICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzJfY2FsbGVkID0gZmFsc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiByZWxvYWRpbmcgcHJvZzMgbXVzdCBmYWlsIGFzIGl0IHdhcyB1bmxvYWRlZCBhcyBhIHJlZ3VsYXIgcHJvZ3JhbSAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMywgMCk7CiYjNDM7CUFTU0VSVF9FUlIoZXJyLCAmIzM0O2xvYWRfZHluYW1pY2FsbHlfYWZ0ZXJfcmVndWxhcl91bmxvYWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIHJ1biBwcm9nNCAoZGVjbGFyYXRpdmVseSB0YWdnZWQpIHRocm91Z2ggdGhlIHNhbWUgZHluYW1pYwomIzQzOwkgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzMKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2c0LCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Byb2c0X2xvYWRfZHluYW1pY2FsbHkmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2c0KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssICYjMzQ7cHJvZzRfYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwl1c2xlZXAoMSk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nNF9jYWxsZWQsICYjMzQ7cHJvZzRfY2FsbGVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3Byb2c0X2xpbmtfZGVzdHJveSYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nNCk7CiYjNDM7CUFTU0VSVF9PSyhlcnIsICYjMzQ7cHJvZzRfdW5sb2FkX2R5bmFtaWNhbGx5JiMzNDspOwomIzQzOwomIzQzOwl0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpOwomIzQzOwomIzQzOwkvKiBzZXBhcmF0ZSBzY2VuYXJpbzogaW1wZXJhdGl2ZSBvdmVycmlkZSBvZiB0aGUgZGVjbGFyYXRpdmUgdGFnICovCiYjNDM7CWR5bmFtaWNsb2FkX3ZlcmlmeV9vdmVycmlkZSgpOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJdGVzdF9keW5hbWljbG9hZF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjOTFmNjY2NmM1MDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuYwpAQCAtMCwwICYjNDM7MSwxNjcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfbG9hZF90eXBlLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2xvYWRfdHlwZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwlzdHJ1Y3QgdGVzdF9sb2FkX3R5cGUgKnNrZWw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW4mIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIGRvbiYjMzk7dCBsb2FkIHByb2cxICovCiYjNDM7CWJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpOwomIzQzOwomIzQzOwkvKiBsb2FkIGFuZCBhdHRhY2ggcHJvZzIgKi8KJiM0MzsJYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTsKJiM0MzsJaWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2xvYWQoc2tlbC0mZ3Q7cHJvZ3MucHJvZzIpLCAmIzM0O3Byb2cyX2F1dG9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9keW5hbWljJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSBpcyBhIHRoaW4gZm9yd2FyZGVyIHRvIHNldF9sb2FkX3R5cGUoKSwKJiM0MzsJICogcmVzdHJpY3RlZCB0byBBVVRPL0RJU0FCTEVEIHRvIHByZXNlcnZlIGl0cyBvcmlnaW5hbCBib29sIG9uL29mZgomIzQzOwkgKiBtZWFuaW5nOyBpdCBkb2VzIGNoYW5nZSB0aGUgbG9hZCB0eXBlIG9mIGEgcHJvZ3JhbSB0aGF0IGlzbiYjMzk7dAomIzQzOwkgKiBjdXJyZW50bHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8uCiYjNDM7CSAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtJmd0O3Byb2dzLnByb2czLCBmYWxzZSk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXRfYXV0b2xvYWRfZmFsc2UmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZmFsc2UmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIHRydWUpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2F1dG9sb2FkX3RydWUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTywKJiM0MzsJCSAgICAgICAmIzM0O3Byb2czX2xvYWRfdHlwZV9hZnRlcl90cnVlJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBzZXRfYXV0b2xvYWQoKSBvbmx5IGFjY2VwdHMgQVVUTy9ESVNBQkxFRCwgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsCiYjNDM7CSAqIG9uL29mZiBtZWFuaW5nOyBEWU5BTUlDIG11c3QgZ28gdGhyb3VnaCBzZXRfbG9hZF90eXBlKCkKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtzZXRfYXV0b2xvYWRfZHluYW1pY19yZWplY3RlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLAomIzQzOwkJICAgICAgICYjMzQ7cHJvZzNfbG9hZF90eXBlX3VuY2hhbmdlZF9hZnRlcl9yZWplY3RlZF9hdXRvbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZHluYW1pY19lbnVtJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBsZWF2aW5nIERZTkFNSUMgZm9yIEFVVE8gbXVzdCByZXN0b3JlIGF1dG9hdHRhY2ggKHJlZ3Jlc3Npb24gdGVzdCBmb3IKJiM0MzsJICogdGhlIGF1dG9hdHRhY2ggcmVzaWR1ZSBidWc6IHNldF9keW5hbWljbG9hZCgpIGNsZWFycyBhdXRvYXR0YWNoLCBhbmQKJiM0MzsJICogbm90aGluZyB1c2VkIHRvIHJlc3RvcmUgaXQgb24gZXhpdCkKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXRfbG9hZF90eXBlX2F1dG8mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTywKJiM0MzsJCSAgICAgICAmIzM0O3Byb2czX2xvYWRfdHlwZV9hdXRvJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgJiMzNDtwcm9nM19hdXRvYXR0YWNoX3Jlc3RvcmVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiB0aGUgc2FtZSByZXNpZHVlIGNhbiByZWxheSB0aHJvdWdoIERJU0FCTEVEIGFuZCByZXN1cmZhY2Ugb24gYSBsYXRlcgomIzQzOwkgKiBESVNBQkxFRCAtJmd0OyBBVVRPIHRyYW5zaXRpb24sIHNvIHRoZSBmaXggbXVzdCBjb3ZlciBib3RoIGV4aXQgZWRnZXMKJiM0MzsJICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzZXRfbG9hZF90eXBlX2R5bmFtaWNfYWdhaW4mIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9kaXNhYmxlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC0mZ3Q7cHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldF9sb2FkX3R5cGVfYXV0b192aWFfZGlzYWJsZWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC0mZ3Q7cHJvZ3MucHJvZzMpLAomIzQzOwkJCSAmIzM0O3Byb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRfdmlhX2Rpc2FibGVkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBhbiBvdXQtb2YtcmFuZ2UgbG9hZCB0eXBlIGlzIHJlamVjdGVkICovCiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czLCAoZW51bSBicGZfcHJvZ19sb2FkX3R5cGUpOTk5KTsKJiM0MzsJaWYgKCFBU1NFUlRfRVJSKGVyciwgJiMzNDtzZXRfbG9hZF90eXBlX2ludmFsaWQmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIGNoYW5nZSB0aGUgdHlwZSBiYWNrIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDIGZvciB0aGUgcmVzdCBvZiB0aGUgdGVzdCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9keW5hbWljX2ZpbmFsJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtJmd0O3Byb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsCiYjNDM7CQkgICAgICAgJiMzNDtwcm9nM19sb2FkX3R5cGVfZmluYWwmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IHRlc3RfbG9hZF90eXBlX19sb2FkKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9sb2FkJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2cyKSwgJiMzNDtwcm9nMl9hdXRvYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpZiAoIUFTU0VSVF9GQUxTRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLSZndDtwcm9ncy5wcm9nMyksICYjMzQ7cHJvZzNfYXV0b2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogbG9hZGVkIHByb2dyYW0gdHlwZSBjYW5ub3QgYmUgY2hhbmdlZCAqLwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLSZndDtwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTsKJiM0MzsJQVNTRVJUX0VSUihlcnIsICYjMzQ7c2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSB0ZXN0X2xvYWRfdHlwZV9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CXVzbGVlcCgxKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0ZBTFNFKHNrZWwtJmd0O2Jzcy0mZ3Q7cHJvZzFfY2FsbGVkLCAmIzM0O3Byb2cxX2NhbGxlZCYjMzQ7KTsKJiM0MzsJQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nMl9jYWxsZWQsICYjMzQ7cHJvZzJfY2FsbGVkJiMzNDspOwomIzQzOwlBU1NFUlRfRkFMU0Uoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkJiMzNDspOwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLSZndDtwcm9ncy5wcm9nMywgMCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtsb2FkX2R5bmFtaWNhbGx5XzEmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtJmd0O3Byb2dzLnByb2czLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2xvYWRfZHluYW1pY2FsbHlfMiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogYXR0YWNoIHByb2czICovCiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtJmd0O3Byb2dzLnByb2czKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwl1c2xlZXAoMSk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX1RSVUUoc2tlbC0mZ3Q7YnNzLSZndDtwcm9nM19jYWxsZWQsICYjMzQ7cHJvZzNfY2FsbGVkX2FnYWluJiMzNDspKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwkvKiBkZXRhY2ggcHJvZzMgYXMgdGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3kgZG9lc24mIzM5O3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqLwomIzQzOwllcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJQVNTRVJUX09LKGVyciwgJiMzNDtsaW5rX2Rlc3Ryb3kmIzM0Oyk7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJdGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNmY1YTVjYjg5ODAzMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmMKQEAgLTAsMCAmIzQzOzEsNDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7Ym9vbCBwcm9nMV9jYWxsZWQgPSBmYWxzZTsKJiM0Mztib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlOwomIzQzO2Jvb2wgcHJvZzNfY2FsbGVkID0gZmFsc2U7CiYjNDM7Ym9vbCBwcm9nNF9jYWxsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXByb2cxX2NhbGxlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXByb2cyX2NhbGxlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7aW50IHByb2czKGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXByb2czX2NhbGxlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAvc3lzX2VudGVyJiMzNDspCiYjNDM7X19sb2FkX2R5bmFtaWMKJiM0MztpbnQgcHJvZzQoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzRfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2Q5YjgxNjkxZDdhZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jCkBAIC0wLDAgJiM0MzsxLDMxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzO2Jvb2wgcHJvZzFfY2FsbGVkID0gZmFsc2U7CiYjNDM7Ym9vbCBwcm9nMl9jYWxsZWQgPSBmYWxzZTsKJiM0Mztib29sIHByb2czX2NhbGxlZCA9IGZhbHNlOwomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgcHJvZzEoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzFfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgcHJvZzIoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzJfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cC9zeXNfZW50ZXImIzM0OykKJiM0MztpbnQgcHJvZzMoY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcHJvZzNfY2FsbGVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTkKCQkJCQkJCW91dHB1dDogNzMKCQkJCQkJCXRob3VnaHRzOiA5MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbjogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0byBldmFsdWF0ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHdoZXRoZXIgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwgY29kZSB0aGF0IHN5emthbGxlciB3b3VsZCB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIHJlbGF0ZWQgbWFwIGFuZCB0ZXN0IGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBuby1nbyBmb3IgZnV6emluZywgc2luY2UgaXQmIzM5O3MgYWxsIGluIHRoZSBgdG9vbHMvYCBkaXJlY3Rvcnkg4oCTIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGxpYmJwZiB1c2VyLXNwYWNlIGxpYnJhcnkuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc3RhdGVzIHdoYXQgY29uc3RpdHV0ZXMgY2hhbmdlcyB0aGF0ICp3b3VsZG4mIzM5O3QqIHdhcnJhbnQgZnV6emluZywgYW5kIHRoaXMgc2VlbXMgdG8gYWxpZ24uIEl0JiMzOTtzIHVzZXItc3BhY2UgY29kZTsgc3l6a2FsbGVyJiMzOTtzIHByaW1hcnkgZm9jdXMgaXMgdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBzeXNjYWxsIGludGVyZmFjZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyB1c2VyLXNwYWNlIGNvZGUgaXNuJiMzOTt0IHNvbWVob3cgaW5mbHVlbmNpbmcga2VybmVsIGV4ZWN1dGlvbiBkaXJlY3RseSAoYmV5b25kIG5vcm1hbCBzeXNjYWxsLWJhc2VkIGludGVyYWN0aW9uKSwgYnV0IEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBpbmhlcmVudGx5IHRoYXQgd291bGQuCgpNeSB0aG91Z2h0IHByb2Nlc3MgaXMgdGhpczogZG9lcyB0aGlzIGNoYW5nZSBwb3RlbnRpYWxseSAqZXhwb3NlKiBuZXcga2VybmVsIGJ1Z3MgdmlhIGFuIHVwZGF0ZWQgbGlicmFyeSBvciBzeXNjYWxsLCBvciBkb2VzIHRoZSBjaGFuZ2VkIGxpYnJhcnkgZG8gc29tZXRoaW5nIHRoYXQmIzM5O3Mgb25seSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCwgb3Igc29tZXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZXhjbHVkZWQ/IE5vLCBmcm9tIHRoaXMgYW5hbHlzaXMsIGl0IGlzIGFsbCBgdG9vbHMvYC4gTGliYnBmICp1c2VzKiBzeXNjYWxscywgc3VyZSwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgaXMganVzdCBtb2RpZnlpbmcgdGhlIHVzZXItc3BhY2Ugc2lkZS4gTXkgY29uY2x1c2lvbiBpcyB0aGF0IGV2ZW4gaWYgdGhlIG5ldyBjb2RlIGNvdWxkIGNhdXNlIGtlcm5lbCBpc3N1ZXMsIGl0IHdpbGwgbm90IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsIGZvciBmdXp6aW5nLgoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZGlmZiBwYXRocywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIE9rYXksIGRvdWJsZS1jaGVja2VkLiBOb3RoaW5nIGlzIG91dHNpZGUgb2YgYHRvb2xzL2AuIFRoYXQmIzM5O3MgaXQsIHRoZW4uCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcGF0Y2ggaXMgc29sZWx5IHdpdGhpbiB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgcmVsYXRlZCB0ZXN0cy4gSXQgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzeXprYWxsZXIgd291bGQgZGlyZWN0bHkgZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXItc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgc2VsZnRlc3RzIGluIHRoZSB0b29scy8gZGlyZWN0b3J5LiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiB0aGF0IGNhbiBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToyMTwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MjE6MzYuMzk3Mzg5OTM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzY4ODI2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MjE6MzYuMzk3Mzk3OTM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAzODczMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTdlMzkyODU3YmNjYmY1NzI2ZmZkNDk3NGNhOTA2NmEyNmJmNDE2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxOToyMTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmggYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcXG5pbmRleCA5ZDE2MGI1YjljMGVlLi41Mjk3OGYwZTA0NTM5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxcbkBAIC0yMTgsNiArMjE4LDExIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcXG4gI2RlZmluZSBfX2FyZ191bnRydXN0ZWQgX19hdHRyaWJ1dGUoKGJ0Zl9kZWNsX3RhZyhcXFwiYXJnOnVudHJ1c3RlZFxcXCIpKSlcXG4gI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFxcXCJhcmc6YXJlbmFcXFwiKSkpXFxuIFxcbisvKiBNYXJrIGEgQlBGIHByb2dyYW0gdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGluc3RlYWQgb2YgYXV0b2xvYWRlZCxcXG4rICogZXF1aXZhbGVudCB0byBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShwcm9nLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykuXFxuKyAqL1xcbisjZGVmaW5lIF9fbG9hZF9keW5hbWljIF9fYXR0cmlidXRlX18oKGJ0Zl9kZWNsX3RhZyhcXFwibG9hZHR5cGU6ZHluYW1pY1xcXCIpKSlcXG4rXFxuICNpZm5kZWYgX19fYnBmX2NvbmNhdFxcbiAjZGVmaW5lIF9fX2JwZl9jb25jYXQoYSwgYikgYSAjIyBiXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IGI3NDljMDE3NDJlZTAuLjVkNThkYmYyNTIzNGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtNDk0LDcgKzQ5NCw3IEBAIHN0cnVjdCBicGZfcHJvZ3JhbSB7XFxuIFxcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuIFxcbiBcXHRpbnQgZmQ7XFxuLVxcdGJvb2wgYXV0b2xvYWQ7XFxuK1xcdGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGxvYWRfdHlwZTtcXG4gXFx0Ym9vbCBhdXRvYXR0YWNoO1xcbiBcXHRib29sIHN5bV9nbG9iYWw7XFxuIFxcdGJvb2wgbWFya19idGZfc3RhdGljO1xcbkBAIC03MjUsNiArNzI1LDcgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXG4gXFx0Ym9vbCBoYXNfc3ViY2FsbHM7XFxuIFxcdGJvb2wgaGFzX3JvZGF0YTtcXG4rXFx0Ym9vbCBoYXNfZHlubG9hZF9wcm9ncztcXG4gXFxuIFxcdHN0cnVjdCBicGZfZ2VuICpnZW5fbG9hZGVyO1xcbiBcXG5AQCAtODcyLDExICs4NzMsMTEgQEAgYnBmX29iamVjdF9faW5pdF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4gXFx0ICogYXV0b2xvYWQgc2V0IHRvIGZhbHNlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNlY19uYW1lWzBdID09ICc/Jykge1xcbi1cXHRcXHRwcm9nLVxcdTAwM2VhdXRvbG9hZCA9IGZhbHNlO1xcbitcXHRcXHRwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XFxuIFxcdFxcdC8qIGZyb20gbm93IG9uIGZvcmdldCB0aGVyZSB3YXMgPyBpbiBzZWN0aW9uIG5hbWUgKi9cXG4gXFx0XFx0c2VjX25hbWUrKztcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cHJvZy1cXHUwMDNlYXV0b2xvYWQgPSB0cnVlO1xcbitcXHRcXHRwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTztcXG4gXFx0fVxcbiBcXG4gXFx0cHJvZy1cXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XFxuQEAgLTExMjUsOSArMTEyNiwxMCBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9zdF9vcHNfcHJvZ3JhbShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxcbiB9XFxuIFxcbiAvKiBGb3IgZWFjaCBzdHJ1Y3Rfb3BzIHByb2dyYW0gUCwgcmVmZXJlbmNlZCBmcm9tIHNvbWUgc3RydWN0X29wcyBtYXAgTSxcXG4tICogZW5hYmxlIFAuYXV0b2xvYWQgaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaCBNLmF1dG9jcmVhdGUgaXMgdHJ1ZSxcXG4tICogZGlzYWJsZSBQLmF1dG9sb2FkIGlmIGZvciBhbGwgTXMgTS5hdXRvY3JlYXRlIGlzIGZhbHNlLlxcbi0gKiBEb24ndCBjaGFuZ2UgUC5hdXRvbG9hZCBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy5cXG4rICogc2V0IFAncyBsb2FkIHR5cGUgdG8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gaWYgdGhlcmUgYXJlIE1zIGZvciB3aGljaFxcbisgKiBNLmF1dG9jcmVhdGUgaXMgdHJ1ZSwgb3IgdG8gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGlmIGZvciBhbGwgTXNcXG4rICogTS5hdXRvY3JlYXRlIGlzIGZhbHNlLlxcbisgKiBEb24ndCBjaGFuZ2UgUCdzIGxvYWQgdHlwZSBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuQEAgLTExNjMsNyArMTE2NSw4IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHVzZV9jbnQpXFxuLVxcdFxcdFxcdHByb2ctXFx1MDAzZWF1dG9sb2FkID0gc2hvdWxkX2xvYWQ7XFxuK1xcdFxcdFxcdHByb2ctXFx1MDAzZWxvYWRfdHlwZSA9IHNob3VsZF9sb2FkID8gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE9cXG4rXFx0XFx0XFx0XFx0OiBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMjQyLDEzICsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFxuIFxcdFxcdFxcdGlmIChzdF9vcHMtXFx1MDAzZXByb2dzW2ldKSB7XFxuIFxcdFxcdFxcdFxcdC8qIElmIHdlIGhhZCBkZWNsYXJhdGl2ZWx5IHNldCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrLCB3ZSBuZWVkIHRvXFxuLVxcdFxcdFxcdFxcdCAqIGZvcmNlIGl0cyBhdXRvbG9hZCB0byBmYWxzZSwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmVcXG4tXFx0XFx0XFx0XFx0ICogYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGUgY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC5cXG4tXFx0XFx0XFx0XFx0ICogSWYgdGhpcyBwcm9ncmFtIGlzIHN0aWxsIHJlZmVyZW5jZWQgc29tZXdoZXJlIGVsc2UsIHRob3VnaCxcXG4tXFx0XFx0XFx0XFx0ICogdGhlbiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXFxuLVxcdFxcdFxcdFxcdCAqIGF1dG9sb2FkIGFjY29yZGluZ2x5LlxcbitcXHRcXHRcXHRcXHQgKiBmb3JjZSBpdHMgbG9hZCB0eXBlIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCwgYmVjYXVzZVxcbitcXHRcXHRcXHRcXHQgKiBpdCBkb2Vzbid0IGhhdmUgYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGVcXG4rXFx0XFx0XFx0XFx0ICogY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC4gSWYgdGhpcyBwcm9ncmFtIGlzIHN0aWxsIHJlZmVyZW5jZWRcXG4rXFx0XFx0XFx0XFx0ICogc29tZXdoZXJlIGVsc2UsIHRob3VnaCwgdGhlblxcbitcXHRcXHRcXHRcXHQgKiBicGZfb2JqZWN0X2FkanVzdF9zdHJ1Y3Rfb3BzX2F1dG9sb2FkKCkgd2lsbCB1cGRhdGUgaXRzXFxuK1xcdFxcdFxcdFxcdCAqIGxvYWQgdHlwZSBhY2NvcmRpbmdseS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcXG4gXFx0XFx0XFx0XFx0c3Rfb3BzLVxcdTAwM2Vwcm9nc1tpXSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTEyODcsNyArMTI5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0XFx0ICogaWYgdXNlciByZXBsYWNlZCBpdCB3aXRoIGFub3RoZXIgcHJvZ3JhbSBvciBOVUxMXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAoc3Rfb3BzLVxcdTAwM2Vwcm9nc1tpXSBcXHUwMDI2XFx1MDAyNiBzdF9vcHMtXFx1MDAzZXByb2dzW2ldICE9IHByb2cpXFxuLVxcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdHN0X29wcy1cXHUwMDNlcHJvZ3NbaV0tXFx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcXG4gXFxuIFxcdFxcdFxcdC8qIFVwZGF0ZSB0aGUgdmFsdWUgZnJvbSB0aGUgc2hhZG93IHR5cGUgKi9cXG4gXFx0XFx0XFx0c3Rfb3BzLVxcdTAwM2Vwcm9nc1tpXSA9IHByb2c7XFxuQEAgLTM2MDAsNyArMzYwNCw3IEBAIHN0YXRpYyBib29sIG9ial9uZWVkc192bWxpbnV4X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHR9XFxuIFxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9wcm9ncmFtKHByb2csIG9iaikge1xcbi1cXHRcXHRpZiAoIXByb2ctXFx1MDAzZWF1dG9sb2FkKVxcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdGlmIChwcm9nX25lZWRzX3ZtbGludXhfYnRmKHByb2cpKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNjE5NCw3ICs2MTk4LDcgQEAgYnBmX29iamVjdF9fcmVsb2NhdGVfY29yZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRoKVxcbiBcXHRcXHRcXHQvKiBubyBuZWVkIHRvIGFwcGx5IENPLVJFIHJlbG9jYXRpb24gaWYgdGhlIHByb2dyYW0gaXNcXG4gXFx0XFx0XFx0ICogbm90IGdvaW5nIHRvIGJlIGxvYWRlZFxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VhdXRvbG9hZClcXG4rXFx0XFx0XFx0aWYgKHByb2ctXFx1MDAzZWxvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0LyogYWRqdXN0IGluc25faWR4IGZyb20gc2VjdGlvbiBmcmFtZSBvZiByZWZlcmVuY2UgdG8gdGhlIGxvY2FsXFxuQEAgLTcxNTQsNiArNzE1OCw1MCBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2Fzc2lnbl9leGNfY2Ioc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwclxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rI2RlZmluZSBEWU5MT0FEX0RFQ0xfVEFHIFxcXCJsb2FkdHlwZTpkeW5hbWljXFxcIlxcbitcXG4rLypcXG4rICogQ2hlY2sgd2hldGhlciBhIEJQRiBwcm9ncmFtIGlzIGFubm90YXRlZCB3aXRoIHRoZSBEWU5MT0FEX0RFQ0xfVEFHIEJURlxcbisgKiBkZWNsIHRhZywgcmVxdWVzdGluZyB0aGF0IGl0IGJlIGxvYWRlZCBkeW5hbWljYWxseSBhZnRlciB0aGUgb2JqZWN0IGxvYWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMSBpZiB0aGUgdGFnIGlzIHByZXNlbnQsIDAgaWYgaXQgaXMgbm90LCBuZWdhdGl2ZSBlcnJvciBvdGhlcndpc2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcXG4re1xcbitcXHRpbnQgaSwgbjtcXG4rXFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0biA9IGJ0Zl9fdHlwZV9jbnQob2JqLVxcdTAwM2VidGYpO1xcbitcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbjsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdGFnX3QsICpmbl90O1xcbitcXG4rXFx0XFx0dGFnX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLVxcdTAwM2VidGYsIGkpO1xcbitcXHRcXHRpZiAoIWJ0Zl9pc19kZWNsX3RhZyh0YWdfdCkgfHwgYnRmX2RlY2xfdGFnKHRhZ190KS1cXHUwMDNlY29tcG9uZW50X2lkeCAhPSAtMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChzdHJjbXAoYnRmX19zdHJfYnlfb2Zmc2V0KG9iai1cXHUwMDNlYnRmLCB0YWdfdC1cXHUwMDNlbmFtZV9vZmYpLFxcbitcXHRcXHRcXHQgICBEWU5MT0FEX0RFQ0xfVEFHKSAhPSAwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIGEgZGVjbCB0YWcncyB0eXBlIGZpZWxkIHBvaW50cyBhdCB0aGUgZW50aXR5IGl0IGRlY29yYXRlcyAqL1xcbitcXHRcXHRmbl90ID0gYnRmX190eXBlX2J5X2lkKG9iai1cXHUwMDNlYnRmLCB0YWdfdC1cXHUwMDNldHlwZSk7XFxuK1xcdFxcdGlmICghYnRmX2lzX2Z1bmMoZm5fdCkgfHwgYnRmX2Z1bmNfbGlua2FnZShmbl90KSAhPSBCVEZfRlVOQ19HTE9CQUwpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwicHJvZyAnJXMnOiBcXFwiIERZTkxPQURfREVDTF9UQUdcXG4rXFx0XFx0XFx0XFx0XFxcIiBkZWNsIHRhZyBtdXN0IGJlIGFwcGxpZWQgdG8gYSBnbG9iYWwgZnVuY3Rpb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHByb2ctXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHN0cmNtcChidGZfX3N0cl9ieV9vZmZzZXQob2JqLVxcdTAwM2VidGYsIGZuX3QtXFx1MDAzZW5hbWVfb2ZmKSwgcHJvZy1cXHUwMDNlbmFtZSkgIT0gMClcXG4rXFx0XFx0XFx0Y29udGludWU7ICAgLyogdGFnIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgcHJvZ3JhbSAqL1xcbitcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHtcXG4gXFx0ZW51bSBicGZfcHJvZ190eXBlIHByb2dfdHlwZTtcXG4gXFx0Y29uc3QgY2hhciAqY3R4X25hbWU7XFxuQEAgLTc1MzAsNyArNzU3OCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0XFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoIXByb2ctXFx1MDAzZWF1dG9sb2FkKVxcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRlcnIgPSBicGZfb2JqZWN0X19yZWxvY2F0ZV9jYWxscyhvYmosIHByb2cpO1xcbkBAIC03NTY2LDcgKzc2MTQsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfX3JlbG9jYXRlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRhcmdfYnRmX3BhdFxcbiBcXHRcXHRwcm9nID0gXFx1MDAyNm9iai1cXHUwMDNlcHJvZ3JhbXNbaV07XFxuIFxcdFxcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmICghcHJvZy1cXHUwMDNlYXV0b2xvYWQpXFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdC8qIFByb2Nlc3MgZGF0YSByZWxvcyBmb3IgbWFpbiBwcm9ncmFtcyAqL1xcbkBAIC04MDU1LDcgKzgxMDMsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfbG9hZF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZ1xcbiBcXHRcXHRcXHRsb2dfYnVmID0gcHJvZy1cXHUwMDNlbG9nX2J1ZjtcXG4gXFx0XFx0XFx0bG9nX2J1Zl9zaXplID0gcHJvZy1cXHUwMDNlbG9nX3NpemU7XFxuIFxcdFxcdFxcdG93bl9sb2dfYnVmID0gZmFsc2U7XFxuLVxcdFxcdH0gZWxzZSBpZiAob2JqLVxcdTAwM2Vsb2dfYnVmKSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAob2JqLVxcdTAwM2Vsb2dfYnVmIFxcdTAwMjZcXHUwMDI2IHByb2ctXFx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQykge1xcbiBcXHRcXHRcXHRsb2dfYnVmID0gb2JqLVxcdTAwM2Vsb2dfYnVmO1xcbiBcXHRcXHRcXHRsb2dfYnVmX3NpemUgPSBvYmotXFx1MDAzZWxvZ19zaXplO1xcbiBcXHRcXHRcXHRvd25fbG9nX2J1ZiA9IGZhbHNlO1xcbkBAIC04Mzk4LDEwICs4NDQ2LDE0IEBAIGJwZl9vYmplY3RfX2xvYWRfcHJvZ3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgaW50IGxvZ19sZXZlbClcXG4gXFx0XFx0cHJvZyA9IFxcdTAwMjZvYmotXFx1MDAzZXByb2dyYW1zW2ldO1xcbiBcXHRcXHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoIXByb2ctXFx1MDAzZWF1dG9sb2FkKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJwcm9nICclcyc6IHNraXBwZWQgbG9hZGluZ1xcXFxuXFxcIiwgcHJvZy1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pIHtcXG4rXFx0XFx0XFx0cHJfZGVidWcoXFxcInByb2cgJyVzJzogc2tpcHBlZCBsb2FkaW5nLCBsb2FkIHR5cGUgaXMgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBwcm9nLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHRcXHQgcHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDID9cXG4rXFx0XFx0XFx0XFx0IFxcXCJkeW5hbWljXFxcIiA6IFxcXCJkaXNhYmxlZFxcXCIpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbitcXG4gXFx0XFx0cHJvZy1cXHUwMDNlbG9nX2xldmVsIHw9IGxvZ19sZXZlbDtcXG4gXFxuIFxcdFxcdGlmIChvYmotXFx1MDAzZWdlbl9sb2FkZXIpXFxuQEAgLTg0NjQsNiArODUxNiwyMiBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBwcm9nX2hhc19keW5sb2FkX3RhZyhvYmosIHByb2cpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUocHJvZywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xcbitcXHRcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogZmFpbGVkIHRvIGFwcGx5IFxcXCIgRFlOTE9BRF9ERUNMX1RBR1xcbitcXHRcXHRcXHRcXHRcXHRcXFwiIGRlY2wgdGFnOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cHJvZy1cXHUwMDNlbmFtZSwgZXJyc3RyKGVycikpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTkwNzUsMTUgKzkxNDMsMjIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVzX2xvYWRlZCA9IGZhbHNlO1xcbiBcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlcyk7XFxuIFxcbi1cXHQvKiBjbGVhbiB1cCB2bWxpbnV4IEJURiAqL1xcbi1cXHRidGZfX2ZyZWUob2JqLVxcdTAwM2VidGZfdm1saW51eCk7XFxuLVxcdG9iai1cXHUwMDNlYnRmX3ZtbGludXggPSBOVUxMO1xcbitcXHQvKiBUaGUgYnRmX3ZtbGludXggZGF0YSBpcyBuZWVkZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyxcXG4rXFx0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFvYmotXFx1MDAzZWhhc19keW5sb2FkX3Byb2dzKSB7XFxuK1xcdFxcdGJ0Zl9fZnJlZShvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4rXFx0XFx0b2JqLVxcdTAwM2VidGZfdm1saW51eCA9IE5VTEw7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYnBmX29iamVjdF9wb3N0X2xvYWRfY2xlYW51cChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuLVxcdC8qIGNsZWFuIHVwIGZkX2FycmF5ICovXFxuLVxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWZkX2FycmF5KTtcXG4rXFx0LyogVGhlIGZkIGFycmF5IGlzIG5lZWRlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zLFxcbitcXHQgKiBzbyBkZWZlciBmcmVlaW5nIGl0IGluIHRoYXQgY2FzZSB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgbGlmZXRpbWUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW9iai1cXHUwMDNlaGFzX2R5bmxvYWRfcHJvZ3MgfHwgIW9iai1cXHUwMDNlZmRfYXJyYXlfY250KVxcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VmZF9hcnJheSk7XFxuIFxcbiBcXHQvKiBjbGVhbiB1cCBCVEYgKi9cXG4gXFx0YnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopO1xcbkBAIC05Njc3LDYgKzk3NTIsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdGNsb3NlKG9iai1cXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xcbiBcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwcyk7XFxuIFxcbitcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VmZF9hcnJheSk7XFxuK1xcbiBcXHRmcmVlKG9iaik7XFxuIH1cXG4gXFxuQEAgLTk3OTksMTYgKzk4NzYsMTUgQEAgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX3NlY3Rpb25fbmFtZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIFxcbiBib29sIGJwZl9wcm9ncmFtX19hdXRvbG9hZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuIHtcXG4tXFx0cmV0dXJuIHByb2ctXFx1MDAzZWF1dG9sb2FkO1xcbitcXHRyZXR1cm4gcHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPO1xcbiB9XFxuIFxcbi1pbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpXFxuK2ludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpXFxuIHtcXG4tXFx0aWYgKHByb2ctXFx1MDAzZW9iai1cXHUwMDNlc3RhdGUgXFx1MDAzZT0gT0JKX0xPQURFRClcXG4rXFx0aWYgKGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPIFxcdTAwMjZcXHUwMDI2IGF1dG9sb2FkICE9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRClcXG4gXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuIFxcbi1cXHRwcm9nLVxcdTAwM2VhdXRvbG9hZCA9IGF1dG9sb2FkO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIGF1dG9sb2FkKTtcXG4gfVxcbiBcXG4gYm9vbCBicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuQEAgLTE1MTExLDcgKzE1MTg3LDcgQEAgaW50IGJwZl9vYmplY3RfX2F0dGFjaF9za2VsZXRvbihzdHJ1Y3QgYnBmX29iamVjdF9za2VsZXRvbiAqcylcXG4gXFx0XFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gKnByb2dfc2tlbC1cXHUwMDNlcHJvZztcXG4gXFx0XFx0c3RydWN0IGJwZl9saW5rICoqbGluayA9IHByb2dfc2tlbC1cXHUwMDNlbGluaztcXG4gXFxuLVxcdFxcdGlmICghcHJvZy1cXHUwMDNlYXV0b2xvYWQgfHwgIXByb2ctXFx1MDAzZWF1dG9hdHRhY2gpXFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gfHwgIXByb2ctXFx1MDAzZWF1dG9hdHRhY2gpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0LyogYXV0by1hdHRhY2hpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBwcm9ncmFtICovXFxuQEAgLTE1MjIxLDMgKzE1Mjk3LDEzNiBAQCB2b2lkIGJwZl9vYmplY3RfX2Rlc3Ryb3lfc2tlbGV0b24oc3RydWN0IGJwZl9vYmplY3Rfc2tlbGV0b24gKnMpXFxuIFxcdGZyZWUocy1cXHUwMDNlcHJvZ3MpO1xcbiBcXHRmcmVlKHMpO1xcbiB9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuK1xcdGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lO1xcbitcXG4rXFx0b2JqID0gcHJvZy1cXHUwMDNlb2JqO1xcbitcXHRpZiAoIW9iailcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuK1xcbitcXHQvKiBEeW5hbWljYWxseS1sb2FkZWQgcHJvZ3JhbXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGdlbl9sb2FkZXIuXFxuK1xcdCAqIFRoaXMgaXMgYmVjYXVzZSBicGZfb2JqZWN0X2xvYWRfcHJvZyBpcyBub3QgY2FsbGVkIGZvclxcbitcXHQgKiBkeW5hbWljbG9hZCBwcm9ncmFtcywgc28gZHluYW1pY2xvYWQgcHJvZ3JhbXMgYXJlIG5vdCB2aXNpYmxlXFxuK1xcdCAqIHRvIGdlbl9sb2FkZXIuIEZvciB0aGlzIHJlYXNvbiwgcHJldmVudCBjYWxsaW5nXFxuK1xcdCAqIGJwZl9wcm9ncmFtX19zZXRfZHluYW1pY2xvYWQgd2hlbiBnZW5fbG9hZGVyIHdhcyB1c2VkIHRvXFxuK1xcdCAqIGdlbmVyYXRlIGEgQlBGIG9iamVjdCBsb2FkZXIuXFxuK1xcdCAqIEEgZ2VuX2xvYWRlciBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyBjYWxsZWQgZm9yIHByb2dyYW1zIHdpdGhcXG4rXFx0ICogbG9hZCB0eXBlIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPIGFuZCBkZWZpbmVzIGl0cyBvd24gbW9kZWwgZm9yXFxuK1xcdCAqIGxvYWRpbmcgQlBGIHByb2dyYW1zLlxcbitcXHQgKi9cXG4rXFx0aWYgKG9iai1cXHUwMDNlZ2VuX2xvYWRlcilcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApO1xcbitcXG4rXFx0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKVxcbitcXHRcXHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcXG4rXFxuK1xcdGF0dGFjaF9uYW1lID0gc3RyY2hyKHByb2ctXFx1MDAzZXNlY19uYW1lLCAnLycpO1xcbitcXHRpZiAoIWF0dGFjaF9uYW1lIHx8IHN0cmNocihhdHRhY2hfbmFtZSwgJzonKSkge1xcbitcXHRcXHQvKiBPbmx5IHJlamVjdCBwcm9ncmFtcyB0aGF0IHJlcXVpcmUgQlRGLWJhc2VkIGF0dGFjaCB0YXJnZXRcXG4rXFx0XFx0ICogcmVzb2x1dGlvbiAoaW5kaWNhdGVkIGJ5IHRoZSBTRUNfQVRUQUNIX0JURiBmbGFnKS4gU3VjaFxcbitcXHRcXHQgKiBwcm9ncmFtcyBuZWVkIHRoZSBzZWN0aW9uIG5hbWUgcGFyc2VkIGZvciB0aGUgYXR0YWNoIHRhcmdldFxcbitcXHRcXHQgKiBmdW5jdGlvbiBuYW1lIChhZnRlciAnLycpIGFuZCBvcHRpb25hbGx5IHRoZSBtb2R1bGUgbmFtZVxcbitcXHRcXHQgKiAoYmVmb3JlICc6JykgZm9yIGxpYmJwZl9maW5kX2F0dGFjaF9idGZfaWQuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIFByb2dyYW1zIGxpa2UgU0VDKFxcXCJjbGFzc2lmaWVyXFxcIiksIFNFQyhcXFwic29ja2V0XFxcIiksIGV0Yy4gZG9cXG4rXFx0XFx0ICogbm90IHJlcXVpcmUgQlRGIGF0dGFjaCByZXNvbHV0aW9uIGFuZCBjYW4gc2FmZWx5IHVzZVxcbitcXHRcXHQgKiBkeW5hbWljIGxvYWRpbmcgZGVzcGl0ZSBoYXZpbmcgbm8gJy8nIGluIHRoZWlyIHNlY3Rpb25cXG4rXFx0XFx0ICogbmFtZS4gVGhlIEJURiBndWFyZCBpbiBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQgKGNoZWNraW5nXFxuK1xcdFxcdCAqIFNFQ19BVFRBQ0hfQlRGKSBpcyB0aGUgYXV0aG9yaXRhdGl2ZSBjaGVjazsgdGhpcyBpcyBhblxcbitcXHRcXHQgKiBlYXJseS1yZWplY3QgZm9yIHByb2dyYW1zIHRoYXQgd291bGQgZmFpbCB0aGVyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxvbmcgZmxhZ3MgPSBwcm9nLVxcdTAwM2VzZWNfZGVmID9cXG4rXFx0XFx0XFx0KGxvbmcpcHJvZy1cXHUwMDNlc2VjX2RlZi1cXHUwMDNlY29va2llIDogU0VDX0FUVEFDSF9CVEY7XFxuK1xcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBTRUNfQVRUQUNIX0JURikgXFx1MDAyNlxcdTAwMjYgIXByb2ctXFx1MDAzZWF0dGFjaF9idGZfaWQpXFxuK1xcdFxcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbitcXHRvYmotXFx1MDAzZWhhc19keW5sb2FkX3Byb2dzID0gdHJ1ZTtcXG4rXFx0cHJvZy1cXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM7XFxuK1xcdHByb2ctXFx1MDAzZWF1dG9hdHRhY2ggPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB0eXBlKVxcbit7XFxuK1xcdGlmICghcHJvZylcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuK1xcbitcXHRpZiAocHJvZy1cXHUwMDNlb2JqLVxcdTAwM2VzdGF0ZSBcXHUwMDNlPSBPQkpfTE9BREVEKVxcbitcXHRcXHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDOlxcbitcXHRcXHRyZXR1cm4gYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZChwcm9nKTtcXG4rXFx0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzpcXG4rXFx0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIExlYXZpbmcgdGhlIGR5bmFtaWMgc3RhdGU6IHNldF9keW5hbWljbG9hZCgpIGNsZWFyZWRcXG4rXFx0XFx0ICogYXV0b2F0dGFjaCBiZWNhdXNlIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyBhcmUgYXR0YWNoZWRcXG4rXFx0XFx0ICogZXhwbGljaXRseS4gUmVzdG9yZSB0aGUgZGVmYXVsdCBmb3IgdGhlIHRhcmdldCBsb2FkIHR5cGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxcbitcXHRcXHRcXHRwcm9nLVxcdTAwM2VhdXRvYXR0YWNoID0gdHJ1ZTtcXG4rXFx0XFx0cHJvZy1cXHUwMDNlbG9hZF90eXBlID0gdHlwZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuK3tcXG4rXFx0cmV0dXJuIHByb2ctXFx1MDAzZWxvYWRfdHlwZTtcXG4rfVxcbitcXG4rLypcXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBicGZfb2JqZWN0X19sb2FkX3Byb2dzLlxcbisgKiBEeW5hbWljYWxseS1sb2FkZWQgcHJvZ3JhbSBkYXRhIGlzIGluaXRpYWxpemVkIG9uIG9iamVjdCBsb2FkLlxcbisgKiBQb3N0LWxvYWQgaW5pdGlhbGl6YXRpb24gaXMgbm90IHN1cHBvcnRlZC5cXG4rICovXFxuK2ludFxcbiticGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcXG4rXFxuK1xcdG9iaiA9IHByb2ctXFx1MDAzZW9iajtcXG4rXFx0aWYgKCFvYmogfHwgb2JqLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIE9CSl9MT0FERUQpXFxuK1xcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXG4rXFx0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpIHx8IHByb2ctXFx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQylcXG4rXFx0XFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XFxuK1xcbitcXHRwcm9nLVxcdTAwM2Vsb2dfbGV2ZWwgfD0gZXh0cmFfbG9nX2xldmVsO1xcbitcXG4rXFx0ZXJyID0gYnBmX29iamVjdF9sb2FkX3Byb2cob2JqLCBwcm9nLCBwcm9nLVxcdTAwM2VpbnNucywgcHJvZy1cXHUwMDNlaW5zbnNfY250LFxcbitcXHRcXHRcXHRcXHQgICBvYmotXFx1MDAzZWxpY2Vuc2UsIG9iai1cXHUwMDNla2Vybl92ZXJzaW9uLCBcXHUwMDI2cHJvZy1cXHUwMDNlZmQpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcInByb2cgJyVzJzogZmFpbGVkIHRvIGR5bmFtaWNhbGx5IGxvYWQ6ICVkXFxcXG5cXFwiLCBwcm9nLVxcdTAwM2VuYW1lLCBlcnIpO1xcbitcXHRcXHRwcm9nLVxcdTAwM2Vsb2dfbGV2ZWwgXFx1MDAyNj0gfmV4dHJhX2xvZ19sZXZlbDtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cHJvZy1cXHUwMDNlbG9nX2xldmVsIFxcdTAwMjY9IH5leHRyYV9sb2dfbGV2ZWw7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghcHJvZyB8fCBwcm9nLVxcdTAwM2Vsb2FkX3R5cGUgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpXFxuK1xcdFxcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xcbitcXG4rXFx0LyogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBidXQgcmV0YWluIHRoZSBwcm9ncmFtJ3MgZGF0YSB0b1xcbitcXHQgKiBzdXBwb3J0IHJlbG9hZGluZyB0aGUgcHJvZ3JhbSBpZiBpdCBpcyByZXF1aXJlZCBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGVyciA9IHpjbG9zZShwcm9nLVxcdTAwM2VmZCk7XFxuK1xcdHJldHVybiBlcnIgPyBsaWJicGZfZXJyKC1lcnJubykgOiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uYTU2MDY4ZjBmMTEyMiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbkBAIC0zNTYsNiArMzU2LDE5IEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl9hdHRhY2hfdHlwZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsXFxuIExJQkJQRl9BUEkgaW50IGxpYmJwZl9maW5kX3ZtbGludXhfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpO1xcbiBcXG4rLypcXG4rICogVGhlIHByb2dyYW0gbG9hZCB0eXBlOlxcbisgKlxcbisgKiAtIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDogdGhlIHByb2dyYW0gaXMgbm90IGxvYWRlZC5cXG4rICogLSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzogdGhlIHByb2dyYW0gaXMgYXV0b2xvYWRlZCB3aGVuIHRoZSBicGZfb2JqZWN0IGlzIGxvYWRlZC5cXG4rICogLSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzogdGhlIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBhdHRhY2hlZCBkeW5hbWljYWxseS5cXG4rICovXFxuK2VudW0gYnBmX3Byb2dfbG9hZF90eXBlIHtcXG4rXFx0QlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEID0gMCxcXG4rXFx0QlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXFxuK1xcdEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxcbit9O1xcbitcXG4gLyogQWNjZXNzb3JzIG9mIGJwZl9wcm9ncmFtICovXFxuIHN0cnVjdCBicGZfcHJvZ3JhbTtcXG4gXFxuQEAgLTM3Niw3ICszODksMTggQEAgTElCQlBGX0FQSSB2b2lkIGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIExJQkJQRl9BUEkgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcXG4gTElCQlBGX0FQSSBjb25zdCBjaGFyICpicGZfcHJvZ3JhbV9fc2VjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XFxuIExJQkJQRl9BUEkgYm9vbCBicGZfcHJvZ3JhbV9fYXV0b2xvYWQoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcXG4tTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpO1xcbisvKipcXG4rICogQGJyaWVmICoqYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpKiogaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkc1xcbisgKiBjb21wYXRpYmlsaXR5OyAqKmJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkqKiBpcyB0aGUgcHJlZmVycmVkIEFQSS5cXG4rICogVGhlIGVudW0ncyBudW1iZXJpbmcgKERJU0FCTEVEPTAsIEFVVE89MSwgRFlOQU1JQz0yKSBtYXRjaGVzIHRoZSBwcmV2aW91c1xcbisgKiBib29sIHNlbWFudGljcyAoZmFsc2U9MCwgdHJ1ZT0xKSwgc28gZXhpc3RpbmcgYm9vbCBjYWxsZXJzIGtlZXAgY29tcGlsaW5nXFxuKyAqIGFuZCBiZWhhdmluZyB1bmNoYW5nZWQuIE9ubHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kXFxuKyAqIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCBhcmUgYWNjZXB0ZWQsIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsXFxuKyAqIGF1dG9sb2FkIG9uL29mZiBtZWFuaW5nOyB1c2UgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSB0byBzZXRcXG4rICogQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMuXFxuKyAqL1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4rXFx0XFx0XFx0XFx0XFx0IGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGF1dG9sb2FkKTtcXG4gTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XFxuIExJQkJQRl9BUEkgdm9pZCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9hdHRhY2goc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBib29sIGF1dG9hdHRhY2gpO1xcbiBcXG5AQCAtMjA3OCw2ICsyMTAyLDEyIEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl91bnJlZ2lzdGVyX3Byb2dfaGFuZGxlcihpbnQgaGFuZGxlcl9pZCk7XFxuICAqL1xcbiBMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fY2xvbmUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfbG9hZF9vcHRzICpvcHRzKTtcXG4gXFxuK0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBsb2FkdHlwZSk7XFxuK0xJQkJQRl9BUEkgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpO1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpO1xcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XFxuK1xcbiAjaWZkZWYgX19jcGx1c3BsdXNcXG4gfSAvKiBleHRlcm4gXFxcIkNcXFwiICovXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5tYXAgYi90b29scy9saWIvYnBmL2xpYmJwZi5tYXBcXG5pbmRleCAwOGFiMmVhODgxZmI2Li43NDMxMmM5NWQzMjg3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxcbkBAIC00NjAsNiArNDYwLDEwIEBAIExJQkJQRl8xLjguMCB7XFxuIFxcdGdsb2JhbDpcXG4gXFx0XFx0YnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpO1xcbiBcXHRcXHRicGZfcHJvZ3JhbV9fY2xvbmU7XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5O1xcbitcXHRcXHRicGZfcHJvZ3JhbV9fbG9hZF90eXBlO1xcbitcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZTtcXG4rXFx0XFx0YnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseTtcXG4gXFx0XFx0YnRmX19maW5kX2J5X25hbWVfa2luZF9vd247XFxuIFxcdFxcdGJ0Zl9fbmV3X2VtcHR5X29wdHM7XFxuIH0gTElCQlBGXzEuNy4wO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzk5YzQzMDM0ZmY5Mlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jXFxuQEAgLTAsMCArMSwyMjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X2R5bmFtaWNsb2FkLnNrZWwuaFxcXCJcXG4rXFxuKy8qIHByb2c0IGlzIHRhZ2dlZCBfX2xvYWRfZHluYW1pYyBpbiB0aGUgc291cmNlIGluc3RlYWQgb2YgYmVpbmcgc2V0XFxuKyAqIGltcGVyYXRpdmVseTsgdmVyaWZ5IHRoYXQgYW4gZXhwbGljaXQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSBjYWxsXFxuKyAqIGJlZm9yZSBsb2FkIG92ZXJyaWRlcyB0aGUgdGFnJ3MgZGVjbGFyYXRpdmUgZGVmYXVsdC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGR5bmFtaWNsb2FkX3ZlcmlmeV9vdmVycmlkZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzQsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZGlzYWJsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nNCksIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nNF9sb2FkX3R5cGVfb3ZlcnJpZGRlblxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBrZWVwIHRoZSBvdGhlciBkeW5hbWljLWxvYWQtb25seSBwcm9ncmFtcyBvdXQgb2YgdGhlIHdheSBvZiB0aGlzIGxvYWQgKi9cXG4rXFx0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9keW5hbWljbG9hZF9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHByb2c0IHdhcyBuZXZlciBsb2FkZWQsIHNvIGl0IGNhbm5vdCBiZSBsb2FkZWQgZHluYW1pY2FsbHkgZWl0aGVyICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2c0LCAwKTtcXG4rXFx0QVNTRVJUX0VSUihlcnIsIFxcXCJsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX292ZXJyaWRlXFxcIik7XFxuK1xcbitjbGVhbnVwOlxcbitcXHR0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfZHluYW1pY2xvYWQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c2tlbCA9IHRlc3RfZHluYW1pY2xvYWRfX29wZW4oKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogdGhlIF9fbG9hZF9keW5hbWljIHRhZyBhbG9uZSwgd2l0aCBubyBpbXBlcmF0aXZlIGNhbGwsIG11c3Qgc2V0XFxuK1xcdCAqIHByb2c0J3MgbG9hZCB0eXBlIGJlZm9yZSBpdCBpcyBldmVyIHRvdWNoZWQgYmVsb3dcXG4rXFx0ICovXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzQpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nNF90YWdfbG9hZF90eXBlXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aWYgKCFBU1NFUlRfRkFMU0UoYnBmX3Byb2dyYW1fX2F1dG9hdHRhY2goc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzQpLCBcXFwicHJvZzRfYXV0b2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBkb24ndCBsb2FkIHByb2cxICovXFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xcbitcXG4rXFx0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cXG4rXFx0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzIsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcXG4rXFxuK1xcdC8qIHByb2czIGlzIGR5bmFtaWNhbGx5IGxvYWRlZCAqL1xcbitcXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9keW5hbWljbG9hZF9fbG9hZChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2F0dGFjaChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogdHJpZ2dlciB0aGUgQlBGIHByb2dyYW1zICovXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdEFTU0VSVF9GQUxTRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cxX2NhbGxlZCwgXFxcInByb2cxX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cyX2NhbGxlZCwgXFxcInByb2cyX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0ZBTFNFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzRfY2FsbGVkLCBcXFwicHJvZzRfY2FsbGVkXFxcIik7XFxuK1xcbitcXHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMSwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0VSUihlcnIsIFxcXCJsb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHByb2cxIGlzIGRpc2FibGVkIGZvciBsb2FkICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzEpO1xcbitcXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcXFwidW5sb2FkX2R5bmFtaWNhbGx5X2Rpc2FibGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHByb2cyIGlzIGF1dG9sb2FkICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2cyLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVJSKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfYXV0b2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMik7XFxuK1xcdGlmICghQVNTRVJUX0VSUihlcnIsIFxcXCJ1bmxvYWRfZHluYW1pY2FsbHlfYXV0b2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMl9jYWxsZWQgPSBmYWxzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdEFTU0VSVF9GQUxTRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cxX2NhbGxlZCwgXFxcInByb2cxX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cyX2NhbGxlZCwgXFxcInByb2cyX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKTtcXG4rXFxuK1xcdC8qIGxvYWQgcHJvZzMgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJsb2FkX2R5bmFtaWNhbGx5XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGF0dGFjaCBwcm9nMyAqL1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24ndCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXFxuK1xcdGVyciA9IGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJsaW5rX2Rlc3Ryb3lcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgYWZ0ZXIgZGV0YWNoICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2cyX2NhbGxlZCwgXFxcInByb2cyX2NhbGxlZFxcXCIpO1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQsIFxcXCJwcm9nM19jYWxsZWRcXFwiKTtcXG4rXFxuK1xcdC8qIHVubG9hZCBwcm9nMyAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2czKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidW5sb2FkX2R5bmFtaWNhbGx5XFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHJlbG9hZCBwcm9nMyAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgMCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfcmVsb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHJlYXR0YWNoIHByb2czICovXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2czKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIFxcXCJyZWF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkLCBcXFwicHJvZzNfY2FsbGVkX3JlYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95IGRvZXNuJ3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqL1xcbitcXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwibGlua19kZXN0cm95X3JlYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIHZlcmlmeSByZWd1bGFyIHVubG9hZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW0sXFxuK1xcdCAqIHVubG9hZCBwcm9nMyBhcyBhIHJlZ3VsYXIgcHJvZ3JhbVxcbitcXHQgKi9cXG4rXFx0YnBmX3Byb2dyYW1fX3VubG9hZChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyk7XFxuK1xcbitcXHQvKiByZXNldCB0aGUgY2FsbCBmbGFncyBhZnRlciB1bmxvYWQgKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMl9jYWxsZWQgPSBmYWxzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdEFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzJfY2FsbGVkLCBcXFwicHJvZzJfY2FsbGVkXFxcIik7XFxuK1xcdEFTU0VSVF9GQUxTRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXByb2czX2NhbGxlZCwgXFxcInByb2czX2NhbGxlZFxcXCIpO1xcbitcXG4rXFx0LyogcmVsb2FkaW5nIHByb2czIG11c3QgZmFpbCBhcyBpdCB3YXMgdW5sb2FkZWQgYXMgYSByZWd1bGFyIHByb2dyYW0gKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xcbitcXHRBU1NFUlRfRVJSKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfYWZ0ZXJfcmVndWxhcl91bmxvYWRcXFwiKTtcXG4rXFxuK1xcdC8qIHJ1biBwcm9nNCAoZGVjbGFyYXRpdmVseSB0YWdnZWQpIHRocm91Z2ggdGhlIHNhbWUgZHluYW1pY1xcbitcXHQgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzNcXG4rXFx0ICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2c0LCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwicHJvZzRfbG9hZF9keW5hbWljYWxseVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nNCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwicHJvZzRfYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdHVzbGVlcCgxKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nNF9jYWxsZWQsIFxcXCJwcm9nNF9jYWxsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInByb2c0X2xpbmtfZGVzdHJveVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXFx1MDAzZXByb2dzLnByb2c0KTtcXG4rXFx0QVNTRVJUX09LKGVyciwgXFxcInByb2c0X3VubG9hZF9keW5hbWljYWxseVxcXCIpO1xcbitcXG4rXFx0dGVzdF9keW5hbWljbG9hZF9fZGVzdHJveShza2VsKTtcXG4rXFxuK1xcdC8qIHNlcGFyYXRlIHNjZW5hcmlvOiBpbXBlcmF0aXZlIG92ZXJyaWRlIG9mIHRoZSBkZWNsYXJhdGl2ZSB0YWcgKi9cXG4rXFx0ZHluYW1pY2xvYWRfdmVyaWZ5X292ZXJyaWRlKCk7XFxuK1xcdHJldHVybjtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZjOTFmNjY2NmM1MDZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmNcXG5AQCAtMCwwICsxLDE2NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInRlc3RfbG9hZF90eXBlLnNrZWwuaFxcXCJcXG4rXFxuK3ZvaWQgdGVzdF9sb2FkX3R5cGUodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcdHN0cnVjdCB0ZXN0X2xvYWRfdHlwZSAqc2tlbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInNrZWxfb3BlblxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBkb24ndCBsb2FkIHByb2cxICovXFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xcbitcXG4rXFx0LyogbG9hZCBhbmQgYXR0YWNoIHByb2cyICovXFxuK1xcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2cyLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XFxuK1xcdGlmICghQVNTRVJUX1RSVUUoYnBmX3Byb2dyYW1fX2F1dG9sb2FkKHNrZWwtXFx1MDAzZXByb2dzLnByb2cyKSwgXFxcInByb2cyX2F1dG9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZHluYW1pY1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpIGlzIGEgdGhpbiBmb3J3YXJkZXIgdG8gc2V0X2xvYWRfdHlwZSgpLFxcbitcXHQgKiByZXN0cmljdGVkIHRvIEFVVE8vRElTQUJMRUQgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsIGJvb2wgb24vb2ZmXFxuK1xcdCAqIG1lYW5pbmc7IGl0IGRvZXMgY2hhbmdlIHRoZSBsb2FkIHR5cGUgb2YgYSBwcm9ncmFtIHRoYXQgaXNuJ3RcXG4rXFx0ICogY3VycmVudGx5IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgZmFsc2UpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXRfYXV0b2xvYWRfZmFsc2VcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZmFsc2VcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgdHJ1ZSk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9hdXRvbG9hZF90cnVlXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfdHJ1ZVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBzZXRfYXV0b2xvYWQoKSBvbmx5IGFjY2VwdHMgQVVUTy9ESVNBQkxFRCwgdG8gcHJlc2VydmUgaXRzIG9yaWdpbmFsXFxuK1xcdCAqIG9uL29mZiBtZWFuaW5nOyBEWU5BTUlDIG11c3QgZ28gdGhyb3VnaCBzZXRfbG9hZF90eXBlKClcXG4rXFx0ICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVJSKGVyciwgXFxcInNldF9hdXRvbG9hZF9keW5hbWljX3JlamVjdGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfdW5jaGFuZ2VkX2FmdGVyX3JlamVjdGVkX2F1dG9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYWZ0ZXJfZHluYW1pY19lbnVtXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGxlYXZpbmcgRFlOQU1JQyBmb3IgQVVUTyBtdXN0IHJlc3RvcmUgYXV0b2F0dGFjaCAocmVncmVzc2lvbiB0ZXN0IGZvclxcbitcXHQgKiB0aGUgYXV0b2F0dGFjaCByZXNpZHVlIGJ1Zzogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJzIGF1dG9hdHRhY2gsIGFuZFxcbitcXHQgKiBub3RoaW5nIHVzZWQgdG8gcmVzdG9yZSBpdCBvbiBleGl0KVxcbitcXHQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9hdXRvXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfYXV0b1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2czKSwgXFxcInByb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0LyogdGhlIHNhbWUgcmVzaWR1ZSBjYW4gcmVsYXkgdGhyb3VnaCBESVNBQkxFRCBhbmQgcmVzdXJmYWNlIG9uIGEgbGF0ZXJcXG4rXFx0ICogRElTQUJMRUQgLVxcdTAwM2UgQVVUTyB0cmFuc2l0aW9uLCBzbyB0aGUgZml4IG11c3QgY292ZXIgYm90aCBleGl0IGVkZ2VzXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXRfbG9hZF90eXBlX2R5bmFtaWNfYWdhaW5cXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldF9sb2FkX3R5cGVfZGlzYWJsZWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9hdXRvX3ZpYV9kaXNhYmxlZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2czKSxcXG4rXFx0XFx0XFx0IFxcXCJwcm9nM19hdXRvYXR0YWNoX3Jlc3RvcmVkX3ZpYV9kaXNhYmxlZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBhbiBvdXQtb2YtcmFuZ2UgbG9hZCB0eXBlIGlzIHJlamVjdGVkICovXFxuK1xcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXFx1MDAzZXByb2dzLnByb2czLCAoZW51bSBicGZfcHJvZ19sb2FkX3R5cGUpOTk5KTtcXG4rXFx0aWYgKCFBU1NFUlRfRVJSKGVyciwgXFxcInNldF9sb2FkX3R5cGVfaW52YWxpZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBjaGFuZ2UgdGhlIHR5cGUgYmFjayB0byBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRlc3QgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9keW5hbWljX2ZpbmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcXG4rXFx0XFx0ICAgICAgIFxcXCJwcm9nM19sb2FkX3R5cGVfZmluYWxcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0ZXJyID0gdGVzdF9sb2FkX3R5cGVfX2xvYWQoc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNrZWxfbG9hZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXFx1MDAzZXByb2dzLnByb2cyKSwgXFxcInByb2cyX2F1dG9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRpZiAoIUFTU0VSVF9GQUxTRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMyksIFxcXCJwcm9nM19hdXRvYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGxvYWRlZCBwcm9ncmFtIHR5cGUgY2Fubm90IGJlIGNoYW5nZWQgKi9cXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XFxuK1xcdEFTU0VSVF9FUlIoZXJyLCBcXFwic2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkXFxcIik7XFxuK1xcbitcXHRlcnIgPSB0ZXN0X2xvYWRfdHlwZV9fYXR0YWNoKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJza2VsX2F0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRBU1NFUlRfRkFMU0Uoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMV9jYWxsZWQsIFxcXCJwcm9nMV9jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX1RSVUUoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vwcm9nMl9jYWxsZWQsIFxcXCJwcm9nMl9jYWxsZWRcXFwiKTtcXG4rXFx0QVNTRVJUX0ZBTFNFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkLCBcXFwicHJvZzNfY2FsbGVkXFxcIik7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgMCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfMVxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVxcdTAwM2Vwcm9ncy5wcm9nMywgMCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImxvYWRfZHluYW1pY2FsbHlfMlxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBhdHRhY2ggcHJvZzMgKi9cXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cXHUwMDNlcHJvZ3MucHJvZzMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXFxcImF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHR1c2xlZXAoMSk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHJvZzNfY2FsbGVkLCBcXFwicHJvZzNfY2FsbGVkX2FnYWluXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2xvYWRfdHlwZV9fZGVzdHJveSBkb2Vzbid0IGRldGFjaCBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMgKi9cXG4rXFx0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJsaW5rX2Rlc3Ryb3lcXFwiKTtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdHRlc3RfbG9hZF90eXBlX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9keW5hbWljbG9hZC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjVhNWNiODk4MDMxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmNcXG5AQCAtMCwwICsxLDQwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2czX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2c0X2NhbGxlZCA9IGZhbHNlO1xcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMl9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2czKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nM19jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4rX19sb2FkX2R5bmFtaWNcXG4raW50IHByb2c0KGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nNF9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkOWI4MTY5MWQ3YWRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2cyX2NhbGxlZCA9IGZhbHNlO1xcbitib29sIHByb2czX2NhbGxlZCA9IGZhbHNlO1xcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2cyKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nMl9jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHAvc3lzX2VudGVyXFxcIilcXG4raW50IHByb2czKGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRwcm9nM19jYWxsZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjIxOjM4LjYwMjUwMDMyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzOTcxNzUzNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTdlMzkyODU3YmNjYmY1NzI2ZmZkNDk3NGNhOTA2NmEyNmJmNDE2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjIxOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG5pbmRleCA5ZDE2MGI1YjljMGVlLi41Mjk3OGYwZTA0NTM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG4rKysgYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbkBAIC0yMTgsNiArMjE4LDExIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcbiAjZGVmaW5lIF9fYXJnX3VudHJ1c3RlZCBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFwiYXJnOnVudHJ1c3RlZFwiKSkpXG4gI2RlZmluZSBfX2FyZ19hcmVuYSBfX2F0dHJpYnV0ZSgoYnRmX2RlY2xfdGFnKFwiYXJnOmFyZW5hXCIpKSlcbiBcbisvKiBNYXJrIGEgQlBGIHByb2dyYW0gdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGluc3RlYWQgb2YgYXV0b2xvYWRlZCxcbisgKiBlcXVpdmFsZW50IHRvIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKS5cbisgKi9cbisjZGVmaW5lIF9fbG9hZF9keW5hbWljIF9fYXR0cmlidXRlX18oKGJ0Zl9kZWNsX3RhZyhcImxvYWR0eXBlOmR5bmFtaWNcIikpKVxuK1xuICNpZm5kZWYgX19fYnBmX2NvbmNhdFxuICNkZWZpbmUgX19fYnBmX2NvbmNhdChhLCBiKSBhICMjIGJcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggYjc0OWMwMTc0MmVlMC4uNWQ1OGRiZjI1MjM0ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC00OTQsNyArNDk0LDcgQEAgc3RydWN0IGJwZl9wcm9ncmFtIHtcbiBcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4gXG4gXHRpbnQgZmQ7XG4tXHRib29sIGF1dG9sb2FkO1xuK1x0ZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgbG9hZF90eXBlO1xuIFx0Ym9vbCBhdXRvYXR0YWNoO1xuIFx0Ym9vbCBzeW1fZ2xvYmFsO1xuIFx0Ym9vbCBtYXJrX2J0Zl9zdGF0aWM7XG5AQCAtNzI1LDYgKzcyNSw3IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcbiBcdGJvb2wgaGFzX3N1YmNhbGxzO1xuIFx0Ym9vbCBoYXNfcm9kYXRhO1xuK1x0Ym9vbCBoYXNfZHlubG9hZF9wcm9ncztcbiBcbiBcdHN0cnVjdCBicGZfZ2VuICpnZW5fbG9hZGVyO1xuIFxuQEAgLTg3MiwxMSArODczLDExIEBAIGJwZl9vYmplY3RfX2luaXRfcHJvZyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHQgKiBhdXRvbG9hZCBzZXQgdG8gZmFsc2UuXG4gXHQgKi9cbiBcdGlmIChzZWNfbmFtZVswXSA9PSAnPycpIHtcbi1cdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IGZhbHNlO1xuK1x0XHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRDtcbiBcdFx0LyogZnJvbSBub3cgb24gZm9yZ2V0IHRoZXJlIHdhcyA/IGluIHNlY3Rpb24gbmFtZSAqL1xuIFx0XHRzZWNfbmFtZSsrO1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IHRydWU7XG4rXHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE87XG4gXHR9XG4gXG4gXHRwcm9nLVx1MDAzZWF1dG9hdHRhY2ggPSB0cnVlO1xuQEAgLTExMjUsOSArMTEyNiwxMCBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9zdF9vcHNfcHJvZ3JhbShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuIH1cbiBcbiAvKiBGb3IgZWFjaCBzdHJ1Y3Rfb3BzIHByb2dyYW0gUCwgcmVmZXJlbmNlZCBmcm9tIHNvbWUgc3RydWN0X29wcyBtYXAgTSxcbi0gKiBlbmFibGUgUC5hdXRvbG9hZCBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoIE0uYXV0b2NyZWF0ZSBpcyB0cnVlLFxuLSAqIGRpc2FibGUgUC5hdXRvbG9hZCBpZiBmb3IgYWxsIE1zIE0uYXV0b2NyZWF0ZSBpcyBmYWxzZS5cbi0gKiBEb24ndCBjaGFuZ2UgUC5hdXRvbG9hZCBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgZnJvbSBhbnkgbWFwcy5cbisgKiBzZXQgUCdzIGxvYWQgdHlwZSB0byBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBpZiB0aGVyZSBhcmUgTXMgZm9yIHdoaWNoXG4rICogTS5hdXRvY3JlYXRlIGlzIHRydWUsIG9yIHRvIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCBpZiBmb3IgYWxsIE1zXG4rICogTS5hdXRvY3JlYXRlIGlzIGZhbHNlLlxuKyAqIERvbid0IGNoYW5nZSBQJ3MgbG9hZCB0eXBlIGZvciBwcm9ncmFtcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBmcm9tIGFueSBtYXBzLlxuICAqL1xuIHN0YXRpYyBpbnQgYnBmX29iamVjdF9hZGp1c3Rfc3RydWN0X29wc19hdXRvbG9hZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbkBAIC0xMTYzLDcgKzExNjUsOCBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKHVzZV9jbnQpXG4tXHRcdFx0cHJvZy1cdTAwM2VhdXRvbG9hZCA9IHNob3VsZF9sb2FkO1xuK1x0XHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gc2hvdWxkX2xvYWQgPyBCUEZfUFJPR19MT0FEX1RZUEVfQVVUT1xuK1x0XHRcdFx0OiBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xMjQyLDEzICsxMjQ1LDE0IEBAIHN0YXRpYyBpbnQgYnBmX21hcF9faW5pdF9rZXJuX3N0cnVjdF9vcHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcbiBcdFx0XHRpZiAoc3Rfb3BzLVx1MDAzZXByb2dzW2ldKSB7XG4gXHRcdFx0XHQvKiBJZiB3ZSBoYWQgZGVjbGFyYXRpdmVseSBzZXQgc3RydWN0X29wcyBjYWxsYmFjaywgd2UgbmVlZCB0b1xuLVx0XHRcdFx0ICogZm9yY2UgaXRzIGF1dG9sb2FkIHRvIGZhbHNlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZVxuLVx0XHRcdFx0ICogYSBjaGFuY2Ugb2Ygc3VjY2VlZGluZyBmcm9tIFBPViBvZiB0aGUgY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC5cbi1cdFx0XHRcdCAqIElmIHRoaXMgcHJvZ3JhbSBpcyBzdGlsbCByZWZlcmVuY2VkIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsXG4tXHRcdFx0XHQgKiB0aGVuIGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoKSB3aWxsIHVwZGF0ZSBpdHNcbi1cdFx0XHRcdCAqIGF1dG9sb2FkIGFjY29yZGluZ2x5LlxuK1x0XHRcdFx0ICogZm9yY2UgaXRzIGxvYWQgdHlwZSB0byBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQsIGJlY2F1c2VcbitcdFx0XHRcdCAqIGl0IGRvZXNuJ3QgaGF2ZSBhIGNoYW5jZSBvZiBzdWNjZWVkaW5nIGZyb20gUE9WIG9mIHRoZVxuK1x0XHRcdFx0ICogY3VycmVudCBzdHJ1Y3Rfb3BzIG1hcC4gSWYgdGhpcyBwcm9ncmFtIGlzIHN0aWxsIHJlZmVyZW5jZWRcbitcdFx0XHRcdCAqIHNvbWV3aGVyZSBlbHNlLCB0aG91Z2gsIHRoZW5cbitcdFx0XHRcdCAqIGJwZl9vYmplY3RfYWRqdXN0X3N0cnVjdF9vcHNfYXV0b2xvYWQoKSB3aWxsIHVwZGF0ZSBpdHNcbitcdFx0XHRcdCAqIGxvYWQgdHlwZSBhY2NvcmRpbmdseS5cbiBcdFx0XHRcdCAqL1xuLVx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldLVx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XG4rXHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMTI4Nyw3ICsxMjkxLDcgQEAgc3RhdGljIGludCBicGZfbWFwX19pbml0X2tlcm5fc3RydWN0X29wcyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRcdCAqIGlmIHVzZXIgcmVwbGFjZWQgaXQgd2l0aCBhbm90aGVyIHByb2dyYW0gb3IgTlVMTFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChzdF9vcHMtXHUwMDNlcHJvZ3NbaV0gXHUwMDI2XHUwMDI2IHN0X29wcy1cdTAwM2Vwcm9nc1tpXSAhPSBwcm9nKVxuLVx0XHRcdFx0c3Rfb3BzLVx1MDAzZXByb2dzW2ldLVx1MDAzZWF1dG9sb2FkID0gZmFsc2U7XG4rXHRcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0tXHUwMDNlbG9hZF90eXBlID0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEO1xuIFxuIFx0XHRcdC8qIFVwZGF0ZSB0aGUgdmFsdWUgZnJvbSB0aGUgc2hhZG93IHR5cGUgKi9cbiBcdFx0XHRzdF9vcHMtXHUwMDNlcHJvZ3NbaV0gPSBwcm9nO1xuQEAgLTM2MDAsNyArMzYwNCw3IEBAIHN0YXRpYyBib29sIG9ial9uZWVkc192bWxpbnV4X2J0Zihjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0fVxuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfcHJvZ3JhbShwcm9nLCBvYmopIHtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuK1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAocHJvZ19uZWVkc192bWxpbnV4X2J0Zihwcm9nKSlcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC02MTk0LDcgKzYxOTgsNyBAQCBicGZfb2JqZWN0X19yZWxvY2F0ZV9jb3JlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnRhcmdfYnRmX3BhdGgpXG4gXHRcdFx0Lyogbm8gbmVlZCB0byBhcHBseSBDTy1SRSByZWxvY2F0aW9uIGlmIHRoZSBwcm9ncmFtIGlzXG4gXHRcdFx0ICogbm90IGdvaW5nIHRvIGJlIGxvYWRlZFxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICghcHJvZy1cdTAwM2VhdXRvbG9hZClcbitcdFx0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0LyogYWRqdXN0IGluc25faWR4IGZyb20gc2VjdGlvbiBmcmFtZSBvZiByZWZlcmVuY2UgdG8gdGhlIGxvY2FsXG5AQCAtNzE1NCw2ICs3MTU4LDUwIEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXNzaWduX2V4Y19jYihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2RlZmluZSBEWU5MT0FEX0RFQ0xfVEFHIFwibG9hZHR5cGU6ZHluYW1pY1wiXG4rXG4rLypcbisgKiBDaGVjayB3aGV0aGVyIGEgQlBGIHByb2dyYW0gaXMgYW5ub3RhdGVkIHdpdGggdGhlIERZTkxPQURfREVDTF9UQUcgQlRGXG4rICogZGVjbCB0YWcsIHJlcXVlc3RpbmcgdGhhdCBpdCBiZSBsb2FkZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdGhlIG9iamVjdCBsb2FkLlxuKyAqXG4rICogUmV0dXJucyAxIGlmIHRoZSB0YWcgaXMgcHJlc2VudCwgMCBpZiBpdCBpcyBub3QsIG5lZ2F0aXZlIGVycm9yIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgaW50IHByb2dfaGFzX2R5bmxvYWRfdGFnKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbit7XG4rXHRpbnQgaSwgbjtcbitcbitcdGlmICghb2JqLVx1MDAzZWJ0ZilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRuID0gYnRmX190eXBlX2NudChvYmotXHUwMDNlYnRmKTtcbitcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG47IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnRhZ190LCAqZm5fdDtcbitcbitcdFx0dGFnX3QgPSBidGZfX3R5cGVfYnlfaWQob2JqLVx1MDAzZWJ0ZiwgaSk7XG4rXHRcdGlmICghYnRmX2lzX2RlY2xfdGFnKHRhZ190KSB8fCBidGZfZGVjbF90YWcodGFnX3QpLVx1MDAzZWNvbXBvbmVudF9pZHggIT0gLTEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChzdHJjbXAoYnRmX19zdHJfYnlfb2Zmc2V0KG9iai1cdTAwM2VidGYsIHRhZ190LVx1MDAzZW5hbWVfb2ZmKSxcbitcdFx0XHQgICBEWU5MT0FEX0RFQ0xfVEFHKSAhPSAwKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBhIGRlY2wgdGFnJ3MgdHlwZSBmaWVsZCBwb2ludHMgYXQgdGhlIGVudGl0eSBpdCBkZWNvcmF0ZXMgKi9cbitcdFx0Zm5fdCA9IGJ0Zl9fdHlwZV9ieV9pZChvYmotXHUwMDNlYnRmLCB0YWdfdC1cdTAwM2V0eXBlKTtcbitcdFx0aWYgKCFidGZfaXNfZnVuYyhmbl90KSB8fCBidGZfZnVuY19saW5rYWdlKGZuX3QpICE9IEJURl9GVU5DX0dMT0JBTCkge1xuK1x0XHRcdHByX3dhcm4oXCJwcm9nICclcyc6IFwiIERZTkxPQURfREVDTF9UQUdcbitcdFx0XHRcdFwiIGRlY2wgdGFnIG11c3QgYmUgYXBwbGllZCB0byBhIGdsb2JhbCBmdW5jdGlvblxcblwiLFxuK1x0XHRcdFx0cHJvZy1cdTAwM2VuYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RyY21wKGJ0Zl9fc3RyX2J5X29mZnNldChvYmotXHUwMDNlYnRmLCBmbl90LVx1MDAzZW5hbWVfb2ZmKSwgcHJvZy1cdTAwM2VuYW1lKSAhPSAwKVxuK1x0XHRcdGNvbnRpbnVlOyAgIC8qIHRhZyBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHByb2dyYW0gKi9cbitcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCB7XG4gXHRlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlO1xuIFx0Y29uc3QgY2hhciAqY3R4X25hbWU7XG5AQCAtNzUzMCw3ICs3NTc4LDcgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19yZWxvY2F0ZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICp0YXJnX2J0Zl9wYXRcbiBcdFx0ICovXG4gXHRcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuK1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRlcnIgPSBicGZfb2JqZWN0X19yZWxvY2F0ZV9jYWxscyhvYmosIHByb2cpO1xuQEAgLTc1NjYsNyArNzYxNCw3IEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9fcmVsb2NhdGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqdGFyZ19idGZfcGF0XG4gXHRcdHByb2cgPSBcdTAwMjZvYmotXHUwMDNlcHJvZ3JhbXNbaV07XG4gXHRcdGlmIChwcm9nX2lzX3N1YnByb2cob2JqLCBwcm9nKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkKVxuK1x0XHRpZiAocHJvZy1cdTAwM2Vsb2FkX3R5cGUgPT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBQcm9jZXNzIGRhdGEgcmVsb3MgZm9yIG1haW4gcHJvZ3JhbXMgKi9cbkBAIC04MDU1LDcgKzgxMDMsNyBAQCBzdGF0aWMgaW50IGJwZl9vYmplY3RfbG9hZF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZ1xuIFx0XHRcdGxvZ19idWYgPSBwcm9nLVx1MDAzZWxvZ19idWY7XG4gXHRcdFx0bG9nX2J1Zl9zaXplID0gcHJvZy1cdTAwM2Vsb2dfc2l6ZTtcbiBcdFx0XHRvd25fbG9nX2J1ZiA9IGZhbHNlO1xuLVx0XHR9IGVsc2UgaWYgKG9iai1cdTAwM2Vsb2dfYnVmKSB7XG4rXHRcdH0gZWxzZSBpZiAob2JqLVx1MDAzZWxvZ19idWYgXHUwMDI2XHUwMDI2IHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKSB7XG4gXHRcdFx0bG9nX2J1ZiA9IG9iai1cdTAwM2Vsb2dfYnVmO1xuIFx0XHRcdGxvZ19idWZfc2l6ZSA9IG9iai1cdTAwM2Vsb2dfc2l6ZTtcbiBcdFx0XHRvd25fbG9nX2J1ZiA9IGZhbHNlO1xuQEAgLTgzOTgsMTAgKzg0NDYsMTQgQEAgYnBmX29iamVjdF9fbG9hZF9wcm9ncyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBpbnQgbG9nX2xldmVsKVxuIFx0XHRwcm9nID0gXHUwMDI2b2JqLVx1MDAzZXByb2dyYW1zW2ldO1xuIFx0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJvZy1cdTAwM2VhdXRvbG9hZCkge1xuLVx0XHRcdHByX2RlYnVnKFwicHJvZyAnJXMnOiBza2lwcGVkIGxvYWRpbmdcXG5cIiwgcHJvZy1cdTAwM2VuYW1lKTtcbitcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKSB7XG4rXHRcdFx0cHJfZGVidWcoXCJwcm9nICclcyc6IHNraXBwZWQgbG9hZGluZywgbG9hZCB0eXBlIGlzICVzXFxuXCIsXG4rXHRcdFx0XHQgcHJvZy1cdTAwM2VuYW1lLFxuK1x0XHRcdFx0IHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDID9cbitcdFx0XHRcdCBcImR5bmFtaWNcIiA6IFwiZGlzYWJsZWRcIik7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbitcbiBcdFx0cHJvZy1cdTAwM2Vsb2dfbGV2ZWwgfD0gbG9nX2xldmVsO1xuIFxuIFx0XHRpZiAob2JqLVx1MDAzZWdlbl9sb2FkZXIpXG5AQCAtODQ2NCw2ICs4NTE2LDIyIEBAIHN0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X3Byb2dzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0XG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH1cbiBcdFx0fVxuK1xuK1x0XHRpZiAocHJvZ19pc19zdWJwcm9nKG9iaiwgcHJvZykpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IHByb2dfaGFzX2R5bmxvYWRfdGFnKG9iaiwgcHJvZyk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0aWYgKGVyciBcdTAwM2UgMCkge1xuK1x0XHRcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRwcl93YXJuKFwicHJvZyAnJXMnOiBmYWlsZWQgdG8gYXBwbHkgXCIgRFlOTE9BRF9ERUNMX1RBR1xuK1x0XHRcdFx0XHRcIiBkZWNsIHRhZzogJXNcXG5cIixcbitcdFx0XHRcdFx0cHJvZy1cdTAwM2VuYW1lLCBlcnJzdHIoZXJyKSk7XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdH1cbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtOTA3NSwxNSArOTE0MywyMiBAQCBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2NsZWFudXBfYnRmKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRvYmotXHUwMDNlYnRmX21vZHVsZXNfbG9hZGVkID0gZmFsc2U7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZXMpO1xuIFxuLVx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbi1cdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuLVx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbitcdC8qIFRoZSBidGZfdm1saW51eCBkYXRhIGlzIG5lZWRlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zLFxuK1x0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxuK1x0ICovXG4rXHRpZiAoIW9iai1cdTAwM2VoYXNfZHlubG9hZF9wcm9ncykge1xuK1x0XHRidGZfX2ZyZWUob2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbitcdFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX29iamVjdF9wb3N0X2xvYWRfY2xlYW51cChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbi1cdC8qIGNsZWFuIHVwIGZkX2FycmF5ICovXG4tXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlZmRfYXJyYXkpO1xuK1x0LyogVGhlIGZkIGFycmF5IGlzIG5lZWRlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zLFxuK1x0ICogc28gZGVmZXIgZnJlZWluZyBpdCBpbiB0aGF0IGNhc2UgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpZmV0aW1lLlxuK1x0ICovXG4rXHRpZiAoIW9iai1cdTAwM2VoYXNfZHlubG9hZF9wcm9ncyB8fCAhb2JqLVx1MDAzZWZkX2FycmF5X2NudClcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWZkX2FycmF5KTtcbiBcbiBcdC8qIGNsZWFuIHVwIEJURiAqL1xuIFx0YnBmX29iamVjdF9jbGVhbnVwX2J0ZihvYmopO1xuQEAgLTk2NzcsNiArOTc1Miw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0Y2xvc2Uob2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcbiBcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VqdW1wdGFibGVfbWFwcyk7XG4gXG4rXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlZmRfYXJyYXkpO1xuK1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbkBAIC05Nzk5LDE2ICs5ODc2LDE1IEBAIGNvbnN0IGNoYXIgKmJwZl9wcm9ncmFtX19zZWN0aW9uX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKVxuIFxuIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbiB7XG4tXHRyZXR1cm4gcHJvZy1cdTAwM2VhdXRvbG9hZDtcbitcdHJldHVybiBwcm9nLVx1MDAzZWxvYWRfdHlwZSA9PSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTztcbiB9XG4gXG4taW50IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBib29sIGF1dG9sb2FkKVxuK2ludCBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgYXV0b2xvYWQpXG4ge1xuLVx0aWYgKHByb2ctXHUwMDNlb2JqLVx1MDAzZXN0YXRlIFx1MDAzZT0gT0JKX0xPQURFRClcbitcdGlmIChhdXRvbG9hZCAhPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBcdTAwMjZcdTAwMjYgYXV0b2xvYWQgIT0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKVxuIFx0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbiBcbi1cdHByb2ctXHUwMDNlYXV0b2xvYWQgPSBhdXRvbG9hZDtcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHByb2csIGF1dG9sb2FkKTtcbiB9XG4gXG4gYm9vbCBicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG5AQCAtMTUxMTEsNyArMTUxODcsNyBAQCBpbnQgYnBmX29iamVjdF9fYXR0YWNoX3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKVxuIFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSAqcHJvZ19za2VsLVx1MDAzZXByb2c7XG4gXHRcdHN0cnVjdCBicGZfbGluayAqKmxpbmsgPSBwcm9nX3NrZWwtXHUwMDNlbGluaztcbiBcbi1cdFx0aWYgKCFwcm9nLVx1MDAzZWF1dG9sb2FkIHx8ICFwcm9nLVx1MDAzZWF1dG9hdHRhY2gpXG4rXHRcdGlmIChwcm9nLVx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyB8fCAhcHJvZy1cdTAwM2VhdXRvYXR0YWNoKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHQvKiBhdXRvLWF0dGFjaGluZyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIHByb2dyYW0gKi9cbkBAIC0xNTIyMSwzICsxNTI5NywxMzYgQEAgdm9pZCBicGZfb2JqZWN0X19kZXN0cm95X3NrZWxldG9uKHN0cnVjdCBicGZfb2JqZWN0X3NrZWxldG9uICpzKVxuIFx0ZnJlZShzLVx1MDAzZXByb2dzKTtcbiBcdGZyZWUocyk7XG4gfVxuK1xuK3N0YXRpYyBpbnQgYnBmX3Byb2dyYW1fX3NldF9keW5hbWljbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4re1xuK1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbitcdGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lO1xuK1xuK1x0b2JqID0gcHJvZy1cdTAwM2VvYmo7XG4rXHRpZiAoIW9iailcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4rXG4rXHQvKiBEeW5hbWljYWxseS1sb2FkZWQgcHJvZ3JhbXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGdlbl9sb2FkZXIuXG4rXHQgKiBUaGlzIGlzIGJlY2F1c2UgYnBmX29iamVjdF9sb2FkX3Byb2cgaXMgbm90IGNhbGxlZCBmb3JcbitcdCAqIGR5bmFtaWNsb2FkIHByb2dyYW1zLCBzbyBkeW5hbWljbG9hZCBwcm9ncmFtcyBhcmUgbm90IHZpc2libGVcbitcdCAqIHRvIGdlbl9sb2FkZXIuIEZvciB0aGlzIHJlYXNvbiwgcHJldmVudCBjYWxsaW5nXG4rXHQgKiBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkIHdoZW4gZ2VuX2xvYWRlciB3YXMgdXNlZCB0b1xuK1x0ICogZ2VuZXJhdGUgYSBCUEYgb2JqZWN0IGxvYWRlci5cbitcdCAqIEEgZ2VuX2xvYWRlciBpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyBjYWxsZWQgZm9yIHByb2dyYW1zIHdpdGhcbitcdCAqIGxvYWQgdHlwZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyBhbmQgZGVmaW5lcyBpdHMgb3duIG1vZGVsIGZvclxuK1x0ICogbG9hZGluZyBCUEYgcHJvZ3JhbXMuXG4rXHQgKi9cbitcdGlmIChvYmotXHUwMDNlZ2VuX2xvYWRlcilcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVOT1RTVVApO1xuK1xuK1x0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpKVxuK1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcbitcdGF0dGFjaF9uYW1lID0gc3RyY2hyKHByb2ctXHUwMDNlc2VjX25hbWUsICcvJyk7XG4rXHRpZiAoIWF0dGFjaF9uYW1lIHx8IHN0cmNocihhdHRhY2hfbmFtZSwgJzonKSkge1xuK1x0XHQvKiBPbmx5IHJlamVjdCBwcm9ncmFtcyB0aGF0IHJlcXVpcmUgQlRGLWJhc2VkIGF0dGFjaCB0YXJnZXRcbitcdFx0ICogcmVzb2x1dGlvbiAoaW5kaWNhdGVkIGJ5IHRoZSBTRUNfQVRUQUNIX0JURiBmbGFnKS4gU3VjaFxuK1x0XHQgKiBwcm9ncmFtcyBuZWVkIHRoZSBzZWN0aW9uIG5hbWUgcGFyc2VkIGZvciB0aGUgYXR0YWNoIHRhcmdldFxuK1x0XHQgKiBmdW5jdGlvbiBuYW1lIChhZnRlciAnLycpIGFuZCBvcHRpb25hbGx5IHRoZSBtb2R1bGUgbmFtZVxuK1x0XHQgKiAoYmVmb3JlICc6JykgZm9yIGxpYmJwZl9maW5kX2F0dGFjaF9idGZfaWQuXG4rXHRcdCAqXG4rXHRcdCAqIFByb2dyYW1zIGxpa2UgU0VDKFwiY2xhc3NpZmllclwiKSwgU0VDKFwic29ja2V0XCIpLCBldGMuIGRvXG4rXHRcdCAqIG5vdCByZXF1aXJlIEJURiBhdHRhY2ggcmVzb2x1dGlvbiBhbmQgY2FuIHNhZmVseSB1c2VcbitcdFx0ICogZHluYW1pYyBsb2FkaW5nIGRlc3BpdGUgaGF2aW5nIG5vICcvJyBpbiB0aGVpciBzZWN0aW9uXG4rXHRcdCAqIG5hbWUuIFRoZSBCVEYgZ3VhcmQgaW4gbGliYnBmX3ByZXBhcmVfcHJvZ19sb2FkIChjaGVja2luZ1xuK1x0XHQgKiBTRUNfQVRUQUNIX0JURikgaXMgdGhlIGF1dGhvcml0YXRpdmUgY2hlY2s7IHRoaXMgaXMgYW5cbitcdFx0ICogZWFybHktcmVqZWN0IGZvciBwcm9ncmFtcyB0aGF0IHdvdWxkIGZhaWwgdGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRsb25nIGZsYWdzID0gcHJvZy1cdTAwM2VzZWNfZGVmID9cbitcdFx0XHQobG9uZylwcm9nLVx1MDAzZXNlY19kZWYtXHUwMDNlY29va2llIDogU0VDX0FUVEFDSF9CVEY7XG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IFNFQ19BVFRBQ0hfQlRGKSBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXR0YWNoX2J0Zl9pZClcbitcdFx0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcdH1cbitcbitcdG9iai1cdTAwM2VoYXNfZHlubG9hZF9wcm9ncyA9IHRydWU7XG4rXHRwcm9nLVx1MDAzZWxvYWRfdHlwZSA9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDO1xuK1x0cHJvZy1cdTAwM2VhdXRvYXR0YWNoID0gZmFsc2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgZW51bSBicGZfcHJvZ19sb2FkX3R5cGUgdHlwZSlcbit7XG4rXHRpZiAoIXByb2cpXG4rXHRcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNlb2JqLVx1MDAzZXN0YXRlIFx1MDAzZT0gT0JKX0xPQURFRClcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUM6XG4rXHRcdHJldHVybiBicGZfcHJvZ3JhbV9fc2V0X2R5bmFtaWNsb2FkKHByb2cpO1xuK1x0Y2FzZSBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTzpcbitcdGNhc2UgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOlxuK1x0XHQvKlxuK1x0XHQgKiBMZWF2aW5nIHRoZSBkeW5hbWljIHN0YXRlOiBzZXRfZHluYW1pY2xvYWQoKSBjbGVhcmVkXG4rXHRcdCAqIGF1dG9hdHRhY2ggYmVjYXVzZSBkeW5hbWljYWxseSBsb2FkZWQgcHJvZ3JhbXMgYXJlIGF0dGFjaGVkXG4rXHRcdCAqIGV4cGxpY2l0bHkuIFJlc3RvcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQgbG9hZCB0eXBlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHByb2ctXHUwMDNlbG9hZF90eXBlID09IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxuK1x0XHRcdHByb2ctXHUwMDNlYXV0b2F0dGFjaCA9IHRydWU7XG4rXHRcdHByb2ctXHUwMDNlbG9hZF90eXBlID0gdHlwZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBicGZfcHJvZ3JhbV9fbG9hZF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZylcbit7XG4rXHRyZXR1cm4gcHJvZy1cdTAwM2Vsb2FkX3R5cGU7XG4rfVxuK1xuKy8qXG4rICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBicGZfb2JqZWN0X19sb2FkX3Byb2dzLlxuKyAqIER5bmFtaWNhbGx5LWxvYWRlZCBwcm9ncmFtIGRhdGEgaXMgaW5pdGlhbGl6ZWQgb24gb2JqZWN0IGxvYWQuXG4rICogUG9zdC1sb2FkIGluaXRpYWxpemF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4rICovXG4raW50XG4rYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBpbnQgZXh0cmFfbG9nX2xldmVsKVxuK3tcbitcdGludCBlcnI7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1xuK1x0b2JqID0gcHJvZy1cdTAwM2VvYmo7XG4rXHRpZiAoIW9iaiB8fCBvYmotXHUwMDNlc3RhdGUgXHUwMDNjIE9CSl9MT0FERUQpXG4rXHRcdHJldHVybiBsaWJicGZfZXJyKC1FSU5WQUwpO1xuK1xuK1x0aWYgKHByb2dfaXNfc3VicHJvZyhvYmosIHByb2cpIHx8IHByb2ctXHUwMDNlbG9hZF90eXBlICE9IEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKVxuK1x0XHRyZXR1cm4gbGliYnBmX2VycigtRUlOVkFMKTtcbitcbitcdHByb2ctXHUwMDNlbG9nX2xldmVsIHw9IGV4dHJhX2xvZ19sZXZlbDtcbitcbitcdGVyciA9IGJwZl9vYmplY3RfbG9hZF9wcm9nKG9iaiwgcHJvZywgcHJvZy1cdTAwM2VpbnNucywgcHJvZy1cdTAwM2VpbnNuc19jbnQsXG4rXHRcdFx0XHQgICBvYmotXHUwMDNlbGljZW5zZSwgb2JqLVx1MDAzZWtlcm5fdmVyc2lvbiwgXHUwMDI2cHJvZy1cdTAwM2VmZCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdHByX3dhcm4oXCJwcm9nICclcyc6IGZhaWxlZCB0byBkeW5hbWljYWxseSBsb2FkOiAlZFxcblwiLCBwcm9nLVx1MDAzZW5hbWUsIGVycik7XG4rXHRcdHByb2ctXHUwMDNlbG9nX2xldmVsIFx1MDAyNj0gfmV4dHJhX2xvZ19sZXZlbDtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHByb2ctXHUwMDNlbG9nX2xldmVsIFx1MDAyNj0gfmV4dHJhX2xvZ19sZXZlbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmICghcHJvZyB8fCBwcm9nLVx1MDAzZWxvYWRfdHlwZSAhPSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQylcbitcdFx0cmV0dXJuIGxpYmJwZl9lcnIoLUVJTlZBTCk7XG4rXG4rXHQvKiBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGJ1dCByZXRhaW4gdGhlIHByb2dyYW0ncyBkYXRhIHRvXG4rXHQgKiBzdXBwb3J0IHJlbG9hZGluZyB0aGUgcHJvZ3JhbSBpZiBpdCBpcyByZXF1aXJlZCBhZ2Fpbi5cbitcdCAqL1xuK1x0ZXJyID0gemNsb3NlKHByb2ctXHUwMDNlZmQpO1xuK1x0cmV0dXJuIGVyciA/IGxpYmJwZl9lcnIoLWVycm5vKSA6IDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi5hNTYwNjhmMGYxMTIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuQEAgLTM1Niw2ICszNTYsMTkgQEAgTElCQlBGX0FQSSBpbnQgbGliYnBmX2F0dGFjaF90eXBlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSxcbiBMSUJCUEZfQVBJIGludCBsaWJicGZfZmluZF92bWxpbnV4X2J0Zl9pZChjb25zdCBjaGFyICpuYW1lLFxuIFx0XHRcdFx0XHQgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKTtcbiBcbisvKlxuKyAqIFRoZSBwcm9ncmFtIGxvYWQgdHlwZTpcbisgKlxuKyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEOiB0aGUgcHJvZ3JhbSBpcyBub3QgbG9hZGVkLlxuKyAqIC0gQlBGX1BST0dfTE9BRF9UWVBFX0FVVE86IHRoZSBwcm9ncmFtIGlzIGF1dG9sb2FkZWQgd2hlbiB0aGUgYnBmX29iamVjdCBpcyBsb2FkZWQuXG4rICogLSBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQzogdGhlIHByb2dyYW0gaXMgbG9hZGVkIGFuZCBhdHRhY2hlZCBkeW5hbWljYWxseS5cbisgKi9cbitlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSB7XG4rXHRCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQgPSAwLFxuK1x0QlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4rXHRCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcbit9O1xuK1xuIC8qIEFjY2Vzc29ycyBvZiBicGZfcHJvZ3JhbSAqL1xuIHN0cnVjdCBicGZfcHJvZ3JhbTtcbiBcbkBAIC0zNzYsNyArMzg5LDE4IEBAIExJQkJQRl9BUEkgdm9pZCBicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIExJQkJQRl9BUEkgY29uc3QgY2hhciAqYnBmX3Byb2dyYW1fX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIGNvbnN0IGNoYXIgKmJwZl9wcm9ncmFtX19zZWN0aW9uX25hbWUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbiBMSUJCUEZfQVBJIGJvb2wgYnBmX3Byb2dyYW1fX2F1dG9sb2FkKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4tTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2xvYWQpO1xuKy8qKlxuKyAqIEBicmllZiAqKmJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoKSoqIGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHNcbisgKiBjb21wYXRpYmlsaXR5OyAqKmJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkqKiBpcyB0aGUgcHJlZmVycmVkIEFQSS5cbisgKiBUaGUgZW51bSdzIG51bWJlcmluZyAoRElTQUJMRUQ9MCwgQVVUTz0xLCBEWU5BTUlDPTIpIG1hdGNoZXMgdGhlIHByZXZpb3VzXG4rICogYm9vbCBzZW1hbnRpY3MgKGZhbHNlPTAsIHRydWU9MSksIHNvIGV4aXN0aW5nIGJvb2wgY2FsbGVycyBrZWVwIGNvbXBpbGluZ1xuKyAqIGFuZCBiZWhhdmluZyB1bmNoYW5nZWQuIE9ubHkgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8gYW5kXG4rICogQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEIGFyZSBhY2NlcHRlZCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWxcbisgKiBhdXRvbG9hZCBvbi9vZmYgbWVhbmluZzsgdXNlIGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKCkgdG8gc2V0XG4rICogQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMuXG4rICovXG4rTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4rXHRcdFx0XHRcdCBlbnVtIGJwZl9wcm9nX2xvYWRfdHlwZSBhdXRvbG9hZCk7XG4gTElCQlBGX0FQSSBib29sIGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyk7XG4gTElCQlBGX0FQSSB2b2lkIGJwZl9wcm9ncmFtX19zZXRfYXV0b2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGJvb2wgYXV0b2F0dGFjaCk7XG4gXG5AQCAtMjA3OCw2ICsyMTAyLDEyIEBAIExJQkJQRl9BUEkgaW50IGxpYmJwZl91bnJlZ2lzdGVyX3Byb2dfaGFuZGxlcihpbnQgaGFuZGxlcl9pZCk7XG4gICovXG4gTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX2Nsb25lKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3Qgc3RydWN0IGJwZl9wcm9nX2xvYWRfb3B0cyAqb3B0cyk7XG4gXG4rTElCQlBGX0FQSSBpbnQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuK1x0XHRcdFx0XHQgIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGxvYWR0eXBlKTtcbitMSUJCUEZfQVBJIGVudW0gYnBmX3Byb2dfbG9hZF90eXBlIGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbitMSUJCUEZfQVBJIGludCBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGludCBleHRyYV9sb2dfbGV2ZWwpO1xuK0xJQkJQRl9BUEkgaW50IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTtcbitcbiAjaWZkZWYgX19jcGx1c3BsdXNcbiB9IC8qIGV4dGVybiBcIkNcIiAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuaW5kZXggMDhhYjJlYTg4MWZiNi4uNzQzMTJjOTVkMzI4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLm1hcFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYubWFwXG5AQCAtNDYwLDYgKzQ2MCwxMCBAQCBMSUJCUEZfMS44LjAge1xuIFx0Z2xvYmFsOlxuIFx0XHRicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGk7XG4gXHRcdGJwZl9wcm9ncmFtX19jbG9uZTtcbitcdFx0YnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHk7XG4rXHRcdGJwZl9wcm9ncmFtX19sb2FkX3R5cGU7XG4rXHRcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlO1xuK1x0XHRicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5O1xuIFx0XHRidGZfX2ZpbmRfYnlfbmFtZV9raW5kX293bjtcbiBcdFx0YnRmX19uZXdfZW1wdHlfb3B0cztcbiB9IExJQkJQRl8xLjcuMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9keW5hbWljbG9hZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZHluYW1pY2xvYWQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5OWM0MzAzNGZmOTJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2R5bmFtaWNsb2FkLmNcbkBAIC0wLDAgKzEsMjIyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcInRlc3RfZHluYW1pY2xvYWQuc2tlbC5oXCJcbitcbisvKiBwcm9nNCBpcyB0YWdnZWQgX19sb2FkX2R5bmFtaWMgaW4gdGhlIHNvdXJjZSBpbnN0ZWFkIG9mIGJlaW5nIHNldFxuKyAqIGltcGVyYXRpdmVseTsgdmVyaWZ5IHRoYXQgYW4gZXhwbGljaXQgYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoKSBjYWxsXG4rICogYmVmb3JlIGxvYWQgb3ZlcnJpZGVzIHRoZSB0YWcncyBkZWNsYXJhdGl2ZSBkZWZhdWx0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGR5bmFtaWNsb2FkX3ZlcmlmeV9vdmVycmlkZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X2R5bmFtaWNsb2FkICpza2VsO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSB0ZXN0X2R5bmFtaWNsb2FkX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJza2VsX29wZW5cIikpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2V0X2xvYWRfdHlwZV9kaXNhYmxlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVELFxuK1x0XHQgICAgICAgXCJwcm9nNF9sb2FkX3R5cGVfb3ZlcnJpZGRlblwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0Lyoga2VlcCB0aGUgb3RoZXIgZHluYW1pYy1sb2FkLW9ubHkgcHJvZ3JhbXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhpcyBsb2FkICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RJU0FCTEVEKTtcbitcbitcdGVyciA9IHRlc3RfZHluYW1pY2xvYWRfX2xvYWQoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2tlbF9sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBwcm9nNCB3YXMgbmV2ZXIgbG9hZGVkLCBzbyBpdCBjYW5ub3QgYmUgbG9hZGVkIGR5bmFtaWNhbGx5IGVpdGhlciAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCwgMCk7XG4rXHRBU1NFUlRfRVJSKGVyciwgXCJsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX292ZXJyaWRlXCIpO1xuK1xuK2NsZWFudXA6XG4rXHR0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpO1xuK31cbitcbit2b2lkIHRlc3RfZHluYW1pY2xvYWQodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXHRzdHJ1Y3QgdGVzdF9keW5hbWljbG9hZCAqc2tlbDtcbitcdGludCBlcnI7XG4rXG4rXHRza2VsID0gdGVzdF9keW5hbWljbG9hZF9fb3BlbigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiB0aGUgX19sb2FkX2R5bmFtaWMgdGFnIGFsb25lLCB3aXRoIG5vIGltcGVyYXRpdmUgY2FsbCwgbXVzdCBzZXRcbitcdCAqIHByb2c0J3MgbG9hZCB0eXBlIGJlZm9yZSBpdCBpcyBldmVyIHRvdWNoZWQgYmVsb3dcbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2c0KSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4rXHRcdCAgICAgICBcInByb2c0X3RhZ19sb2FkX3R5cGVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGlmICghQVNTRVJUX0ZBTFNFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQpLCBcInByb2c0X2F1dG9hdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIGRvbid0IGxvYWQgcHJvZzEgKi9cbitcdGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEsIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCk7XG4rXG4rXHQvKiBwcm9nMiBpcyBhdXRvbG9hZCAqL1xuK1x0YnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMiwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pO1xuK1xuK1x0LyogcHJvZzMgaXMgZHluYW1pY2FsbHkgbG9hZGVkICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4rXG4rXHRlcnIgPSB0ZXN0X2R5bmFtaWNsb2FkX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gdGVzdF9keW5hbWljbG9hZF9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiB0cmlnZ2VyIHRoZSBCUEYgcHJvZ3JhbXMgKi9cbitcdHVzbGVlcCgxKTtcbitcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMV9jYWxsZWQsIFwicHJvZzFfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkLCBcInByb2cyX2NhbGxlZFwiKTtcbitcdEFTU0VSVF9GQUxTRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwicHJvZzNfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2c0X2NhbGxlZCwgXCJwcm9nNF9jYWxsZWRcIik7XG4rXG4rXHQvKiBwcm9nMSBpcyBkaXNhYmxlZCBmb3IgbG9hZCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcImxvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHByb2cxIGlzIGRpc2FibGVkIGZvciBsb2FkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzEpO1xuK1x0aWYgKCFBU1NFUlRfRVJSKGVyciwgXCJ1bmxvYWRfZHluYW1pY2FsbHlfZGlzYWJsZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHByb2cyIGlzIGF1dG9sb2FkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2cyLCAwKTtcbitcdGlmICghQVNTRVJUX0VSUihlcnIsIFwibG9hZF9keW5hbWljYWxseV9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogcHJvZzIgaXMgYXV0b2xvYWQgKi9cbitcdGVyciA9IGJwZl9wcm9ncmFtX191bmxvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMik7XG4rXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcInVubG9hZF9keW5hbWljYWxseV9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogcmVzZXQgdGhlIGNhbGwgZmxhZ3MgKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCA9IGZhbHNlO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4rXG4rXHR1c2xlZXAoMSk7XG4rXG4rXHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzFfY2FsbGVkLCBcInByb2cxX2NhbGxlZFwiKTtcbitcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCwgXCJwcm9nMl9jYWxsZWRcIik7XG4rXHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcInByb2czX2NhbGxlZFwiKTtcbitcbitcdC8qIGxvYWQgcHJvZzMgKi9cbitcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImxvYWRfZHluYW1pY2FsbHlcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIGF0dGFjaCBwcm9nMyAqL1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHVzbGVlcCgxKTtcbitcbitcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcInByb2czX2NhbGxlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogZGV0YWNoIHByb2czIGFzIHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3kgZG9lc24ndCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4rXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsaW5rX2Rlc3Ryb3lcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHJlc2V0IHRoZSBjYWxsIGZsYWdzIGFmdGVyIGRldGFjaCAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQgPSBmYWxzZTtcbitcbitcdHVzbGVlcCgxKTtcbitcbitcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCwgXCJwcm9nMl9jYWxsZWRcIik7XG4rXHRBU1NFUlRfRkFMU0Uoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkLCBcInByb2czX2NhbGxlZFwiKTtcbitcbitcdC8qIHVubG9hZCBwcm9nMyAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3VubG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ1bmxvYWRfZHluYW1pY2FsbHlcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHJlbG9hZCBwcm9nMyAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwibG9hZF9keW5hbWljYWxseV9yZWxvYWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHJlYXR0YWNoIHByb2czICovXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcInJlYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHR1c2xlZXAoMSk7XG4rXG4rXHRpZiAoIUFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCJwcm9nM19jYWxsZWRfcmVhdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIGRldGFjaCBwcm9nMyBhcyB0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95IGRvZXNuJ3QgZGV0YWNoIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtcyAqL1xuK1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwibGlua19kZXN0cm95X3JlYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiB2ZXJpZnkgcmVndWxhciB1bmxvYWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBwcm9ncmFtLFxuK1x0ICogdW5sb2FkIHByb2czIGFzIGEgcmVndWxhciBwcm9ncmFtXG4rXHQgKi9cbitcdGJwZl9wcm9ncmFtX191bmxvYWQoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyk7XG4rXG4rXHQvKiByZXNldCB0aGUgY2FsbCBmbGFncyBhZnRlciB1bmxvYWQgKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cyX2NhbGxlZCA9IGZhbHNlO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzNfY2FsbGVkID0gZmFsc2U7XG4rXG4rXHR1c2xlZXAoMSk7XG4rXG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwicHJvZzJfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCJwcm9nM19jYWxsZWRcIik7XG4rXG4rXHQvKiByZWxvYWRpbmcgcHJvZzMgbXVzdCBmYWlsIGFzIGl0IHdhcyB1bmxvYWRlZCBhcyBhIHJlZ3VsYXIgcHJvZ3JhbSAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgMCk7XG4rXHRBU1NFUlRfRVJSKGVyciwgXCJsb2FkX2R5bmFtaWNhbGx5X2FmdGVyX3JlZ3VsYXJfdW5sb2FkXCIpO1xuK1xuK1x0LyogcnVuIHByb2c0IChkZWNsYXJhdGl2ZWx5IHRhZ2dlZCkgdGhyb3VnaCB0aGUgc2FtZSBkeW5hbWljXG4rXHQgKiBsb2FkL2F0dGFjaC90cmlnZ2VyL2RldGFjaC91bmxvYWQgY3ljbGUgYXMgcHJvZzNcbitcdCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX2xvYWRfZHluYW1pY2FsbHkoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCwgMCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicHJvZzRfbG9hZF9keW5hbWljYWxseVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goc2tlbC1cdTAwM2Vwcm9ncy5wcm9nNCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJwcm9nNF9hdHRhY2hcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdHVzbGVlcCgxKTtcbitcbitcdGlmICghQVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHJvZzRfY2FsbGVkLCBcInByb2c0X2NhbGxlZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicHJvZzRfbGlua19kZXN0cm95XCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fdW5sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzQpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJwcm9nNF91bmxvYWRfZHluYW1pY2FsbHlcIik7XG4rXG4rXHR0ZXN0X2R5bmFtaWNsb2FkX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0Lyogc2VwYXJhdGUgc2NlbmFyaW86IGltcGVyYXRpdmUgb3ZlcnJpZGUgb2YgdGhlIGRlY2xhcmF0aXZlIHRhZyAqL1xuK1x0ZHluYW1pY2xvYWRfdmVyaWZ5X292ZXJyaWRlKCk7XG4rXHRyZXR1cm47XG4rXG4rY2xlYW51cDpcbitcdHRlc3RfZHluYW1pY2xvYWRfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xvYWRfdHlwZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbG9hZF90eXBlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mYzkxZjY2NjZjNTA2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9sb2FkX3R5cGUuY1xuQEAgLTAsMCArMSwxNjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFwidGVzdF9sb2FkX3R5cGUuc2tlbC5oXCJcbitcbit2b2lkIHRlc3RfbG9hZF90eXBlKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1x0c3RydWN0IHRlc3RfbG9hZF90eXBlICpza2VsO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSB0ZXN0X2xvYWRfdHlwZV9fb3BlbigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBkb24ndCBsb2FkIHByb2cxICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2cxLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1xuK1x0LyogbG9hZCBhbmQgYXR0YWNoIHByb2cyICovXG4rXHRicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2cyLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyk7XG4rXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCJwcm9nMl9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfZHluYW1pY1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMsXG4rXHRcdCAgICAgICBcInByb2czX2xvYWRfdHlwZVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZCgpIGlzIGEgdGhpbiBmb3J3YXJkZXIgdG8gc2V0X2xvYWRfdHlwZSgpLFxuK1x0ICogcmVzdHJpY3RlZCB0byBBVVRPL0RJU0FCTEVEIHRvIHByZXNlcnZlIGl0cyBvcmlnaW5hbCBib29sIG9uL29mZlxuK1x0ICogbWVhbmluZzsgaXQgZG9lcyBjaGFuZ2UgdGhlIGxvYWQgdHlwZSBvZiBhIHByb2dyYW0gdGhhdCBpc24ndFxuK1x0ICogY3VycmVudGx5IEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPLlxuK1x0ICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIGZhbHNlKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXRfYXV0b2xvYWRfZmFsc2VcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9ESVNBQkxFRCxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX2FmdGVyX2ZhbHNlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIHRydWUpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9hdXRvbG9hZF90cnVlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX2FmdGVyX3RydWVcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHNldF9hdXRvbG9hZCgpIG9ubHkgYWNjZXB0cyBBVVRPL0RJU0FCTEVELCB0byBwcmVzZXJ2ZSBpdHMgb3JpZ2luYWxcbitcdCAqIG9uL29mZiBtZWFuaW5nOyBEWU5BTUlDIG11c3QgZ28gdGhyb3VnaCBzZXRfbG9hZF90eXBlKClcbitcdCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4rXHRpZiAoIUFTU0VSVF9FUlIoZXJyLCBcInNldF9hdXRvbG9hZF9keW5hbWljX3JlamVjdGVkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfQVVUTyxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX3VuY2hhbmdlZF9hZnRlcl9yZWplY3RlZF9hdXRvbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0RZTkFNSUMpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfZHluYW1pY19lbnVtXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfcHJvZ3JhbV9fbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyxcbitcdFx0ICAgICAgIFwicHJvZzNfbG9hZF90eXBlX2FmdGVyX2R5bmFtaWNfZW51bVwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogbGVhdmluZyBEWU5BTUlDIGZvciBBVVRPIG11c3QgcmVzdG9yZSBhdXRvYXR0YWNoIChyZWdyZXNzaW9uIHRlc3QgZm9yXG4rXHQgKiB0aGUgYXV0b2F0dGFjaCByZXNpZHVlIGJ1Zzogc2V0X2R5bmFtaWNsb2FkKCkgY2xlYXJzIGF1dG9hdHRhY2gsIGFuZFxuK1x0ICogbm90aGluZyB1c2VkIHRvIHJlc3RvcmUgaXQgb24gZXhpdClcbitcdCAqL1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMywgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8pO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfYXV0b1wiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoYnBmX3Byb2dyYW1fX2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czKSwgQlBGX1BST0dfTE9BRF9UWVBFX0FVVE8sXG4rXHRcdCAgICAgICBcInByb2czX2xvYWRfdHlwZV9hdXRvXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLCBcInByb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdC8qIHRoZSBzYW1lIHJlc2lkdWUgY2FuIHJlbGF5IHRocm91Z2ggRElTQUJMRUQgYW5kIHJlc3VyZmFjZSBvbiBhIGxhdGVyXG4rXHQgKiBESVNBQkxFRCAtXHUwMDNlIEFVVE8gdHJhbnNpdGlvbiwgc28gdGhlIGZpeCBtdXN0IGNvdmVyIGJvdGggZXhpdCBlZGdlc1xuK1x0ICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2V0X2xvYWRfdHlwZV9keW5hbWljX2FnYWluXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldF9sb2FkX3R5cGVfZGlzYWJsZWRcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9BVVRPKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXRfbG9hZF90eXBlX2F1dG9fdmlhX2Rpc2FibGVkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoIUFTU0VSVF9UUlVFKGJwZl9wcm9ncmFtX19hdXRvYXR0YWNoKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMpLFxuK1x0XHRcdCBcInByb2czX2F1dG9hdHRhY2hfcmVzdG9yZWRfdmlhX2Rpc2FibGVkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBhbiBvdXQtb2YtcmFuZ2UgbG9hZCB0eXBlIGlzIHJlamVjdGVkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCAoZW51bSBicGZfcHJvZ19sb2FkX3R5cGUpOTk5KTtcbitcdGlmICghQVNTRVJUX0VSUihlcnIsIFwic2V0X2xvYWRfdHlwZV9pbnZhbGlkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBjaGFuZ2UgdGhlIHR5cGUgYmFjayB0byBCUEZfUFJPR19MT0FEX1RZUEVfRFlOQU1JQyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRlc3QgKi9cbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfbG9hZF90eXBlKHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXRfbG9hZF90eXBlX2R5bmFtaWNfZmluYWxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmICghQVNTRVJUX0VRKGJwZl9wcm9ncmFtX19sb2FkX3R5cGUoc2tlbC1cdTAwM2Vwcm9ncy5wcm9nMyksIEJQRl9QUk9HX0xPQURfVFlQRV9EWU5BTUlDLFxuK1x0XHQgICAgICAgXCJwcm9nM19sb2FkX3R5cGVfZmluYWxcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IHRlc3RfbG9hZF90eXBlX19sb2FkKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfbG9hZFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKCFBU1NFUlRfVFJVRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2cyKSwgXCJwcm9nMl9hdXRvYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpZiAoIUFTU0VSVF9GQUxTRShicGZfcHJvZ3JhbV9fYXV0b2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKSwgXCJwcm9nM19hdXRvYXR0YWNoXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBsb2FkZWQgcHJvZ3JhbSB0eXBlIGNhbm5vdCBiZSBjaGFuZ2VkICovXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2xvYWRfdHlwZShza2VsLVx1MDAzZXByb2dzLnByb2czLCBCUEZfUFJPR19MT0FEX1RZUEVfRElTQUJMRUQpO1xuK1x0QVNTRVJUX0VSUihlcnIsIFwic2V0X2xvYWRfdHlwZV9hZnRlcl9sb2FkXCIpO1xuK1xuK1x0ZXJyID0gdGVzdF9sb2FkX3R5cGVfX2F0dGFjaChza2VsKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJza2VsX2F0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dXNsZWVwKDEpO1xuK1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2cxX2NhbGxlZCwgXCJwcm9nMV9jYWxsZWRcIik7XG4rXHRBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nMl9jYWxsZWQsIFwicHJvZzJfY2FsbGVkXCIpO1xuK1x0QVNTRVJUX0ZBTFNFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXByb2czX2NhbGxlZCwgXCJwcm9nM19jYWxsZWRcIik7XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fbG9hZF9keW5hbWljYWxseShza2VsLVx1MDAzZXByb2dzLnByb2czLCAwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJsb2FkX2R5bmFtaWNhbGx5XzFcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IGJwZl9wcm9ncmFtX19sb2FkX2R5bmFtaWNhbGx5KHNrZWwtXHUwMDNlcHJvZ3MucHJvZzMsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImxvYWRfZHluYW1pY2FsbHlfMlwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0LyogYXR0YWNoIHByb2czICovXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChza2VsLVx1MDAzZXByb2dzLnByb2czKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcImF0dGFjaFwiKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0dXNsZWVwKDEpO1xuK1xuK1x0aWYgKCFBU1NFUlRfVFJVRShza2VsLVx1MDAzZWJzcy1cdTAwM2Vwcm9nM19jYWxsZWQsIFwicHJvZzNfY2FsbGVkX2FnYWluXCIpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBkZXRhY2ggcHJvZzMgYXMgdGVzdF9sb2FkX3R5cGVfX2Rlc3Ryb3kgZG9lc24ndCBkZXRhY2ggZHluYW1pY2FsbHkgbG9hZGVkIHByb2dyYW1zICovXG4rXHRlcnIgPSBicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwibGlua19kZXN0cm95XCIpO1xuK1xuK2NsZWFudXA6XG4rXHR0ZXN0X2xvYWRfdHlwZV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZHluYW1pY2xvYWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2R5bmFtaWNsb2FkLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42ZjVhNWNiODk4MDMxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9keW5hbWljbG9hZC5jXG5AQCAtMCwwICsxLDQwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbitcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xuK2Jvb2wgcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4rYm9vbCBwcm9nM19jYWxsZWQgPSBmYWxzZTtcbitib29sIHByb2c0X2NhbGxlZCA9IGZhbHNlO1xuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitpbnQgcHJvZzEoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHByb2cxX2NhbGxlZCA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBwcm9nMihjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cHJvZzJfY2FsbGVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4raW50IHByb2czKGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRwcm9nM19jYWxsZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitfX2xvYWRfZHluYW1pY1xuK2ludCBwcm9nNChjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cHJvZzRfY2FsbGVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbG9hZF90eXBlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9sb2FkX3R5cGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkOWI4MTY5MWQ3YWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xvYWRfdHlwZS5jXG5AQCAtMCwwICsxLDMxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2Vcbitcbitib29sIHByb2cxX2NhbGxlZCA9IGZhbHNlO1xuK2Jvb2wgcHJvZzJfY2FsbGVkID0gZmFsc2U7XG4rYm9vbCBwcm9nM19jYWxsZWQgPSBmYWxzZTtcbitcbitTRUMoXCJyYXdfdHAvc3lzX2VudGVyXCIpXG4raW50IHByb2cxKGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRwcm9nMV9jYWxsZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInJhd190cC9zeXNfZW50ZXJcIilcbitpbnQgcHJvZzIoY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdHByb2cyX2NhbGxlZCA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwicmF3X3RwL3N5c19lbnRlclwiKVxuK2ludCBwcm9nMyhjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0cHJvZzNfY2FsbGVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToyMTozOC42MDI1MDM4NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk3MTY5MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBOb3QgV29ydGggRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0byBldmFsdWF0ZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHdoZXRoZXIgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwgY29kZSB0aGF0IHN5emthbGxlciB3b3VsZCB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIHJlbGF0ZWQgbWFwIGFuZCB0ZXN0IGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgKnNob3VsZCogYmUgYSBuby1nbyBmb3IgZnV6emluZywgc2luY2UgaXQncyBhbGwgaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSDigJMgYW5kIHNwZWNpZmljYWxseSB0aGUgbGliYnBmIHVzZXItc3BhY2UgbGlicmFyeS5cblxuVGhlIHByb21wdCBleHBsaWNpdGx5IHN0YXRlcyB3aGF0IGNvbnN0aXR1dGVzIGNoYW5nZXMgdGhhdCAqd291bGRuJ3QqIHdhcnJhbnQgZnV6emluZywgYW5kIHRoaXMgc2VlbXMgdG8gYWxpZ24uIEl0J3MgdXNlci1zcGFjZSBjb2RlOyBzeXprYWxsZXIncyBwcmltYXJ5IGZvY3VzIGlzIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgc3lzY2FsbCBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgdXNlci1zcGFjZSBjb2RlIGlzbid0IHNvbWVob3cgaW5mbHVlbmNpbmcga2VybmVsIGV4ZWN1dGlvbiBkaXJlY3RseSAoYmV5b25kIG5vcm1hbCBzeXNjYWxsLWJhc2VkIGludGVyYWN0aW9uKSwgYnV0IEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGluaGVyZW50bHkgdGhhdCB3b3VsZC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IGRvZXMgdGhpcyBjaGFuZ2UgcG90ZW50aWFsbHkgKmV4cG9zZSogbmV3IGtlcm5lbCBidWdzIHZpYSBhbiB1cGRhdGVkIGxpYnJhcnkgb3Igc3lzY2FsbCwgb3IgZG9lcyB0aGUgY2hhbmdlZCBsaWJyYXJ5IGRvIHNvbWV0aGluZyB0aGF0J3Mgb25seSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCwgb3Igc29tZXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZXhjbHVkZWQ/IE5vLCBmcm9tIHRoaXMgYW5hbHlzaXMsIGl0IGlzIGFsbCBgdG9vbHMvYC4gTGliYnBmICp1c2VzKiBzeXNjYWxscywgc3VyZSwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgaXMganVzdCBtb2RpZnlpbmcgdGhlIHVzZXItc3BhY2Ugc2lkZS4gTXkgY29uY2x1c2lvbiBpcyB0aGF0IGV2ZW4gaWYgdGhlIG5ldyBjb2RlIGNvdWxkIGNhdXNlIGtlcm5lbCBpc3N1ZXMsIGl0IHdpbGwgbm90IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsIGZvciBmdXp6aW5nLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHBhdGhzLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gT2theSwgZG91YmxlLWNoZWNrZWQuIE5vdGhpbmcgaXMgb3V0c2lkZSBvZiBgdG9vbHMvYC4gVGhhdCdzIGl0LCB0aGVuLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwYXRjaCBpcyBzb2xlbHkgd2l0aGluIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCByZWxhdGVkIHRlc3RzLiBJdCBkb2Vzbid0IG1vZGlmeSBhbnkga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3l6a2FsbGVyIHdvdWxkIGRpcmVjdGx5IGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE5LCJPdXRwdXRUb2tlbnMiOjczLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MjE6NTIuNTc0MjAxMTIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2VyLXNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIHNlbGZ0ZXN0cyBpbiB0aGUgdG9vbHMvIGRpcmVjdG9yeS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYgdGhhdCBjYW4gYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlci1zcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBzZWxmdGVzdHMgaW4gdGhlIHRvb2xzLyBkaXJlY3RvcnkuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmIHRoYXQgY2FuIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjIxOjUyLjU3NDI1NzM0MloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsgfr[1] Phase: Running StartedAt: 2026-08-26 19:22:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsgfr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-26 19:22:02 +0000 UTC FinishedAt: 2026-08-26 19:22:08 +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,}