Name: series-workflow2dlsv Phase: Failed StartedAt: 2026-09-08 19:53:44 +0000 UTC FinishedAt: 2026-09-08 20:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2dlsv[0] Phase: Succeeded StartedAt: 2026-09-08 19:53:44 +0000 UTC FinishedAt: 2026-09-08 20:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2dlsv[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 19:53:44 +0000 UTC FinishedAt: 2026-09-08 20:13:18 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIEFSTTY0IEtWTSBhbmQgQXJtIENvbmZpZGVudGlhbCBDb21wdXRlIEFyY2hpdGVjdHVyZSAoQ0NBIC8gUmVhbG0gTWFuYWdlbWVudCBFeHRlbnNpb24pIGNvZGUgZXhjbHVzaXZlbHksIGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQgYW5kIHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmOTVkZTk1NGQ0MTNkZjYxZjgzODI3NTg5ZGUwYjJkY2Q1ZWFkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIwOjEyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IDY4NjQ3ZmY0YmRkMjQuLjFhZmUzZGYzYjkyM2UgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0zMjU2LDYgJiM0MzszMjU2LDkgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRuZXN0ZWQ6IFZIRS1iYXNlZCBtb2RlIHdpdGggc3VwcG9ydCBmb3IgbmVzdGVkXG4gXHRcdFx0XHR2aXJ0dWFsaXphdGlvbi4gUmVxdWlyZXMgYXQgbGVhc3QgQVJNdjguNFxuIFx0XHRcdFx0aGFyZHdhcmUgKHdpdGggRkVBVF9OVjIpLlxuJiM0MztcdFx0XHRybW06IFN1cHBvcnQgZm9yIHJ1bm5pbmcgY29uZmlkZW50aWFsIGd1ZXN0cyBpbiBSZWFsbVxuJiM0MztcdFx0XHQgICAgIHdvcmxkIHVzaW5nIFJNTSwgYXMgZGVmaW5lZCBieSBBcm0gQ29uZmlkZW50aWFsXG4mIzQzO1x0XHRcdCAgICAgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSlcbiBcbiBcdFx0XHREZWZhdWx0cyB0byBWSEUvblZIRSBiYXNlZCBvbiBoYXJkd2FyZSBzdXBwb3J0LiBTZXR0aW5nXG4gXHRcdFx0bW9kZSB0byBcJiMzNDtwcm90ZWN0ZWRcJiMzNDsgd2lsbCBkaXNhYmxlIGtleGVjIGFuZCBoaWJlcm5hdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuaW5kZXggYTNjMTkyOGJkZjc0My4uZDM2MGE4YjA1YjhiZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG5AQCAtNzkzLDQgJiM0Mzs3OTMsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9yZXNldF92Y3B1X3BzY2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0dmNwdV9zZXRfcmVnKHZjcHUsIDAsIHJlc2V0X3N0YXRlLVx1MDAzZXIwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgZW51bSByZWFsbV9zdGF0ZSBrdm1fcmVhbG1fc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5yZWFsbS5zdGF0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2V0X3JlYWxtX3N0YXRlKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSByZWFsbV9zdGF0ZSBuZXdfc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLnJlYWxtLnN0YXRlLCBuZXdfc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JlYWxtX2lzX2NyZWF0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV92bV9pc19yZWFsbShrdm0pIFx1MDAyNlx1MDAyNiBrdm1fcmVhbG1fc3RhdGUoa3ZtKSAhPSBSRUFMTV9TVEFURV9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZiAvKiBfX0FSTTY0X0tWTV9FTVVMQVRFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uZmJmZDg1ZGM5OTllZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZnBzaW1kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2FzbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcm1pLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdm5jcl9tYXBwaW5nLmhcdTAwM2VcbiBcbiAjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9JTlRDX0lOSVRJQUxJWkVEXG5AQCAtNjksNiAmIzQzOzcwLDcgQEAgZW51bSBrdm1fbW9kZSB7XG4gXHRLVk1fTU9ERV9ERUZBVUxULFxuIFx0S1ZNX01PREVfUFJPVEVDVEVELFxuIFx0S1ZNX01PREVfTlYsXG4mIzQzO1x0S1ZNX01PREVfUk1NLFxuIFx0S1ZNX01PREVfTk9ORSxcbiB9O1xuICNpZmRlZiBDT05GSUdfS1ZNXG5AQCAtMTUwLDYgJiM0MzsxNTIsMjYgQEAgc3RydWN0IGt2bV92bWlkIHtcbiBcdGF0b21pYzY0X3QgaWQ7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGt2bV92Y3B1X29wcyB7XG4mIzQzO1x0dm9pZCAoKnZjcHVfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiYjNDM7XHR2b2lkICgqdmNwdV9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3ZtX2dmbl9yYW5nZTtcbiYjNDM7c3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjO1xuJiM0MztcbiYjNDM7c3RydWN0IGt2bV92bV9zMl9vcHMge1xuJiM0MztcdGJvb2wgKCp2bV9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4mIzQzO1x0Ym9vbCAoKnZtX3Rlc3RfYWdlX2dmbikoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuJiM0MztcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzKShzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0MztcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiYjNDM7XHRcdFx0XHRcdCAgdTY0IG5yX3BhZ2VzKTtcbiYjNDM7XHR2b2lkICgqdm1fc3RhZ2UyX3VubWFwX3JhbmdlKShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuJiM0MztcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjQgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIG1heV9ibG9jayk7XG4mIzQzO1x0aW50ICgqdm1fbWVtX2Fib3J0KShjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3Qga3ZtX3MyX21tdSB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtaWQgdm1pZDtcbiBcbkBAIC0yNTcsNyAmIzQzOzI3OSw2IEBAIHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHtcbiBcdHBrdm1faGFuZGxlX3QgaGFuZGxlO1xuIFx0c3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgdGVhcmRvd25fbWM7XG4gXHRzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSBzdGFnZTJfdGVhcmRvd25fbWM7XG4tXHRib29sIGlzX3Byb3RlY3RlZDtcbiBcdGJvb2wgaXNfY3JlYXRlZDtcbiBcbiBcdC8qXG5AQCAtMzA2LDkgJiM0MzszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQge1xuIFx0X19OUl9GR1RfR1JPVVBfSURTX19cbiB9O1xuIFxuJiM0MztlbnVtIGt2bV9hcm1fdm1fZmxhdm9yIHtcbiYjNDM7XHRWTV9OVkhFLFxuJiM0MztcdFZNX1ZIRSxcbiYjNDM7XHRWTV9QS1ZNLFx0XHQvKiBOb3JtYWwgZ3Vlc3RzIG9uIFBLVk0gKi9cbiYjNDM7XHRNQVJLRVIoX19WTV9DT05GSURFTlRJQUwpLFxuJiM0MztcdFZNX1BST1RFQ1RFRF9QS1ZNLFx0LyogUHJvdGVjdGVkIFZNICovXG4mIzQzO1x0Vk1fUkVBTE0sXHRcdC8qIENDQSAqL1xuJiM0MztcdFZNX0ZMQVZPUl9NQVgsXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX3MyX21tdSBtbXU7XG4gXG4mIzQzO1x0ZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB2bV9mbGF2b3I7XG4gXHQvKlxuIFx0ICogRmluZS1HcmFpbmVkIFVOREVGLCBtaW1pY2tpbmcgdGhlIEZHVCBsYXlvdXQgZGVmaW5lZCBieSB0aGVcbiBcdCAqIGFyY2hpdGVjdHVyZS4gV2UgdHJhY2sgdGhlbSBnbG9iYWxseSwgYXMgd2UgcHJlc2VudCB0aGVcbkBAIC0zMTgsNiAmIzQzOzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHU2NCBmZ3VbX19OUl9GR1RfR1JPVVBfSURTX19dO1xuIFxuJiM0MztcdGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzICp2bV9zMl9vcHM7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFN0YWdlIDIgcGFnaW5nIHN0YXRlIGZvciBWTXMgd2l0aCBuZXN0ZWQgUzIgdXNpbmcgYSB2aXJ0dWFsXG4gXHQgKiBWTUlELlxuQEAgLTQxNywxMSAmIzQzOzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4gXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbi1cdC8qXG4tXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICYjMzk7cGt2bS5oYW5kbGUmIzM5OyBpcyB1c2VkIHRvIGxvb2t1cFxuLVx0ICogdGhlIGFzc29jaWF0ZWQgcEtWTSBpbnN0YW5jZSBpbiB0aGUgaHlwZXJ2aXNvci5cbi1cdCAqL1xuLVx0c3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAmIzM5O3Brdm0uaGFuZGxlJiMzOTsgaXMgdXNlZCB0byBsb29rdXBcbiYjNDM7XHRcdCAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4mIzQzO1x0XHRzdHJ1Y3QgcmVhbG0gcmVhbG07XG4mIzQzO1x0fTtcbiBcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuIFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cbkBAIC04NDYsNiAmIzQzOzg4Myw3IEBAIHN0cnVjdCB2bmNyX3RsYjtcbiBcbiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0IGN0eHQ7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqdmNwdV9vcHM7XG4gXG4gXHQvKlxuIFx0ICogR3Vlc3QgZmxvYXRpbmcgcG9pbnQgc3RhdGVcbkBAIC0xMzQ2LDcgJiM0MzsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1ib29sIGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2b2lkKTtcbiYjNDM7Ym9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcbiBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE1MDQsOSAmIzQzOzE1NDIsMTMgQEAgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCk7XG4gXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfRkxVU0hfUkVNT1RFX1RMQlNfUkFOR0VcbiBcbi0jZGVmaW5lIGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKVx0KGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoa3ZtKS1cdTAwM2VhcmNoLnBrdm0uaXNfcHJvdGVjdGVkKVxuJiM0MzsjZGVmaW5lIGt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKVx0KChrdm0pLVx1MDAzZWFyY2gudm1fZmxhdm9yIFx1MDAzZT0gX19WTV9DT05GSURFTlRJQUwpXG4mIzQzOyNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pXHQoKGt2bSktXHUwMDNlYXJjaC52bV9mbGF2b3IgPT0gVk1fUFJPVEVDVEVEX1BLVk0pXG4mIzQzOyNkZWZpbmUga3ZtX3ZtX2lzX3JlYWxtKGt2bSlcdFx0KChrdm0pLVx1MDAzZWFyY2gudm1fZmxhdm9yID09IFZNX1JFQUxNKVxuIFxuJiM0MzsjZGVmaW5lIHZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpXHRrdm1fdm1faXNfY29uZmlkZW50aWFsKCh2Y3B1KS1cdTAwM2Vrdm0pXG4gI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KVx0XHRrdm1fdm1faXNfcHJvdGVjdGVkKCh2Y3B1KS1cdTAwM2Vrdm0pXG4mIzQzOyNkZWZpbmUgdmNwdV9pc19yZWModmNwdSlcdFx0a3ZtX3ZtX2lzX3JlYWxtKCh2Y3B1KS1cdTAwM2Vrdm0pXG4gXG4gaW50IGt2bV9hcm1fdmNwdV9maW5hbGl6ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBmZWF0dXJlKTtcbiBib29sIGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbmluZGV4IDQxYTg2ODc5MzhlYjYuLmMyZTRiMjllNjA1ZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuQEAgLTgsOSAmIzQzOzgsMTMgQEBcbiAjZGVmaW5lIF9fQVJNNjRfS1ZNX1BHVEFCTEVfSF9fXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yYnRyZWVfdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuJiM0MztzdHJ1Y3Qga3ZtX3MyX21tdTtcbiYjNDM7XG4gI2RlZmluZSBLVk1fUEdUQUJMRV9GSVJTVF9MRVZFTFx0XHQtMVxuICNkZWZpbmUgS1ZNX1BHVEFCTEVfTEFTVF9MRVZFTFx0XHQzXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oXG5pbmRleCBiZWVhMDBlNjkzYTBhLi41NGE2MThkODg3ZmE0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcbkBAIC03LDkgJiM0Mzs3LDkgQEBcbiAjZGVmaW5lIF9fQVJNNjRfS1ZNX1BLVk1fSF9fXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXJtX2ZmYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2FzbS9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbiBcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBWTXMgdGhhdCBjYW4gY28tZXhpc3QgdW5kZXIgcEtWTS4gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3JtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRmNWM3NWEyN2I1YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcm1pLmhcbkBAIC0wLDAgJiM0MzsxLDYxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyMy0yMDI2IEFSTSBMdGQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX0FTTV9LVk1fUk1JX0hcbiYjNDM7I2RlZmluZSBfX0FTTV9LVk1fUk1JX0hcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHJlYWxtX3N0YXRlIC0gU3RhdGUgb2YgYSBSZWFsbVxuJiM0MzsgKlxuJiM0MzsgKiBNaXJyb3JzIHRoZSBSTU0mIzM5O3MgUmVhbG0gbGlmZWN5Y2xlIHN0YXRlcyB3aGVyZSB0aGV5IGFyZSBtZWFuaW5nZnVsIHRvIEtWTSxcbiYjNDM7ICogd2l0aCBSRUFMTV9TVEFURV9EWUlORyBiZWluZyBhIEtWTS1pbnRlcm5hbCBzdGF0ZSB1c2VkIHRvIHByZXZlbnQgZnVydGhlclxuJiM0MzsgKiByZXF1ZXN0cyB3aGlsZSB0ZWFyZG93biBpcyBpbiBwcm9ncmVzcy4gS1ZNIGRvZXMgbm90IHRyYWNrIFJFQUxNX1NZU1RFTV9PRkZcbiYjNDM7ICogb3IgUkVBTE1fWk9NQklFIHNlcGFyYXRlbHkgYXMgdGhleSBuYXR1cmFsbHkgbGVhZCB0byB0ZWFyZG93bi5cbiYjNDM7ICovXG4mIzQzO2VudW0gcmVhbG1fc3RhdGUge1xuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBSRUFMTV9TVEFURV9OT05FOlxuJiM0MztcdCAqICAgICAgUmVhbG0gaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkLiBybWlfcmVhbG1fY3JlYXRlKCkgaGFzIG5vdFxuJiM0MztcdCAqICAgICAgeWV0IGJlZW4gY2FsbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdFJFQUxNX1NUQVRFX05PTkUsXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQFJFQUxNX1NUQVRFX05FVzpcbiYjNDM7XHQgKiAgICAgIFJlYWxtIGlzIHVuZGVyIGNvbnN0cnVjdGlvbiwgcm1pX3JlYWxtX2NyZWF0ZSgpIGhhcyBiZWVuXG4mIzQzO1x0ICogICAgICBjYWxsZWQsIGJ1dCBpdCBpcyBub3QgeWV0IGFjdGl2YXRlZC4gUGFnZXMgbWF5IGJlIHBvcHVsYXRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9ORVcsXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQFJFQUxNX1NUQVRFX0FDVElWRTpcbiYjNDM7XHQgKiAgICAgIFJlYWxtIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGlzIGVsaWdpYmxlIGZvciBleGVjdXRpb24gd2l0aFxuJiM0MztcdCAqICAgICAgcm1pX3JlY19lbnRlcigpLiBQYWdlcyBtYXkgbm8gbG9uZ2VyIGJlIHBvcHVsYXRlZCB3aXRoXG4mIzQzO1x0ICogICAgICBybWlfZGF0YV9jcmVhdGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9BQ1RJVkUsXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQFJFQUxNX1NUQVRFX0RZSU5HOlxuJiM0MztcdCAqICAgICAgUmVhbG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkIG9yIGhhcyBhbHJlYWR5IGJlZW5cbiYjNDM7XHQgKiAgICAgIGRlc3Ryb3llZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9EWUlORyxcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAUkVBTE1fU1RBVEVfREVBRDpcbiYjNDM7XHQgKiAgICAgIFJlYWxtIGhhcyBiZWVuIGRlc3Ryb3llZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9ERUFEXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJlYWxtIC0gQWRkaXRpb25hbCBwZXIgVk0gZGF0YSBmb3IgYSBSZWFsbVxuJiM0MzsgKlxuJiM0MzsgKiBAc3RhdGU6IFRoZSBsaWZldGltZSBzdGF0ZSBtYWNoaW5lIGZvciB0aGUgcmVhbG1cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByZWFsbSB7XG4mIzQzO1x0ZW51bSByZWFsbV9zdGF0ZSBzdGF0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2luaXRfcm1pKHZvaWQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fQVNNX0tWTV9STUlfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbmluZGV4IGI1NDY3MDNjM2FiOWEuLjkyY2VjNDI5NTJmNDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZpcnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbkBAIC04Nyw2ICYjNDM7ODcsNyBAQCB2b2lkIF9faHlwX3Jlc2V0X3ZlY3RvcnModm9pZCk7XG4gYm9vbCBpc19rdm1fYXJtX2luaXRpYWxpc2VkKHZvaWQpO1xuIFxuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcHJvdGVjdGVkX21vZGVfaW5pdGlhbGl6ZWQpO1xuJiM0MztERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoa3ZtX3JtaV9pc19hdmFpbGFibGUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wa3ZtX2luaXRpYWxpemVkKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbmluZGV4IDU5NjEyZDJmMjc3YzEuLmVkM2NmMzBlYjA2ZTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBDRkxBR1NfaGFuZGxlX2V4aXQubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0XG4ga3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4gXHQgaW5qZWN0X2ZhdWx0Lm8gdmFfbGF5b3V0Lm8gaGFuZGxlX2V4aXQubyBjb25maWcubyBcXFxuIFx0IGd1ZXN0Lm8gZGVidWcubyByZXNldC5vIHN5c19yZWdzLm8gc3RhY2t0cmFjZS5vIFxcXG4tXHQgdmdpYy1zeXMtcmVnLXYzLm8gZnBzaW1kLm8gcGt2bS5vIFxcXG4mIzQzO1x0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBybWkubyBcXFxuIFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggNmFjMzMyMWY0YzU3NS4uM2VkZGY0NGY3YjFkZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG5AQCAtNTYsMTEgJiM0Mzs1NiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fYXJjaF90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpXG4gXHRyZXR1cm4ga3ZtX3ZnaWNfZ2xvYmFsX3N0YXRlLm5vX2h3X2RlYWN0aXZhdGlvbiA/IFZHSUNfSVJRX1NXX1JFU0FNUExFIDogMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9yZWFsbV90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNSV9SRUNfRU5URVIgcmVqZWN0cyBMUnMgd2l0aCB0aGUgSFcgYml0IHNldCwgc28gdXNlIHRoZSBleGlzdGluZ1xuJiM0MztcdCAqIHNvZnR3YXJlIHJlc2FtcGxpbmcgbWVjaGFuaXNtIGZvciBSZWFsbSB0aW1lciBpbnRlcnJ1cHRzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBWR0lDX0lSUV9TV19SRVNBTVBMRTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9vcHMgYXJjaF90aW1lcl9pcnFfb3BzID0ge1xuIFx0LmdldF9mbGFnc1x0ID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lycV9mbGFncyxcbiBcdC5nZXRfaW5wdXRfbGV2ZWwgPSBrdm1fYXJjaF90aW1lcl9nZXRfaW5wdXRfbGV2ZWwsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIHJlYWxtX3RpbWVyX2lycV9vcHMgPSB7XG4mIzQzO1x0LmdldF9mbGFnc1x0ID0ga3ZtX3JlYWxtX3RpbWVyX2dldF9pcnFfZmxhZ3MsXG4mIzQzO1x0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0ge1xuIFx0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiBcdC5xdWV1ZV9pcnFfdW5sb2NrID0gdmdpY192NV9wcGlfcXVldWVfaXJxX3VubG9jayxcbkBAIC0xMDc5LDcgJiM0MzsxMDkzLDcgQEAgc3RhdGljIHZvaWQgdGltZXJfY29udGV4dF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRpbWVyaWQpXG4gXG4gXHRjdHh0LVx1MDAzZXRpbWVyX2lkID0gdGltZXJpZDtcbiBcbi1cdGlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRpZiAoIXZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpKSB7XG4gXHRcdGlmICh0aW1lcmlkID09IFRJTUVSX1ZUSU1FUilcbiBcdFx0XHRjdHh0LVx1MDAzZW9mZnNldC52bV9vZmZzZXQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50aW1lcl9kYXRhLnZvZmZzZXQ7XG4gXHRcdGVsc2VcbkBAIC0xMTEwLDcgJiM0MzsxMTI0LDcgQEAgdm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dGltZXJfY29udGV4dF9pbml0KHZjcHUsIGkpO1xuIFxuIFx0LyogU3luY2hyb25pemUgb2Zmc2V0cyBhY3Jvc3MgdGltZXJzIG9mIGEgVk0gaWYgbm90IGFscmVhZHkgcHJvdmlkZWQgKi9cbi1cdGlmICghdmNwdV9pc19wcm90ZWN0ZWQodmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19WTV9DT1VOVEVSX09GRlNFVCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5mbGFncykpIHtcbiBcdFx0dGltZXJfc2V0X29mZnNldCh2Y3B1X3Z0aW1lcih2Y3B1KSwga3ZtX3BoeXNfdGltZXJfcmVhZCgpKTtcbiBcdFx0dGltZXJfc2V0X29mZnNldCh2Y3B1X3B0aW1lcih2Y3B1KSwgMCk7XG5AQCAtMTYwOSw4ICYjNDM7MTYyMywxMiBAQCBpbnQga3ZtX3RpbWVyX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRnZXRfdGltZXJfbWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4gXG4tXHRvcHMgPSB2Z2ljX2lzX3Y1KHZjcHUtXHUwMDNla3ZtKSA/IFx1MDAyNmFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1IDpcbi1cdFx0XHRcdCAgICAgIFx1MDAyNmFyY2hfdGltZXJfaXJxX29wcztcbiYjNDM7XHRpZiAodmNwdV9pc19yZWModmNwdSkpXG4mIzQzO1x0XHRvcHMgPSBcdTAwMjZyZWFsbV90aW1lcl9pcnFfb3BzO1xuJiM0MztcdGVsc2UgaWYgKHZnaWNfaXNfdjUodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0b3BzID0gXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzX3ZnaWNfdjU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0b3BzID0gXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX3RpbWVycyh2Y3B1KTsgaSYjNDM7JiM0MzspXG4gXHRcdGt2bV92Z2ljX3NldF9pcnFfb3BzKHZjcHUsIHRpbWVyX2lycSh2Y3B1X2dldF90aW1lcih2Y3B1LCBpKSksIG9wcyk7XG5AQCAtMTczNiw3ICYjNDM7MTc1NCw3IEBAIGludCBrdm1fdm1faW9jdGxfc2V0X2NvdW50ZXJfb2Zmc2V0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChvZmZzZXQtXHUwMDNlcmVzZXJ2ZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSlcbiYjNDM7XHRpZiAoa3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDhiMDgwODA0YmM5MGIuLjNmZTVhNGY3NzczOGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC00Miw2ICYjNDM7NDIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmVzdGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3Brdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcHRyYXV0aC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcm1pLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlL252aGUuaFx1MDAzZVxuIFxuQEAgLTc0LDYgJiM0Mzs3NSw4IEBAIHN0cnVjdCBrdm1faW9jdGxfY2FwX21hcCB7XG4gXHRsb25nIGV4dDtcbiB9O1xuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqYXJtNjRfdmNwdV9vcHNbVk1fRkxBVk9SX01BWF07XG4mIzQzO1xuIC8qIE1ha2UgS1ZNX0NBUF9OUl9WQ1BVUyB0aGUgcmVmZXJlbmNlIGZvciBmZWF0dXJlcyB3ZSBhbHdheXMgc3VwcG9ydGVkICovXG4gI2RlZmluZSBLVk1fQ0FQX0FSTV9CQVNJQ1x0S1ZNX0NBUF9OUl9WQ1BVU1xuIFxuQEAgLTExMSw2ICYjNDM7MTE0LDggQEAgbG9uZyBrdm1fZ2V0X2NhcF9mb3Jfa3ZtX2lvY3RsKHVuc2lnbmVkIGludCBpb2N0bCwgbG9uZyAqZXh0KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztERUZJTkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7XG4mIzQzO1xuIERFQ0xBUkVfS1ZNX0hZUF9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGt2bV9oeXBfdmVjdG9yKTtcbiBcbiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1fYXJtX2h5cF9zdGFja19iYXNlKTtcbkBAIC0xMzIsNiAmIzQzOzEzNywyNSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3ZjcHVfZXhpdGluZ19ndWVzdF9tb2RlKHZjcHUpID09IElOX0dVRVNUX01PREU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBrdm1fcmVhbG1fZXh0X2FsbG93ZWQobG9uZyBleHQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGV4dCkge1xuJiM0MztcdGNhc2UgS1ZNX0NBUF9JUlFDSElQOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9BUk1fUFNDSTpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0lfMF8yOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfTUFYX1ZDUFVTOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9NQVhfVkNQVV9JRDpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfTVNJX0RFVklEOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9BUk1fVk1fSVBBX1NJWkU6XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0FERFJFU1M6XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0dFTkVSSUM6XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX1NZTkNfTU1VOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiB7XG5AQCAtMTQzLDYgJiM0MzsxNjcsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAha3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBjYXAtXHUwMDNlY2FwKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXHUwMDI2XHUwMDI2ICFrdm1fcmVhbG1fZXh0X2FsbG93ZWQoY2FwLVx1MDAzZWNhcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRzd2l0Y2ggKGNhcC1cdTAwM2VjYXApIHtcbiBcdGNhc2UgS1ZNX0NBUF9BUk1fTklTVl9UT19VU0VSOlxuIFx0XHRyID0gMDtcbkBAIC0yMTQsNiAmIzQzOzI0MSwyNiBAQCBzdGF0aWMgaW50IGt2bV9hcm1fZGVmYXVsdF9tYXhfdmNwdXModm9pZClcbiBcdHJldHVybiB2Z2ljX3ByZXNlbnQgPyBrdm1fdmdpY19nZXRfbWF4X3ZjcHVzKCkgOiBLVk1fTUFYX1ZDUFVTO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1faW5pdF92bV9mbGF2b3Ioc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRib29sIHByb3RlY3RlZCA9IHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQ7XG4mIzQzO1xuJiM0MztcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkge1xuJiM0MztcdFx0aWYgKHByb3RlY3RlZClcbiYjNDM7XHRcdFx0a3ZtLVx1MDAzZWFyY2gudm1fZmxhdm9yID0gVk1fUFJPVEVDVEVEX1BLVk07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1BLVk07XG4mIzQzO1x0fSBlbHNlIGlmIChwcm90ZWN0ZWQpIHtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH0gZWxzZSBpZiAoaGFzX3ZoZSgpKSB7XG4mIzQzO1x0XHRrdm0tXHUwMDNlYXJjaC52bV9mbGF2b3IgPSBWTV9WSEU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBrdm1fYXJjaF9pbml0X3ZtIC0gaW5pdGlhbGl6ZXMgYSBWTSBkYXRhIHN0cnVjdHVyZVxuICAqIEBrdm06XHRwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0XG5AQCAtMjM2LDYgJiM0MzsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuICNlbmRpZlxuIFxuJiM0MztcdHJldCA9IGt2bV9pbml0X3ZtX2ZsYXZvcihrdm0sIHR5cGUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGt2bV9pbml0X25lc3RlZChrdm0pO1xuIFxuIFx0cmV0ID0ga3ZtX3NoYXJlX2h5cChrdm0sIGt2bSAmIzQzOyAxKTtcbkBAIC0yNjAsOSAmIzQzOzMxMSw2IEBAIGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuIFx0XHRyZXQgPSBwa3ZtX2luaXRfaG9zdF92bShrdm0sIHR5cGUpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3VuaW5pdF9tbXU7XG4tXHR9IGVsc2UgaWYgKHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQpIHtcbi1cdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfdW5pbml0X21tdTtcbiBcdH1cbiBcbiBcdGt2bV92Z2ljX2Vhcmx5X2luaXQoa3ZtKTtcbkBAIC0zODEsNiAmIzQzOzQyOSw5IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIGV4dCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlmIChrdm0gXHUwMDI2XHUwMDI2IGt2bV92bV9pc19yZWFsbShrdm0pIFx1MDAyNlx1MDAyNiAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRzd2l0Y2ggKGV4dCkge1xuIFx0Y2FzZSBLVk1fQ0FQX0lSUUNISVA6XG4gXHRcdHIgPSB2Z2ljX3ByZXNlbnQ7XG5AQCAtNDQ3LDcgJiM0Mzs0OTgsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRyID0gc3lzdGVtX3N1cHBvcnRzX210ZSgpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9TVEVBTF9USU1FOlxuLVx0XHRyID0ga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCk7XG4mIzQzO1x0XHRyID0ga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDFfMzJCSVQ6XG4gXHRcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpO1xuQEAgLTU0OCw2ICYjNDM7NTk5LDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbiAjZW5kaWZcbiBcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMgPSBhcm02NF92Y3B1X29wc1t2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvcl07XG4mIzQzO1xuIFx0LyogRm9yY2UgdXNlcnMgdG8gY2FsbCBLVk1fQVJNX1ZDUFVfSU5JVCAqL1xuIFx0dmNwdV9jbGVhcl9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuIFxuQEAgLTY2MiwxNCAmIzQzOzcxNSwxMSBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBzaW5nbGVfdGFza19ydW5uaW5nKCk7XG4gfVxuIFxuLXZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiYjNDM7c3RhdGljIHZvaWQgdmNwdV9wcmVwYXJlX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV9zMl9tbXUgKm1tdTtcbiBcdGludCAqbGFzdF9yYW47XG4gXG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4tXHRcdGdvdG8gbm9tbXU7XG4tXG4gXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4gXHRcdGt2bV92Y3B1X2xvYWRfaHdfbW11KHZjcHUpO1xuIFxuQEAgLTY5OSwxMCAmIzQzOzc0OSwzMCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdGt2bV9jYWxsX2h5cChfX2t2bV9mbHVzaF9jcHVfY29udGV4dCwgbW11KTtcbiBcdFx0Kmxhc3RfcmFuID0gdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiBcdH1cbiYjNDM7fVxuIFxuLW5vbW11OlxuLVx0dmNwdS1cdTAwM2VjcHUgPSBjcHU7XG4mIzQzO3N0YXRpYyB2b2lkIHZjcHVfc2V0X3dmeF90cmFwcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZSh2Y3B1KSlcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIFx1MDAyNj0gfkhDUl9UV0U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWFyY2guaGNyX2VsMiBcdTAwMjY9IH5IQ1JfVFdJO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZjcHVfbG9hZF9wdnRpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZoZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0dmNwdV9wcmVwYXJlX21tdSh2Y3B1KTtcbiBcdC8qXG4gXHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcbiBcdCAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuXG5AQCAtNzExLDMyICYjNDM7NzgxLDY4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdGt2bV92Z2ljX2xvYWQodmNwdSk7XG4gXHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xuIFx0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XG4tXHRpZiAoaGFzX3ZoZSgpKVxuLVx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuLVx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbi1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG4gXG4tXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZSh2Y3B1KSlcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgXHUwMDI2PSB+SENSX1RXRTtcbi1cdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcbiYjNDM7XHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuJiM0MztcdHZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTtcbiYjNDM7XHR2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIFx1MDAyNj0gfkhDUl9UV0k7XG4tXHRlbHNlXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7XG4mIzQzO3N0YXRpYyB2b2lkIG52aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHZjcHVfcHJlcGFyZV9tbXUodmNwdSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcbiYjNDM7XHQgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7XG4mIzQzO1x0a3ZtX3ZnaWNfbG9hZCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X2xvYWRfZmd0KHZjcHUpO1xuJiM0MztcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTtcbiBcbiYjNDM7XHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuJiM0MztcdHZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTtcbiBcdHZjcHVfc2V0X3BhdXRoX3RyYXBzKHZjcHUpO1xuJiM0Mzt9XG4gXG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcbi1cdFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfbG9hZCxcbi1cdFx0XHRcdCAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSxcbi1cdFx0XHRcdCAgdmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIpO1xuLVx0XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3Jlc3RvcmVfdm1jcl9hcHJzLFxuLVx0XHRcdCAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuLVx0fVxuJiM0MztzdGF0aWMgdm9pZCBwa3ZtX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxuJiM0MztcdCAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X2xvYWRfZGVidWcodmNwdSk7XG4mIzQzO1x0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XG4mIzQzO1x0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuJiM0MztcdHZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfbG9hZCxcbiYjNDM7XHRcdFx0ICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlLFxuJiM0MztcdFx0XHQgIHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyKTtcbiYjNDM7XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3Jlc3RvcmVfdm1jcl9hcHJzLFxuJiM0MztcdFx0ICAgICBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlYWxtX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdGltZXJfdmNwdV9sb2FkKHZjcHUpO1xuJiM0MztcdGt2bV92Z2ljX2xvYWQodmNwdSk7XG4mIzQzO1x0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHR2Y3B1LVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMtXHUwMDNldmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzKSlcbiBcdFx0dmNwdV9zZXRfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuQEAgLTc0NCwyOCAmIzQzOzg1MCw1MCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHR2Y3B1LVx1MDAzZWFyY2gucGlkID0gcGlkX25yKHZjcHUtXHUwMDNlcGlkKTtcbiB9XG4gXG4tdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIHZoZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKSB7XG4tXHRcdGt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfc2F2ZV9hcHJzLCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XG4tXG4tXHRcdC8qIF9fcGt2bV92Y3B1X3B1dCBpbXBsaWVzIGEgc3luYyBvZiB0aGUgc3RhdGUgKi9cbi1cdFx0aWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXHUwMDNla3ZtKSlcbi1cdFx0XHR2Y3B1X3NldF9mbGFnKHZjcHUsIFBLVk1fSE9TVF9TVEFURV9ESVJUWSk7XG4tXHR9XG4tXG4gXHRrdm1fdmNwdV9wdXRfZGVidWcodmNwdSk7XG4gXHRrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTtcbi1cdGlmIChoYXNfdmhlKCkpXG4tXHRcdGt2bV92Y3B1X3B1dF92aGUodmNwdSk7XG4mIzQzO1x0a3ZtX3ZjcHVfcHV0X3ZoZSh2Y3B1KTtcbiBcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcbiBcdGt2bV92Z2ljX3B1dCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7XG4gXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4gXHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4mIzQzO31cbiBcbiYjNDM7c3RhdGljIHZvaWQgbnZoZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdmNwdV9wdXRfZGVidWcodmNwdSk7XG4mIzQzO1x0a3ZtX2FyY2hfdmNwdV9wdXRfZnAodmNwdSk7XG4mIzQzO1x0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xuJiM0MztcdGt2bV92Z2ljX3B1dCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHZjcHUpO1xuJiM0MztcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuJiM0MztcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XG4mIzQzO1xuJiM0MztcdC8qIF9fcGt2bV92Y3B1X3B1dCBpbXBsaWVzIGEgc3luYyBvZiB0aGUgc3RhdGUgKi9cbiYjNDM7XHRpZiAoIWt2bV92bV9pc19wcm90ZWN0ZWQodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpO1xuJiM0MztcbiYjNDM7XHRudmhlX3ZjcHVfcHV0KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFsbV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdGltZXJfdmNwdV9wdXQodmNwdSk7XG4mIzQzO1x0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC52Y3B1X29wcy1cdTAwM2V2Y3B1X3B1dCh2Y3B1KTtcbiBcdHZjcHVfY2xlYXJfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuIFx0dmNwdS1cdTAwM2VjcHUgPSAtMTtcbiB9XG5AQCAtMTg1Miw2ICYjNDM7MTk4MCwxOCBAQCBzdGF0aWMgaW50IGt2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiBfX2t2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHZjcHUsIGV2ZW50cyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZWFsbSBWQ1BVcyBjYW4gYmUgZmluYWxpemVkIGFmdGVyIHRoZSBSZWFsbSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQuXG4mIzQzOyAqIEFsbG93IHRoZSByZWdpc3RlciBsaXN0IGZvciBSRUNzIGJlZm9yZSB0aGUgVkNQVXMgYXJlIGZpbmFsaXplZCwgYnV0XG4mIzQzOyAqIGFmdGVyIHRoZSBTVkUgaXMgZmluYWxpemVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wga3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gdmNwdV9pc19yZWModmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC0xOTA3LDcgJiM0MzsyMDQ3LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRyID0gLUVQRVJNO1xuLVx0XHRpZiAoIWt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQodmNwdSkpXG4mIzQzO1x0XHRpZiAoIWt2bV9hcm1fdmNwdV9yZWdfbGlzdF9hbGxvd2VkKHZjcHUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRyID0gLUVGQVVMVDtcbkBAIC0yMTA1LDYgJiM0MzsyMjQ1LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHZoZV92Y3B1X29wcyA9IHtcbiYjNDM7XHQudmNwdV9sb2FkID0gdmhlX3ZjcHVfbG9hZCxcbiYjNDM7XHQudmNwdV9wdXQgPSB2aGVfdmNwdV9wdXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyBudmhlX3ZjcHVfb3BzID0ge1xuJiM0MztcdC52Y3B1X2xvYWQgPSBudmhlX3ZjcHVfbG9hZCxcbiYjNDM7XHQudmNwdV9wdXQgPSBudmhlX3ZjcHVfcHV0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgcGt2bV92Y3B1X29wcyA9IHtcbiYjNDM7XHQudmNwdV9sb2FkID0gcGt2bV92Y3B1X2xvYWQsXG4mIzQzO1x0LnZjcHVfcHV0ID0gcGt2bV92Y3B1X3B1dCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHJlYWxtX3ZjcHVfb3BzID0ge1xuJiM0MztcdC52Y3B1X2xvYWQgPSByZWFsbV92Y3B1X2xvYWQsXG4mIzQzO1x0LnZjcHVfcHV0ID0gcmVhbG1fdmNwdV9wdXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqYXJtNjRfdmNwdV9vcHNbXSA9IHtcbiYjNDM7XHRbVk1fVkhFXSA9IFx1MDAyNnZoZV92Y3B1X29wcyxcbiYjNDM7XHRbVk1fTlZIRV0gPSBcdTAwMjZudmhlX3ZjcHVfb3BzLFxuJiM0MztcdFtWTV9QS1ZNXSA9IFx1MDAyNnBrdm1fdmNwdV9vcHMsXG4mIzQzO1x0W1ZNX1BST1RFQ1RFRF9QS1ZNXSA9IFx1MDAyNnBrdm1fdmNwdV9vcHMsXG4mIzQzO1x0W1ZNX1JFQUxNXSA9IFx1MDAyNnJlYWxtX3ZjcHVfb3BzLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBudmhlX3BlcmNwdV9zaXplKHZvaWQpXG4ge1xuIFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUNIT09TRV9OVkhFX1NZTShfX3Blcl9jcHVfZW5kKSAtXG5AQCAtMzA1MCw2ICYjNDM7MzIxOCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGt2bV9hcm1faW5pdCh2b2lkKVxuIFxuIFx0aW5faHlwX21vZGUgPSBpc19rZXJuZWxfaW5faHlwX21vZGUoKTtcbiBcbiYjNDM7XHRrdm1faW5pdF9ybWkoKTtcbiYjNDM7XG4gXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUpIHx8XG4gXHQgICAgY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9XT1JLQVJPVU5EXzE1MDg0MTIpKVxuIFx0XHRrdm1faW5mbyhcJiMzNDtHdWVzdHMgd2l0aG91dCByZXF1aXJlZCBDUFUgZXJyYXR1bSB3b3JrYXJvdW5kcyBjYW4gZGVhZGxvY2sgc3lzdGVtIVxcblwmIzM0OyBcXFxuQEAgLTMxNTUsNiAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfa3ZtX21vZGVfY2ZnKGNoYXIgKmFyZylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHN0cmNtcChhcmcsIFwmIzM0O3JtbVwmIzM0OykgPT0gMCBcdTAwMjZcdTAwMjYgIVdBUk5fT04oIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKSkge1xuJiM0MztcdFx0a3ZtX21vZGUgPSBLVk1fTU9ERV9STU07XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIGVhcmx5X3BhcmFtKFwmIzM0O2t2bS1hcm0ubW9kZVwmIzM0OywgZWFybHlfa3ZtX21vZGVfY2ZnKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ndWVzdC5jIGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xuaW5kZXggYjAxZDY2MjJiODcyMC4uNmJlYzczZDFlZTA1MCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmNcbkBAIC01OTgsOCAmIzQzOzU5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fc3ZlX3JlZ3MoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2Y3B1X2hhc19zdmUodmNwdSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogUG9saWNlZCBieSBLVk1fR0VUX1JFR19MSVNUOiAqL1xuLVx0V0FSTl9PTigha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpO1xuJiM0MztcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXG4mIzQzO1xuJiM0MztcdGlmIChrdm1fdm1faXNfcmVhbG0odmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqL1xuIFxuIFx0cmV0dXJuIHNsaWNlcyAqIChTVkVfTlVNX1BSRUdTICYjNDM7IFNWRV9OVU1fWlJFR1MgJiM0MzsgMSAvKiBGRlIgKi8pXG4gXHRcdCYjNDM7IDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqL1xuQEAgLTYxNiw5ICYjNDM7NjE5LDYgQEAgc3RhdGljIGludCBjb3B5X3N2ZV9yZWdfaW5kaWNlcyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAoIXZjcHVfaGFzX3N2ZSh2Y3B1KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBQb2xpY2VkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6ICovXG4tXHRXQVJOX09OKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSk7XG4tXG4gXHQvKlxuIFx0ICogRW51bWVyYXRlIHRoaXMgZmlyc3QsIHNvIHRoYXQgdXNlcnNwYWNlIGNhbiBzYXZlL3Jlc3RvcmUgaW5cbiBcdCAqIHRoZSBvcmRlciByZXBvcnRlZCBieSBLVk1fR0VUX1JFR19MSVNUOlxuQEAgLTYyOCw2ICYjNDM7NjI4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdCYjNDM7JiM0MztudW1fcmVncztcbiBcbiYjNDM7XHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKVxuJiM0MztcdFx0cmV0dXJuIG51bV9yZWdzO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiBudW1fcmVncztcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzbGljZXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGZvciAobiA9IDA7IG4gXHUwMDNjIFNWRV9OVU1fWlJFR1M7IG4mIzQzOyYjNDM7KSB7XG4gXHRcdFx0cmVnID0gS1ZNX1JFR19BUk02NF9TVkVfWlJFRyhuLCBpKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbmluZGV4IDQ1OWJkOWViN2U0YmMuLjA5OTYxYzAwNTZmMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uY1xuQEAgLTQzMiw3ICYjNDM7NDMyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wa3ZtX2h5cF92bShzdHJ1Y3Qga3ZtICpob3N0X2t2bSwgc3RydWN0IHBrdm1faHlwX3ZtICpoeXBfdm0sXG4gXG4gXHRoeXBfdm0tXHUwMDNlaG9zdF9rdm0gPSBob3N0X2t2bTtcbiBcdGh5cF92bS1cdTAwM2Vrdm0uY3JlYXRlZF92Y3B1cyA9IG5yX3ZjcHVzO1xuLVx0aHlwX3ZtLVx1MDAzZWt2bS5hcmNoLnBrdm0uaXNfcHJvdGVjdGVkID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLVx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQpO1xuJiM0MztcdGh5cF92bS1cdTAwM2Vrdm0uYXJjaC52bV9mbGF2b3IgPSBSRUFEX09OQ0UoaG9zdF9rdm0tXHUwMDNlYXJjaC52bV9mbGF2b3IpO1xuIFx0aHlwX3ZtLVx1MDAzZWt2bS5hcmNoLmZsYWdzID0gMDtcbiBcdHBrdm1faW5pdF9mZWF0dXJlc19mcm9tX2hvc3QoaHlwX3ZtLCBob3N0X2t2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbmluZGV4IGI3NGRkNWNlMWVmZDMuLmY0ODI1M2I5ZDg4YjUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhZ2UyX3BndGFibGUuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuY1xuaW5kZXggYjExYjg4MjFjOWZiYy4uMmIxZTZmZGViNGQ1YyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXG5AQCAtNDE0LDE0ICYjNDM7NDE0LDE0IEBAIHZvaWQga3ZtX2FybV90ZWFyZG93bl9oeXBlcmNhbGxzKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBpbnQga3ZtX2FybV9nZXRfZndfbnVtX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBBUlJBWV9TSVpFKGt2bV9hcm1fZndfcmVnX2lkcyk7XG4mIzQzO1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTtcbiB9XG4gXG4gaW50IGt2bV9hcm1fY29weV9md19yZWdfaW5kaWNlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAocHV0X3VzZXIoa3ZtX2FybV9md19yZWdfaWRzW2ldLCB1aW5kaWNlcyYjNDM7JiM0MzspKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcbmluZGV4IGQ2YzRmYzE2Zjg3OTUuLmQ2MWEzZmYwNGZhYmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcbkBAIC0zMTcsNiAmIzQzOzMxNyw3IEBAIHZvaWQga3ZtX2luamVjdF9zaXplX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgKi9cbiB2b2lkIGt2bV9pbmplY3RfdW5kZWZpbmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4mIzQzO1x0S1ZNX0JVRyh2Y3B1X2lzX3JlYyh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0sIFwmIzM0O1VuZXhwZWN0ZWQgdW5kZWZpbmVkIGV4Y2VwdGlvbiBpbmplY3Rpb24gdG8gUkVDXCYjMzQ7KTtcbiBcdGlmICh2Y3B1X2VsMV9pc18zMmJpdCh2Y3B1KSlcbiBcdFx0aW5qZWN0X3VuZGVmMzIodmNwdSk7XG4gXHRlbHNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW1pby5jIGIvYXJjaC9hcm02NC9rdm0vbW1pby5jXG5pbmRleCBkMWMzYTM1MmQ1YTIyLi5iYmNmNTJmMDFlOTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbWlvLmNcbkBAIC0xNjgsMTQgJiM0MzsxNjgsMTQgQEAgaW50IGlvX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGZhdWx0X2lwYSlcbiBcdCAqIE5vIHZhbGlkIHN5bmRyb21lPyBBc2sgdXNlcnNwYWNlIGZvciBoZWxwIGlmIGl0IGhhc1xuIFx0ICogdm9sdW50ZWVyZWQgdG8gZG8gc28sIGFuZCBiYWlsIG91dCBvdGhlcndpc2UuXG4gXHQgKlxuLVx0ICogSW4gdGhlIHByb3RlY3RlZCBWTSBjYXNlLCB0aGVyZSBpc24mIzM5O3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvXG4mIzQzO1x0ICogSW4gdGhlIHByb3RlY3RlZC9SZWFsbSBWTSBjYXNlLCB0aGVyZSBpc24mIzM5O3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvXG4gXHQgKiB0aG91Z2gsIHNvIGRpcmVjdGx5IGRlbGl2ZXIgYW4gZXhjZXB0aW9uIHRvIHRoZSBndWVzdC5cbiBcdCAqL1xuIFx0aWYgKCFrdm1fdmNwdV9kYWJ0X2lzdmFsaWQodmNwdSkpIHtcbiBcdFx0dHJhY2Vfa3ZtX21taW9fbmlzdigqdmNwdV9wYyh2Y3B1KSwgZXNyLFxuIFx0XHRcdFx0ICAgIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpLCBmYXVsdF9pcGEpO1xuIFxuLVx0XHRpZiAodmNwdV9pc19wcm90ZWN0ZWQodmNwdSkpXG4mIzQzO1x0XHRpZiAodmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkpXG4gXHRcdFx0cmV0dXJuIGt2bV9pbmplY3Rfc2VhX2RhYnQodmNwdSwga3ZtX3ZjcHVfZ2V0X2hmYXIodmNwdSkpO1xuIFxuIFx0XHRpZiAodGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19SRVRVUk5fTklTVl9JT19BQk9SVF9UT19VU0VSLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDliYTg2NDUwZmU0YWYuLjVlN2NkYmUzMTBmYzggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0zNyw2ICYjNDM7MzcsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGlvX21hcF9iYXNlO1xuIFxuICNkZWZpbmUgS1ZNX1BHVF9GTihmbilcdFx0KCFpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSA/IGZuIDogcCAjIyBmbilcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIHByb3RlY3RlZF9wa3ZtX3MyX29wcztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIHVucHJvdGVjdGVkX3Brdm1fczJfb3BzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMga3ZtX2RlZmF1bHRfdm1fczJfb3BzO1xuJiM0MztcbiBzdGF0aWMgcGh5c19hZGRyX3QgX19zdGFnZTJfcmFuZ2VfYWRkcl9lbmQocGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kLFxuIFx0XHRcdFx0XHQgICBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbkBAIC0xNjYsNiAmIzQzOzE3MCwxOCBAQCBzdGF0aWMgYm9vbCBtZW1zbG90X2lzX2xvZ2dpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiBcdHJldHVybiBtZW1zbG90LVx1MDAzZWRpcnR5X2JpdG1hcCBcdTAwMjZcdTAwMjYgIShtZW1zbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGt2bV9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX2NhbGxfaHlwKF9fa3ZtX3RsYl9mbHVzaF92bWlkLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5tbXUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzKCkgLSBmbHVzaCBhbGwgVk0gVExCIGVudHJpZXMgZm9yIHY3LzhcbiAgKiBAa3ZtOlx0cG9pbnRlciB0byBrdm0gc3RydWN0dXJlLlxuQEAgLTE3NCwyNiAmIzQzOzE5MCwzNiBAQCBzdGF0aWMgYm9vbCBtZW1zbG90X2lzX2xvZ2dpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiAgKi9cbiBpbnQga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbi1cdFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3RsYl9mbHVzaF92bWlkLCBrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSk7XG4tXHRlbHNlXG4tXHRcdGt2bV9jYWxsX2h5cChfX2t2bV90bGJfZmx1c2hfdm1pZCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KTtcbi1cdHJldHVybiAwO1xuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xuIH1cbiBcbi1pbnQga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuLVx0XHRcdFx0ICAgICAgZ2ZuX3QgZ2ZuLCB1NjQgbnJfcGFnZXMpXG4mIzQzO3N0YXRpYyBpbnQgcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCBnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcbiB7XG4gXHR1NjQgc2l6ZSA9IG5yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFx0dTY0IGFkZHIgPSBnZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUpO1xuLVx0ZWxzZVxuLVx0XHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCBhZGRyLCBzaXplKTtcbiYjNDM7XHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCBhZGRyLCBzaXplKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHQgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGdmbiwgbnJfcGFnZXMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkICpzdGFnZTJfbWVtY2FjaGVfemFsbG9jX3BhZ2Uodm9pZCAqYXJnKVxuIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqbWMgPSBhcmc7XG5AQCAtMzM3LDEzICYjNDM7MzYzLDIwIEBAIHN0YXRpYyB2b2lkIF9fdW5tYXBfc3RhZ2UyX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjRcbiBcdFx0XHRcdCAgIG1heV9ibG9jaykpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3ZtX3N0YWdlMl91bm1hcF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuJiM0MztcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaylcbiYjNDM7e1xuJiM0MztcdF9fdW5tYXBfc3RhZ2UyX3JhbmdlKG1tdSwgc3RhcnQsIHNpemUsIG1heV9ibG9jayk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LFxuIFx0XHRcdCAgICB1NjQgc2l6ZSwgYm9vbCBtYXlfYmxvY2spXG4ge1xuLVx0aWYgKGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtX3MyX21tdV90b19rdm0obW11KSkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fczJfbW11X3RvX2t2bShtbXUpO1xuIFxuLVx0X191bm1hcF9zdGFnZTJfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3N0YWdlMl91bm1hcF9yYW5nZSlcbiYjNDM7XHRcdGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9zdGFnZTJfdW5tYXBfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcbiB9XG4gXG4gdm9pZCBrdm1fc3RhZ2UyX2ZsdXNoX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZClcbkBAIC05NjMsNiAmIzQzOzk5NiwxOCBAQCBzdGF0aWMgdm9pZCBrdm1fc3RhZ2UyX2Rlc3Ryb3koc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QpXG4gXHRLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl9kZXN0cm95X3BnZCkocGd0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyAqYXJtNjRfdm1fczJfb3BzW1ZNX0ZMQVZPUl9NQVhdID0ge1xuJiM0MztcdFtWTV9WSEVdID0gXHUwMDI2a3ZtX2RlZmF1bHRfdm1fczJfb3BzLFxuJiM0MztcdFtWTV9OVkhFXSA9IFx1MDAyNmt2bV9kZWZhdWx0X3ZtX3MyX29wcyxcbiYjNDM7XHRbVk1fUEtWTV0gPSBcdTAwMjZ1bnByb3RlY3RlZF9wa3ZtX3MyX29wcyxcbiYjNDM7XHRbVk1fUFJPVEVDVEVEX1BLVk1dID0gXHUwMDI2cHJvdGVjdGVkX3Brdm1fczJfb3BzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3ZtX2luaXRfdm1fczJfb3BzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzID0gYXJtNjRfdm1fczJfb3BzW2t2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvcl07XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICoga3ZtX2luaXRfc3RhZ2UyX21tdSAtIEluaXRpYWxpc2UgYSBTMiBNTVUgc3RydWN0dXJlXG4gICogQGt2bTpcdFRoZSBwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0dXJlXG5AQCAtOTgzLDYgJiM0MzsxMDI4LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcbiBcdGludCBjcHUsIGVycjtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0O1xuIFxuJiM0MztcdC8qIEluaXRpYWxpemUgdGhlIFZNIG9wcyBmb3IgdGhlIFZNIGluc3RhbmNlIGZvciB0aGUgZmlyc3QgdGltZSAqL1xuJiM0MztcdGlmIChtbXUgPT0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KVxuJiM0MztcdFx0a3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7XG4gXHQvKlxuIFx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIG91ciBwYWdlIHRhYmxlcyBpbiBwbGFjZSwgYW5kIHRoYXQgdGhlXG4gXHQgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsXG5AQCAtMTcwNSw3ICYjNDM7MTc1Myw3IEBAIHN0cnVjdCBrdm1fczJfZmF1bHRfdm1hX2luZm8ge1xuIFx0Ym9vbFx0XHRtYXBfbm9uX2NhY2hlYWJsZTtcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGt2bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuJiM0MztzdGF0aWMgaW50IHByb3RlY3RlZF92bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIHtcbiBcdHVuc2lnbmVkIGludCBmbGFncyA9IEZPTExfSFdQT0lTT04gfCBGT0xMX0xPTkdURVJNIHwgRk9MTF9XUklURTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHMyZmQtXHUwMDNldmNwdTtcbkBAIC0yMTQzLDYgJiM0MzsyMTkxLDIyIEBAIHN0YXRpYyBpbnQgdXNlcl9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0cmV0dXJuIGt2bV9zMl9mYXVsdF9tYXAoczJmZCwgXHUwMDI2czJ2aSwgcHJvdCwgbWVtY2FjaGUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gczJmZC1cdTAwM2V2Y3B1O1xuJiM0MztcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQha3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9zbG90X2hhc19nbWVtKHMyZmQtXHUwMDNlbWVtc2xvdCkpXG4mIzQzO1x0XHRyZXQgPSBnbWVtX2Fib3J0KHMyZmQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IHVzZXJfbWVtX2Fib3J0KHMyZmQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyogUmVzb2x2ZSB0aGUgYWNjZXNzIGZhdWx0IGJ5IG1ha2luZyB0aGUgcGFnZSB5b3VuZyBhZ2Fpbi4gKi9cbiBzdGF0aWMgdm9pZCBoYW5kbGVfYWNjZXNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZmF1bHRfaXBhKVxuIHtcbkBAIC0yMjUwLDYgJiM0MzsyMzE0LDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV9zMl90cmFucyBuZXN0ZWRfdHJhbnMsICpuZXN0ZWQgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBlc3I7XG4gXHRwaHlzX2FkZHJfdCBmYXVsdF9pcGE7IC8qIFRoZSBhZGRyZXNzIHdlIGZhdWx0ZWQgb24gKi9cbiBcdHBoeXNfYWRkcl90IGlwYTsgLyogQWx3YXlzIHRoZSBJUEEgaW4gdGhlIEwxIGd1ZXN0IHBoeXMgc3BhY2UgKi9cbkBAIC0yNDExLDE5ICYjNDM7MjQ3Niw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0Lmh2YVx0XHQ9IGh2YSxcbiBcdH07XG4gXG4tXHRpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmV0ID0gcGt2bV9tZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0IXdyaXRlX2ZhdWx0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0IWt2bV92Y3B1X3RyYXBfaXNfZXhlY19mYXVsdCh2Y3B1KSk7XG4tXG4tXHRcdGlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSlcbi1cdFx0XHRyZXQgPSBnbWVtX2Fib3J0KFx1MDAyNnMyZmQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gdXNlcl9tZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4tXHR9XG4tXG4mIzQzO1x0cmV0ID0ga3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX21lbV9hYm9ydChcdTAwMjZzMmZkKTtcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gMTtcbiBvdXQ6XG5AQCAtMjQzNiwzOCAmIzQzOzI0ODksNDMgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0X191bm1hcF9zdGFnZTJfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCByYW5nZS1cdTAwM2VzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbi1cdFx0XHQgICAgIChyYW5nZS1cdTAwM2VlbmQgLSByYW5nZS1cdTAwM2VzdGFydCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0ICAgICByYW5nZS1cdTAwM2VtYXlfYmxvY2spO1xuJiM0MztcdGt2bV9zdGFnZTJfdW5tYXBfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCByYW5nZS1cdTAwM2VzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHQocmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuJiM0MztcdFx0XHRcdHJhbmdlLVx1MDAzZW1heV9ibG9jayk7XG4gXG4gXHRrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgcmFuZ2UtXHUwMDNlbWF5X2Jsb2NrKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tYm9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4ge1xuIFx0dTY0IHNpemUgPSAocmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFxuLVx0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0IHx8IGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuIFx0cmV0dXJuIEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX3Rlc3RfY2xlYXJfeW91bmcpKGt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QsXG4gXHRcdFx0XHRcdFx0ICAgcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gXHRcdFx0XHRcdFx0ICAgc2l6ZSwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wga3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwgIWt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9hZ2VfZ2ZuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2FnZV9nZm4oa3ZtLCByYW5nZSk7XG4gXHQvKlxuIFx0ICogVE9ETzogSGFuZGxlIG5lc3RlZF9tbXUgc3RydWN0dXJlcyBoZXJlIHVzaW5nIHRoZSByZXZlcnNlIG1hcHBpbmcgaW5cbiBcdCAqIGEgbGF0ZXIgdmVyc2lvbiBvZiBwYXRjaCBzZXJpZXMuXG4gXHQgKi9cbiB9XG4gXG4tYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuJiM0MztzdGF0aWMgYm9vbCBrdm1fdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIHtcbiBcdHU2NCBzaXplID0gKHJhbmdlLVx1MDAzZWVuZCAtIHJhbmdlLVx1MDAzZXN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRyZXR1cm4gS1ZNX1BHVF9GTihrdm1fcGd0YWJsZV9zdGFnZTJfdGVzdF9jbGVhcl95b3VuZykoa3ZtLVx1MDAzZWFyY2gubW11LnBndCxcbkBAIC0yNDc1LDYgJiM0MzsyNTMzLDE1IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRcdFx0XHQgICBzaXplLCBmYWxzZSk7XG4gfVxuIFxuJiM0Mztib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0IHx8ICFrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fdGVzdF9hZ2VfZ2ZuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3Rlc3RfYWdlX2dmbihrdm0sIHJhbmdlKTtcbiYjNDM7fVxuJiM0MztcbiBwaHlzX2FkZHJfdCBrdm1fbW11X2dldF9odHRicih2b2lkKVxuIHtcbiBcdHJldHVybiBfX3BhKGh5cF9wZ3RhYmxlLVx1MDAzZXBnZCk7XG5AQCAtMjc5NiwzICYjNDM7Mjg2MywzMyBAQCB2b2lkIGt2bV90b2dnbGVfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhc19lbmFibGVkKVxuIFxuIFx0dHJhY2Vfa3ZtX3RvZ2dsZV9jYWNoZSgqdmNwdV9wYyh2Y3B1KSwgd2FzX2VuYWJsZWQsIG5vd19lbmFibGVkKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcHJvdGVjdGVkX3ZtX3MyX29wcyA9IHtcbiYjNDM7XHQudm1fZmx1c2hfcmVtb3RlX3RsYnNcdFx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxuJiM0MztcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlLFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90IHN1cHBvcnRlZCBmb3IgUHJvdGVjdGVkIFZNcyB1bmRlciBwS1ZNXG4mIzQzO1x0ICogLnZtX2FnZV9nZm5cbiYjNDM7XHQgKiAudm1fdGVzdF9hZ2VfZ2ZuXG4mIzQzO1x0ICogLnZtX3N0YWdlMl91bm1hcF9yYW5nZVxuJiM0MztcdCAqL1xuJiM0MztcdC52bV9tZW1fYWJvcnRcdFx0XHQ9IHByb3RlY3RlZF92bV9tZW1fYWJvcnQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcGt2bV92bV9zMl9vcHMgPSB7XG4mIzQzO1x0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXHRcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxicyxcbiYjNDM7XHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcbiYjNDM7XHQudm1fYWdlX2dmblx0XHRcdD0ga3ZtX3ZtX2FnZV9nZm4sXG4mIzQzO1x0LnZtX3Rlc3RfYWdlX2dmblx0XHQ9IGt2bV92bV90ZXN0X2FnZV9nZm4sXG4mIzQzO1x0LnZtX3N0YWdlMl91bm1hcF9yYW5nZVx0XHQ9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsXG4mIzQzO1x0LnZtX21lbV9hYm9ydFx0XHRcdD0ga3ZtX3ZtX21lbV9hYm9ydCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBrdm1fZGVmYXVsdF92bV9zMl9vcHMgPSB7XG4mIzQzO1x0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXHRcdD0ga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxuJiM0MztcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsXG4mIzQzO1x0LnZtX2FnZV9nZm5cdFx0XHQ9IGt2bV92bV9hZ2VfZ2ZuLFxuJiM0MztcdC52bV90ZXN0X2FnZV9nZm5cdFx0PSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLFxuJiM0MztcdC52bV9zdGFnZTJfdW5tYXBfcmFuZ2VcdFx0PSBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlLFxuJiM0MztcdC52bV9tZW1fYWJvcnRcdFx0XHQ9IGt2bV92bV9tZW1fYWJvcnQsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcGt2bS5jIGIvYXJjaC9hcm02NC9rdm0vcGt2bS5jXG5pbmRleCA4ZTRjNmU0YmVjMTIzLi4zOTQ4ZmE0NmY0ZDc1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcGt2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9wa3ZtLmNcbkBAIC0yNDAsNyAmIzQzOzI0MCw2IEBAIGludCBwa3ZtX2luaXRfaG9zdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlID0gcmV0O1xuLVx0a3ZtLVx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7XG4gXHRpZiAocHJvdGVjdGVkKSB7XG4gXHRcdHByX3dhcm5fb25jZShcJiMzNDtrdm06IHByb3RlY3RlZCBWTXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgZm9yIGRldmVsb3BtZW50IG9ubHksIHRhaW50aW5nIGtlcm5lbFxcblwmIzM0Oyk7XG4gXHRcdGFkZF90YWludChUQUlOVF9VU0VSLCBMT0NLREVQX1NUSUxMX09LKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG5pbmRleCA0Y2VhYmFhNGMzMGJkLi40MWZiZmQ5MmNkMjkyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG5AQCAtNjcsOSAmIzQzOzY3LDkgQEAgZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGJhc2U7XG4gfVxuIFxuLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4mIzQzO2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRyZXR1cm4gISFzY2hlZF9pbmZvX29uKCk7XG4mIzQzO1x0cmV0dXJuICEhc2NoZWRfaW5mb19vbigpIFx1MDAyNlx1MDAyNiAoIWt2bSB8fCAha3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKTtcbiB9XG4gXG4gaW50IGt2bV9hcm1fcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbkBAIC04MSw3ICYjNDM7ODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aW50IHJldCA9IDA7XG4gXHRpbnQgaWR4O1xuIFxuLVx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSB8fFxuJiM0MztcdGlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSkgfHxcbiBcdCAgICBhdHRyLVx1MDAzZWF0dHIgIT0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEpXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXG5AQCAtMTEwLDcgJiM0MzsxMTAsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0dTY0IF9fdXNlciAqdXNlciA9ICh1NjQgX191c2VyICopYXR0ci1cdTAwM2VhZGRyO1xuIFx0dTY0IGlwYTtcbiBcbi1cdGlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkgfHxcbiYjNDM7XHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVx1MDAzZWt2bSkgfHxcbiBcdCAgICBhdHRyLVx1MDAzZWF0dHIgIT0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEpXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXG5AQCAtMTI2LDcgJiM0MzsxMjYsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBOlxuLVx0XHRpZiAoa3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkpXG4mIzQzO1x0XHRpZiAoa3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAtRU5YSU87XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcm1pLmMgYi9hcmNoL2FybTY0L2t2bS9ybWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVlY2M4YjM0OTg2OThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS92aXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2luaXRfcm1pKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoa3ZtX2dldF9tb2RlKCkgIT0gS1ZNX01PREVfUk1NKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBDaGVjayBpZiB0aGUgUk1JIGlzIGF2YWlsYWJsZSAqL1xuJiM0MztcbiYjNDM7XHQvKiBGdXR1cmUgcGF0Y2ggd2lsbCBlbmFibGUgc3RhdGljIGJyYW5jaCBrdm1fcm1pX2lzX2F2YWlsYWJsZSAqL1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1OGMxZmMxM2VhMTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5AQCAtNTYzOCwxOCAmIzQzOzU2MzgsMTggQEAgaW50IGt2bV9hcm1fc3lzX3JlZ19zZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWdcbiBcdFx0XHRcdCAgICBzeXNfcmVnX2Rlc2NzLCBBUlJBWV9TSVpFKHN5c19yZWdfZGVzY3MpKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyh2b2lkKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIENTU0VMUl9NQVg7XG4mIzQzO1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IENTU0VMUl9NQVg7XG4gfVxuIFxuLXN0YXRpYyBpbnQgd3JpdGVfZGVtdXhfcmVnaWRzKHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuJiM0MztzdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuIHtcbiBcdHU2NCB2YWwgPSBLVk1fUkVHX0FSTTY0IHwgS1ZNX1JFR19TSVpFX1UzMiB8IEtWTV9SRUdfQVJNX0RFTVVYO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHR2YWwgfD0gS1ZNX1JFR19BUk1fREVNVVhfSURfQ0NTSURSO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1NTRUxSX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVtdXhfcmVncyh2Y3B1KTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHB1dF91c2VyKHZhbCB8IGksIHVpbmRpY2VzKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0dWluZGljZXMmIzQzOyYjNDM7O1xuQEAgLTU2OTMsMTEgJiM0Mzs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9zeXNfcmVnX2hpZGRlbl91c2VyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjNDM7XHRcdFx0XHRcdFx0IHU2NCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHJlZykge1xuJiM0MztcdGNhc2UgU1lTX0lEX0FBNjRERlIwX0VMMTpcbiYjNDM7XHRjYXNlIFNZU19QTUNSX0VMMDpcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB3YWxrX29uZV9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsXG4gXHRcdFx0ICAgIHU2NCBfX3VzZXIgKip1aW5kLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgKnRvdGFsKVxuIHtcbiYjNDM7XHRpZiAodmNwdV9pc19yZWModmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGt2bV9yZWFsbV9zeXNfcmVnX2hpZGRlbl91c2VyKHZjcHUsIHJlZ190b19lbmNvZGluZyhyZCkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElnbm9yZSByZWdpc3RlcnMgd2UgdHJhcCBidXQgZG9uJiMzOTt0IHNhdmUsXG4gXHQgKiBhbmQgZm9yIHdoaWNoIG5vIGN1c3RvbSB1c2VyIGFjY2Vzc29yIGlzIHByb3ZpZGVkLlxuQEAgLTU3MzUsNyAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgaW50IHdhbGtfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kKVxuIFxuIHVuc2lnbmVkIGxvbmcga3ZtX2FybV9udW1fc3lzX3JlZ19kZXNjcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIG51bV9kZW11eF9yZWdzKClcbiYjNDM7XHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSlcbiBcdFx0JiM0Mzsgd2Fsa19zeXNfcmVncyh2Y3B1LCAodTY0IF9fdXNlciAqKU5VTEwpO1xuIH1cbiBcbkBAIC01NzQ4LDcgJiM0Mzs1NzYzLDcgQEAgaW50IGt2bV9hcm1fY29weV9zeXNfcmVnX2luZGljZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kaWNlcylcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHVpbmRpY2VzICYjNDM7PSBlcnI7XG4gXG4tXHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHVpbmRpY2VzKTtcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHZjcHUsIHVpbmRpY2VzKTtcbiB9XG4gXG4gI2RlZmluZSBLVk1fQVJNX0ZFQVRVUkVfSURfUkFOR0VfSU5ERVgocilcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmggYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXG5pbmRleCBmODZhMDA2ZDY3MTM2Li4wNmMyMDYxMmU5ZTdkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaFxuQEAgLTEwLDYgJiM0MzsxMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHNjaS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4mIzQzO1xuICNkZWZpbmUgS1ZNX0FSTV9QU0NJXzBfMVx0UFNDSV9WRVJTSU9OKDAsIDEpXG4gI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yXHRQU0NJX1ZFUlNJT04oMCwgMilcbiAjZGVmaW5lIEtWTV9BUk1fUFNDSV8xXzBcdFBTQ0lfVkVSU0lPTigxLCAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBBUk02NCBLVk0gYW5kIEFybSBDb25maWRlbnRpYWwgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSAvIFJlYWxtIE1hbmFnZW1lbnQgRXh0ZW5zaW9uKSBjb2RlIGV4Y2x1c2l2ZWx5LCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbGwgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZXhjbHVzaXZlIHRvIGFybTY0IGFuZCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZjk1ZGU5NTRkNDEzZGY2MWY4MzgyNzU4OWRlMGIyZGNkNWVhZGY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAyMDoxMjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNjg2NDdmZjRiZGQyNC4uMWFmZTNkZjNiOTIzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTMyNTYsNiAmIzQzOzMyNTYsOSBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJbmVzdGVkOiBWSEUtYmFzZWQgbW9kZSB3aXRoIHN1cHBvcnQgZm9yIG5lc3RlZAogCQkJCXZpcnR1YWxpemF0aW9uLiBSZXF1aXJlcyBhdCBsZWFzdCBBUk12OC40CiAJCQkJaGFyZHdhcmUgKHdpdGggRkVBVF9OVjIpLgomIzQzOwkJCXJtbTogU3VwcG9ydCBmb3IgcnVubmluZyBjb25maWRlbnRpYWwgZ3Vlc3RzIGluIFJlYWxtCiYjNDM7CQkJICAgICB3b3JsZCB1c2luZyBSTU0sIGFzIGRlZmluZWQgYnkgQXJtIENvbmZpZGVudGlhbAomIzQzOwkJCSAgICAgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSkKIAogCQkJRGVmYXVsdHMgdG8gVkhFL25WSEUgYmFzZWQgb24gaGFyZHdhcmUgc3VwcG9ydC4gU2V0dGluZwogCQkJbW9kZSB0byAmIzM0O3Byb3RlY3RlZCYjMzQ7IHdpbGwgZGlzYWJsZSBrZXhlYyBhbmQgaGliZXJuYXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCBhM2MxOTI4YmRmNzQzLi5kMzYwYThiMDViOGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC03OTMsNCAmIzQzOzc5MywyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3Jlc2V0X3ZjcHVfcHNjaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJdmNwdV9zZXRfcmVnKHZjcHUsIDAsIHJlc2V0X3N0YXRlLSZndDtyMCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGVudW0gcmVhbG1fc3RhdGUga3ZtX3JlYWxtX3N0YXRlKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoa3ZtLSZndDthcmNoLnJlYWxtLnN0YXRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9zZXRfcmVhbG1fc3RhdGUoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkgICAgICAgZW51bSByZWFsbV9zdGF0ZSBuZXdfc3RhdGUpCiYjNDM7ewomIzQzOwlXUklURV9PTkNFKGt2bS0mZ3Q7YXJjaC5yZWFsbS5zdGF0ZSwgbmV3X3N0YXRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9pc19jcmVhdGVkKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm1fdm1faXNfcmVhbG0oa3ZtKSAmYW1wOyZhbXA7IGt2bV9yZWFsbV9zdGF0ZShrdm0pICE9IFJFQUxNX1NUQVRFX05PTkU7CiYjNDM7fQomIzQzOwogI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMjdmZTBjZDViMmQ3YS4uZmJmZDg1ZGM5OTllZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDthc20vZnBzaW1kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fYXNtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcm1pLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3ZuY3JfbWFwcGluZy5oJmd0OwogCiAjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9JTlRDX0lOSVRJQUxJWkVECkBAIC02OSw2ICYjNDM7NzAsNyBAQCBlbnVtIGt2bV9tb2RlIHsKIAlLVk1fTU9ERV9ERUZBVUxULAogCUtWTV9NT0RFX1BST1RFQ1RFRCwKIAlLVk1fTU9ERV9OViwKJiM0MzsJS1ZNX01PREVfUk1NLAogCUtWTV9NT0RFX05PTkUsCiB9OwogI2lmZGVmIENPTkZJR19LVk0KQEAgLTE1MCw2ICYjNDM7MTUyLDI2IEBAIHN0cnVjdCBrdm1fdm1pZCB7CiAJYXRvbWljNjRfdCBpZDsKIH07CiAKJiM0MztzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHsKJiM0MzsJdm9pZCAoKnZjcHVfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKJiM0MzsJdm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGt2bV9nZm5fcmFuZ2U7CiYjNDM7c3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjOwomIzQzOwomIzQzO3N0cnVjdCBrdm1fdm1fczJfb3BzIHsKJiM0MzsJYm9vbCAoKnZtX2FnZV9nZm4pKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTsKJiM0MzsJYm9vbCAoKnZtX3Rlc3RfYWdlX2dmbikoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzOwlpbnQgKCp2bV9mbHVzaF9yZW1vdGVfdGxicykoc3RydWN0IGt2bSAqa3ZtKTsKJiM0MzsJaW50ICgqdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAomIzQzOwkJCQkJICB1NjQgbnJfcGFnZXMpOwomIzQzOwl2b2lkICgqdm1fc3RhZ2UyX3VubWFwX3JhbmdlKShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LAomIzQzOwkJCQkgICAgICBwaHlzX2FkZHJfdCBzdGFydCwgdTY0IHNpemUsCiYjNDM7CQkJCSAgICAgIGJvb2wgbWF5X2Jsb2NrKTsKJiM0MzsJaW50ICgqdm1fbWVtX2Fib3J0KShjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpOwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qga3ZtX3MyX21tdSB7CiAJc3RydWN0IGt2bV92bWlkIHZtaWQ7CiAKQEAgLTI1Nyw3ICYjNDM7Mjc5LDYgQEAgc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gewogCXBrdm1faGFuZGxlX3QgaGFuZGxlOwogCXN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHRlYXJkb3duX21jOwogCXN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHN0YWdlMl90ZWFyZG93bl9tYzsKLQlib29sIGlzX3Byb3RlY3RlZDsKIAlib29sIGlzX2NyZWF0ZWQ7CiAKIAkvKgpAQCAtMzA2LDkgJiM0MzszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQgewogCV9fTlJfRkdUX0dST1VQX0lEU19fCiB9OwogCiYjNDM7ZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB7CiYjNDM7CVZNX05WSEUsCiYjNDM7CVZNX1ZIRSwKJiM0MzsJVk1fUEtWTSwJCS8qIE5vcm1hbCBndWVzdHMgb24gUEtWTSAqLwomIzQzOwlNQVJLRVIoX19WTV9DT05GSURFTlRJQUwpLAomIzQzOwlWTV9QUk9URUNURURfUEtWTSwJLyogUHJvdGVjdGVkIFZNICovCiYjNDM7CVZNX1JFQUxNLAkJLyogQ0NBICovCiYjNDM7CVZNX0ZMQVZPUl9NQVgsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBrdm1fYXJjaCB7CiAJc3RydWN0IGt2bV9zMl9tbXUgbW11OwogCiYjNDM7CWVudW0ga3ZtX2FybV92bV9mbGF2b3Igdm1fZmxhdm9yOwogCS8qCiAJICogRmluZS1HcmFpbmVkIFVOREVGLCBtaW1pY2tpbmcgdGhlIEZHVCBsYXlvdXQgZGVmaW5lZCBieSB0aGUKIAkgKiBhcmNoaXRlY3R1cmUuIFdlIHRyYWNrIHRoZW0gZ2xvYmFsbHksIGFzIHdlIHByZXNlbnQgdGhlCkBAIC0zMTgsNiAmIzQzOzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJICovCiAJdTY0IGZndVtfX05SX0ZHVF9HUk9VUF9JRFNfX107CiAKJiM0MzsJY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgKnZtX3MyX29wczsKJiM0MzsKIAkvKgogCSAqIFN0YWdlIDIgcGFnaW5nIHN0YXRlIGZvciBWTXMgd2l0aCBuZXN0ZWQgUzIgdXNpbmcgYSB2aXJ0dWFsCiAJICogVk1JRC4KQEAgLTQxNywxMSAmIzQzOzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCS8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgVExCcyAqLwogCWF0b21pY190IHZuY3JfdGxiX2NvdW50OwogCi0JLyoKLQkgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICYjMzk7cGt2bS5oYW5kbGUmIzM5OyBpcyB1c2VkIHRvIGxvb2t1cAotCSAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuCi0JICovCi0Jc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTsKJiM0MzsJdW5pb24gewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJiMzOTtwa3ZtLmhhbmRsZSYjMzk7IGlzIHVzZWQgdG8gbG9va3VwCiYjNDM7CQkgKiB0aGUgYXNzb2NpYXRlZCBwS1ZNIGluc3RhbmNlIGluIHRoZSBoeXBlcnZpc29yLgomIzQzOwkJICovCiYjNDM7CQlzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSBwa3ZtOwomIzQzOwkJc3RydWN0IHJlYWxtIHJlYWxtOwomIzQzOwl9OwogCiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUwogCS8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovCkBAIC04NDYsNiAmIzQzOzg4Myw3IEBAIHN0cnVjdCB2bmNyX3RsYjsKIAogc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCXN0cnVjdCBrdm1fY3B1X2NvbnRleHQgY3R4dDsKJiM0MzsJY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqdmNwdV9vcHM7CiAKIAkvKgogCSAqIEd1ZXN0IGZsb2F0aW5nIHBvaW50IHN0YXRlCkBAIC0xMzQ2LDcgJiM0MzsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpOwomIzQzO2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpOwogaW50IGt2bV9hcm1fcHZ0aW1lX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE1MDQsOSAmIzQzOzE1NDIsMTMgQEAgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCk7CiAKICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX0ZMVVNIX1JFTU9URV9UTEJTX1JBTkdFCiAKLSNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pCShpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSAmYW1wOyZhbXA7IChrdm0pLSZndDthcmNoLnBrdm0uaXNfcHJvdGVjdGVkKQomIzQzOyNkZWZpbmUga3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pCSgoa3ZtKS0mZ3Q7YXJjaC52bV9mbGF2b3IgJmd0Oz0gX19WTV9DT05GSURFTlRJQUwpCiYjNDM7I2RlZmluZSBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkJKChrdm0pLSZndDthcmNoLnZtX2ZsYXZvciA9PSBWTV9QUk9URUNURURfUEtWTSkKJiM0MzsjZGVmaW5lIGt2bV92bV9pc19yZWFsbShrdm0pCQkoKGt2bSktJmd0O2FyY2gudm1fZmxhdm9yID09IFZNX1JFQUxNKQogCiYjNDM7I2RlZmluZSB2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KQlrdm1fdm1faXNfY29uZmlkZW50aWFsKCh2Y3B1KS0mZ3Q7a3ZtKQogI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KQkJa3ZtX3ZtX2lzX3Byb3RlY3RlZCgodmNwdSktJmd0O2t2bSkKJiM0MzsjZGVmaW5lIHZjcHVfaXNfcmVjKHZjcHUpCQlrdm1fdm1faXNfcmVhbG0oKHZjcHUpLSZndDtrdm0pCiAKIGludCBrdm1fYXJtX3ZjcHVfZmluYWxpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZmVhdHVyZSk7CiBib29sIGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaAppbmRleCA0MWE4Njg3OTM4ZWI2Li5jMmU0YjI5ZTYwNWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oCkBAIC04LDkgJiM0Mzs4LDEzIEBACiAjZGVmaW5lIF9fQVJNNjRfS1ZNX1BHVEFCTEVfSF9fCiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3ZtX3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JidHJlZV90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKJiM0MztzdHJ1Y3Qga3ZtX3MyX21tdTsKJiM0MzsKICNkZWZpbmUgS1ZNX1BHVEFCTEVfRklSU1RfTEVWRUwJCS0xCiAjZGVmaW5lIEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwJCTMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oCmluZGV4IGJlZWEwMGU2OTNhMGEuLjU0YTYxOGQ4ODdmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3Brdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmgKQEAgLTcsOSAmIzQzOzcsOSBAQAogI2RlZmluZSBfX0FSTTY0X0tWTV9QS1ZNX0hfXwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYXJtX2ZmYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NhdHRlcmxpc3QuaCZndDsKLSNpbmNsdWRlICZsdDthc20va3ZtX2hvc3QuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKIAogLyogTWF4aW11bSBudW1iZXIgb2YgVk1zIHRoYXQgY2FuIGNvLWV4aXN0IHVuZGVyIHBLVk0uICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3JtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0ZjVjNzVhMjdiNWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaApAQCAtMCwwICYjNDM7MSw2MSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19BU01fS1ZNX1JNSV9ICiYjNDM7I2RlZmluZSBfX0FTTV9LVk1fUk1JX0gKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHJlYWxtX3N0YXRlIC0gU3RhdGUgb2YgYSBSZWFsbQomIzQzOyAqCiYjNDM7ICogTWlycm9ycyB0aGUgUk1NJiMzOTtzIFJlYWxtIGxpZmVjeWNsZSBzdGF0ZXMgd2hlcmUgdGhleSBhcmUgbWVhbmluZ2Z1bCB0byBLVk0sCiYjNDM7ICogd2l0aCBSRUFMTV9TVEFURV9EWUlORyBiZWluZyBhIEtWTS1pbnRlcm5hbCBzdGF0ZSB1c2VkIHRvIHByZXZlbnQgZnVydGhlcgomIzQzOyAqIHJlcXVlc3RzIHdoaWxlIHRlYXJkb3duIGlzIGluIHByb2dyZXNzLiBLVk0gZG9lcyBub3QgdHJhY2sgUkVBTE1fU1lTVEVNX09GRgomIzQzOyAqIG9yIFJFQUxNX1pPTUJJRSBzZXBhcmF0ZWx5IGFzIHRoZXkgbmF0dXJhbGx5IGxlYWQgdG8gdGVhcmRvd24uCiYjNDM7ICovCiYjNDM7ZW51bSByZWFsbV9zdGF0ZSB7CiYjNDM7CS8qKgomIzQzOwkgKiBAUkVBTE1fU1RBVEVfTk9ORToKJiM0MzsJICogICAgICBSZWFsbSBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQuIHJtaV9yZWFsbV9jcmVhdGUoKSBoYXMgbm90CiYjNDM7CSAqICAgICAgeWV0IGJlZW4gY2FsbGVkLgomIzQzOwkgKi8KJiM0MzsJUkVBTE1fU1RBVEVfTk9ORSwKJiM0MzsJLyoqCiYjNDM7CSAqIEBSRUFMTV9TVEFURV9ORVc6CiYjNDM7CSAqICAgICAgUmVhbG0gaXMgdW5kZXIgY29uc3RydWN0aW9uLCBybWlfcmVhbG1fY3JlYXRlKCkgaGFzIGJlZW4KJiM0MzsJICogICAgICBjYWxsZWQsIGJ1dCBpdCBpcyBub3QgeWV0IGFjdGl2YXRlZC4gUGFnZXMgbWF5IGJlIHBvcHVsYXRlZC4KJiM0MzsJICovCiYjNDM7CVJFQUxNX1NUQVRFX05FVywKJiM0MzsJLyoqCiYjNDM7CSAqIEBSRUFMTV9TVEFURV9BQ1RJVkU6CiYjNDM7CSAqICAgICAgUmVhbG0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgaXMgZWxpZ2libGUgZm9yIGV4ZWN1dGlvbiB3aXRoCiYjNDM7CSAqICAgICAgcm1pX3JlY19lbnRlcigpLiBQYWdlcyBtYXkgbm8gbG9uZ2VyIGJlIHBvcHVsYXRlZCB3aXRoCiYjNDM7CSAqICAgICAgcm1pX2RhdGFfY3JlYXRlKCkuCiYjNDM7CSAqLwomIzQzOwlSRUFMTV9TVEFURV9BQ1RJVkUsCiYjNDM7CS8qKgomIzQzOwkgKiBAUkVBTE1fU1RBVEVfRFlJTkc6CiYjNDM7CSAqICAgICAgUmVhbG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkIG9yIGhhcyBhbHJlYWR5IGJlZW4KJiM0MzsJICogICAgICBkZXN0cm95ZWQuCiYjNDM7CSAqLwomIzQzOwlSRUFMTV9TVEFURV9EWUlORywKJiM0MzsJLyoqCiYjNDM7CSAqIEBSRUFMTV9TVEFURV9ERUFEOgomIzQzOwkgKiAgICAgIFJlYWxtIGhhcyBiZWVuIGRlc3Ryb3llZC4KJiM0MzsJICovCiYjNDM7CVJFQUxNX1NUQVRFX0RFQUQKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByZWFsbSAtIEFkZGl0aW9uYWwgcGVyIFZNIGRhdGEgZm9yIGEgUmVhbG0KJiM0MzsgKgomIzQzOyAqIEBzdGF0ZTogVGhlIGxpZmV0aW1lIHN0YXRlIG1hY2hpbmUgZm9yIHRoZSByZWFsbQomIzQzOyAqLwomIzQzO3N0cnVjdCByZWFsbSB7CiYjNDM7CWVudW0gcmVhbG1fc3RhdGUgc3RhdGU7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIGt2bV9pbml0X3JtaSh2b2lkKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19BU01fS1ZNX1JNSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZpcnQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oCmluZGV4IGI1NDY3MDNjM2FiOWEuLjkyY2VjNDI5NTJmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oCkBAIC04Nyw2ICYjNDM7ODcsNyBAQCB2b2lkIF9faHlwX3Jlc2V0X3ZlY3RvcnModm9pZCk7CiBib29sIGlzX2t2bV9hcm1faW5pdGlhbGlzZWQodm9pZCk7CiAKIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcHJvdGVjdGVkX21vZGVfaW5pdGlhbGl6ZWQpOwomIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wa3ZtX2luaXRpYWxpemVkKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCmluZGV4IDU5NjEyZDJmMjc3YzEuLmVkM2NmMzBlYjA2ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBDRkxBR1NfaGFuZGxlX2V4aXQubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0CiBrdm0teSAmIzQzOz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXAogCSBpbmplY3RfZmF1bHQubyB2YV9sYXlvdXQubyBoYW5kbGVfZXhpdC5vIGNvbmZpZy5vIFwKIAkgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXAotCSB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXAomIzQzOwkgdmdpYy1zeXMtcmVnLXYzLm8gZnBzaW1kLm8gcGt2bS5vIHJtaS5vIFwKIAkgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFwKIAkgdmdpYy92Z2ljLm8gdmdpYy92Z2ljLWluaXQubyBcCiAJIHZnaWMvdmdpYy1pcnFmZC5vIHZnaWMvdmdpYy12Mi5vIFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYwppbmRleCA2YWMzMzIxZjRjNTc1Li4zZWRkZjQ0ZjdiMWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jCkBAIC01NiwxMSAmIzQzOzU2LDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3Modm9pZCkKIAlyZXR1cm4ga3ZtX3ZnaWNfZ2xvYmFsX3N0YXRlLm5vX2h3X2RlYWN0aXZhdGlvbiA/IFZHSUNfSVJRX1NXX1JFU0FNUExFIDogMDsKIH0KIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9yZWFsbV90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBSTUlfUkVDX0VOVEVSIHJlamVjdHMgTFJzIHdpdGggdGhlIEhXIGJpdCBzZXQsIHNvIHVzZSB0aGUgZXhpc3RpbmcKJiM0MzsJICogc29mdHdhcmUgcmVzYW1wbGluZyBtZWNoYW5pc20gZm9yIFJlYWxtIHRpbWVyIGludGVycnVwdHMuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gVkdJQ19JUlFfU1dfUkVTQU1QTEU7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wcyA9IHsKIAkuZ2V0X2ZsYWdzCSA9IGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3MsCiAJLmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9vcHMgcmVhbG1fdGltZXJfaXJxX29wcyA9IHsKJiM0MzsJLmdldF9mbGFncwkgPSBrdm1fcmVhbG1fdGltZXJfZ2V0X2lycV9mbGFncywKJiM0MzsJLmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0gewogCS5nZXRfaW5wdXRfbGV2ZWwgPSBrdm1fYXJjaF90aW1lcl9nZXRfaW5wdXRfbGV2ZWwsCiAJLnF1ZXVlX2lycV91bmxvY2sgPSB2Z2ljX3Y1X3BwaV9xdWV1ZV9pcnFfdW5sb2NrLApAQCAtMTA3OSw3ICYjNDM7MTA5Myw3IEBAIHN0YXRpYyB2b2lkIHRpbWVyX2NvbnRleHRfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0aW1lcmlkKQogCiAJY3R4dC0mZ3Q7dGltZXJfaWQgPSB0aW1lcmlkOwogCi0JaWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJaWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSkgewogCQlpZiAodGltZXJpZCA9PSBUSU1FUl9WVElNRVIpCiAJCQljdHh0LSZndDtvZmZzZXQudm1fb2Zmc2V0ID0gJmFtcDtrdm0tJmd0O2FyY2gudGltZXJfZGF0YS52b2Zmc2V0OwogCQllbHNlCkBAIC0xMTEwLDcgJiM0MzsxMTI0LDcgQEAgdm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdGltZXJfY29udGV4dF9pbml0KHZjcHUsIGkpOwogCiAJLyogU3luY2hyb25pemUgb2Zmc2V0cyBhY3Jvc3MgdGltZXJzIG9mIGEgVk0gaWYgbm90IGFscmVhZHkgcHJvdmlkZWQgKi8KLQlpZiAoIXZjcHVfaXNfcHJvdGVjdGVkKHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJaWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSAmYW1wOyZhbXA7CiAJICAgICF0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZNX0NPVU5URVJfT0ZGU0VULCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5mbGFncykpIHsKIAkJdGltZXJfc2V0X29mZnNldCh2Y3B1X3Z0aW1lcih2Y3B1KSwga3ZtX3BoeXNfdGltZXJfcmVhZCgpKTsKIAkJdGltZXJfc2V0X29mZnNldCh2Y3B1X3B0aW1lcih2Y3B1KSwgMCk7CkBAIC0xNjA5LDggJiM0MzsxNjIzLDEyIEBAIGludCBrdm1fdGltZXJfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCWdldF90aW1lcl9tYXAodmNwdSwgJmFtcDttYXApOwogCi0Jb3BzID0gdmdpY19pc192NSh2Y3B1LSZndDtrdm0pID8gJmFtcDthcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NSA6Ci0JCQkJICAgICAgJmFtcDthcmNoX3RpbWVyX2lycV9vcHM7CiYjNDM7CWlmICh2Y3B1X2lzX3JlYyh2Y3B1KSkKJiM0MzsJCW9wcyA9ICZhbXA7cmVhbG1fdGltZXJfaXJxX29wczsKJiM0MzsJZWxzZSBpZiAodmdpY19pc192NSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJb3BzID0gJmFtcDthcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NTsKJiM0MzsJZWxzZQomIzQzOwkJb3BzID0gJmFtcDthcmNoX3RpbWVyX2lycV9vcHM7CiAKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IG5yX3RpbWVycyh2Y3B1KTsgaSYjNDM7JiM0MzspCiAJCWt2bV92Z2ljX3NldF9pcnFfb3BzKHZjcHUsIHRpbWVyX2lycSh2Y3B1X2dldF90aW1lcih2Y3B1LCBpKSksIG9wcyk7CkBAIC0xNzM2LDcgJiM0MzsxNzU0LDcgQEAgaW50IGt2bV92bV9pb2N0bF9zZXRfY291bnRlcl9vZmZzZXQoc3RydWN0IGt2bSAqa3ZtLAogCWlmIChvZmZzZXQtJmd0O3Jlc2VydmVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpCiYjNDM7CWlmIChrdm1fdm1faXNfY29uZmlkZW50aWFsKGt2bSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCmluZGV4IDhiMDgwODA0YmM5MGIuLjNmZTVhNGY3NzczOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCkBAIC00Miw2ICYjNDM7NDIsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbmVzdGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9wa3ZtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9wdHJhdXRoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcm1pLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NlY3Rpb25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3N0YWNrdHJhY2UvbnZoZS5oJmd0OwogCkBAIC03NCw2ICYjNDM7NzUsOCBAQCBzdHJ1Y3Qga3ZtX2lvY3RsX2NhcF9tYXAgewogCWxvbmcgZXh0OwogfTsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tWTV9GTEFWT1JfTUFYXTsKJiM0MzsKIC8qIE1ha2UgS1ZNX0NBUF9OUl9WQ1BVUyB0aGUgcmVmZXJlbmNlIGZvciBmZWF0dXJlcyB3ZSBhbHdheXMgc3VwcG9ydGVkICovCiAjZGVmaW5lIEtWTV9DQVBfQVJNX0JBU0lDCUtWTV9DQVBfTlJfVkNQVVMKIApAQCAtMTExLDYgJiM0MzsxMTQsOCBAQCBsb25nIGt2bV9nZXRfY2FwX2Zvcl9rdm1faW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCBsb25nICpleHQpCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKJiM0MztERUZJTkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7CiYjNDM7CiBERUNMQVJFX0tWTV9IWVBfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1faHlwX3ZlY3Rvcik7CiAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGt2bV9hcm1faHlwX3N0YWNrX2Jhc2UpOwpAQCAtMTMyLDYgJiM0MzsxMzcsMjUgQEAgaW50IGt2bV9hcmNoX3ZjcHVfc2hvdWxkX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUodmNwdSkgPT0gSU5fR1VFU1RfTU9ERTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGt2bV9yZWFsbV9leHRfYWxsb3dlZChsb25nIGV4dCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZXh0KSB7CiYjNDM7CWNhc2UgS1ZNX0NBUF9JUlFDSElQOgomIzQzOwljYXNlIEtWTV9DQVBfQVJNX1BTQ0k6CiYjNDM7CWNhc2UgS1ZNX0NBUF9BUk1fUFNDSV8wXzI6CiYjNDM7CWNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzoKJiM0MzsJY2FzZSBLVk1fQ0FQX01BWF9WQ1BVUzoKJiM0MzsJY2FzZSBLVk1fQ0FQX01BWF9WQ1BVX0lEOgomIzQzOwljYXNlIEtWTV9DQVBfTVNJX0RFVklEOgomIzQzOwljYXNlIEtWTV9DQVBfQVJNX1ZNX0lQQV9TSVpFOgomIzQzOwljYXNlIEtWTV9DQVBfQVJNX1BUUkFVVEhfQUREUkVTUzoKJiM0MzsJY2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0dFTkVSSUM6CiYjNDM7CWNhc2UgS1ZNX0NBUF9TWU5DX01NVToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCQkJICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKQogewpAQCAtMTQzLDYgJiM0MzsxNjcsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSAmYW1wOyZhbXA7ICFrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIGNhcC0mZ3Q7Y2FwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGt2bSAmYW1wOyZhbXA7IGt2bV92bV9pc19yZWFsbShrdm0pICZhbXA7JmFtcDsgIWt2bV9yZWFsbV9leHRfYWxsb3dlZChjYXAtJmd0O2NhcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlzd2l0Y2ggKGNhcC0mZ3Q7Y2FwKSB7CiAJY2FzZSBLVk1fQ0FQX0FSTV9OSVNWX1RPX1VTRVI6CiAJCXIgPSAwOwpAQCAtMjE0LDYgJiM0MzsyNDEsMjYgQEAgc3RhdGljIGludCBrdm1fYXJtX2RlZmF1bHRfbWF4X3ZjcHVzKHZvaWQpCiAJcmV0dXJuIHZnaWNfcHJlc2VudCA/IGt2bV92Z2ljX2dldF9tYXhfdmNwdXMoKSA6IEtWTV9NQVhfVkNQVVM7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bV9pbml0X3ZtX2ZsYXZvcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSkKJiM0Mzt7CiYjNDM7CWJvb2wgcHJvdGVjdGVkID0gdHlwZSAmYW1wOyBLVk1fVk1fVFlQRV9BUk1fUFJPVEVDVEVEOwomIzQzOwomIzQzOwlpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHsKJiM0MzsJCWlmIChwcm90ZWN0ZWQpCiYjNDM7CQkJa3ZtLSZndDthcmNoLnZtX2ZsYXZvciA9IFZNX1BST1RFQ1RFRF9QS1ZNOwomIzQzOwkJZWxzZQomIzQzOwkJCWt2bS0mZ3Q7YXJjaC52bV9mbGF2b3IgPSBWTV9QS1ZNOwomIzQzOwl9IGVsc2UgaWYgKHByb3RlY3RlZCkgewomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0gZWxzZSBpZiAoaGFzX3ZoZSgpKSB7CiYjNDM7CQlrdm0tJmd0O2FyY2gudm1fZmxhdm9yID0gVk1fVkhFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJa3ZtLSZndDthcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBrdm1fYXJjaF9pbml0X3ZtIC0gaW5pdGlhbGl6ZXMgYSBWTSBkYXRhIHN0cnVjdHVyZQogICogQGt2bToJcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdApAQCAtMjM2LDYgJiM0MzsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKICNlbmRpZgogCiYjNDM7CXJldCA9IGt2bV9pbml0X3ZtX2ZsYXZvcihrdm0sIHR5cGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlrdm1faW5pdF9uZXN0ZWQoa3ZtKTsKIAogCXJldCA9IGt2bV9zaGFyZV9oeXAoa3ZtLCBrdm0gJiM0MzsgMSk7CkBAIC0yNjAsOSAmIzQzOzMxMSw2IEBAIGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKQogCQlyZXQgPSBwa3ZtX2luaXRfaG9zdF92bShrdm0sIHR5cGUpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfdW5pbml0X21tdTsKLQl9IGVsc2UgaWYgKHR5cGUgJmFtcDsgS1ZNX1ZNX1RZUEVfQVJNX1BST1RFQ1RFRCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl91bmluaXRfbW11OwogCX0KIAogCWt2bV92Z2ljX2Vhcmx5X2luaXQoa3ZtKTsKQEAgLTM4MSw2ICYjNDM7NDI5LDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAlpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgJmFtcDsmYW1wOyAha3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBleHQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoa3ZtICZhbXA7JmFtcDsga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgJmFtcDsmYW1wOyAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGV4dCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlzd2l0Y2ggKGV4dCkgewogCWNhc2UgS1ZNX0NBUF9JUlFDSElQOgogCQlyID0gdmdpY19wcmVzZW50OwpAQCAtNDQ3LDcgJiM0Mzs0OTgsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCQlyID0gc3lzdGVtX3N1cHBvcnRzX210ZSgpOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfU1RFQUxfVElNRToKLQkJciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpOwomIzQzOwkJciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZChrdm0pOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQVJNX0VMMV8zMkJJVDoKIAkJciA9IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTXzMyQklUX0VMMSk7CkBAIC01NDgsNiAmIzQzOzU5OSw4IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7dmNwdS0mZ3Q7bXV0ZXgpOwogI2VuZGlmCiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC52Y3B1X29wcyA9IGFybTY0X3ZjcHVfb3BzW3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bV9mbGF2b3JdOwomIzQzOwogCS8qIEZvcmNlIHVzZXJzIHRvIGNhbGwgS1ZNX0FSTV9WQ1BVX0lOSVQgKi8KIAl2Y3B1X2NsZWFyX2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7CiAKQEAgLTY2MiwxNCAmIzQzOzcxNSwxMSBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gc2luZ2xlX3Rhc2tfcnVubmluZygpOwogfQogCi12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiYjNDM7c3RhdGljIHZvaWQgdmNwdV9wcmVwYXJlX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9zMl9tbXUgKm1tdTsKIAlpbnQgKmxhc3RfcmFuOwogCi0JaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQotCQlnb3RvIG5vbW11OwotCiAJaWYgKHZjcHVfaGFzX252KHZjcHUpKQogCQlrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTsKIApAQCAtNjk5LDEwICYjNDM7NzQ5LDMwIEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIAkJa3ZtX2NhbGxfaHlwKF9fa3ZtX2ZsdXNoX2NwdV9jb250ZXh0LCBtbXUpOwogCQkqbGFzdF9yYW4gPSB2Y3B1LSZndDt2Y3B1X2lkeDsKIAl9CiYjNDM7fQogCi1ub21tdToKLQl2Y3B1LSZndDtjcHUgPSBjcHU7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zZXRfd2Z4X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CWlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHZjcHUpKQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyICZhbXA7PSB+SENSX1RXRTsKJiM0MzsJZWxzZQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyIHw9IEhDUl9UV0U7CiYjNDM7CiYjNDM7CWlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdpKHZjcHUpKQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyICZhbXA7PSB+SENSX1RXSTsKJiM0MzsJZWxzZQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZjcHVfbG9hZF9wdnRpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoJmFtcDt2Y3B1LSZndDthcmNoKSkKJiM0MzsJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwomIzQzO30KIAomIzQzO3N0YXRpYyB2b2lkIHZoZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJdmNwdV9wcmVwYXJlX21tdSh2Y3B1KTsKIAkvKgogCSAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbAogCSAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuCkBAIC03MTEsMzIgJiM0Mzs3ODEsNjggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCWt2bV92Z2ljX2xvYWQodmNwdSk7CiAJa3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTsKIAlrdm1fdmNwdV9sb2FkX2ZndCh2Y3B1KTsKLQlpZiAoaGFzX3ZoZSgpKQotCQlrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7CiAJa3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpOwogCWt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpOwotCWlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCi0JCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwogCi0JaWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2UodmNwdSkpCi0JCXZjcHUtJmd0O2FyY2guaGNyX2VsMiAmYW1wOz0gfkhDUl9UV0U7Ci0JZWxzZQotCQl2Y3B1LSZndDthcmNoLmhjcl9lbDIgfD0gSENSX1RXRTsKJiM0MzsJdmNwdV9sb2FkX3B2dGltZSh2Y3B1KTsKJiM0MzsJdmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpOwomIzQzOwl2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTsKJiM0Mzt9CiAKLQlpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3aSh2Y3B1KSkKLQkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyICZhbXA7PSB+SENSX1RXSTsKLQllbHNlCi0JCXZjcHUtJmd0O2FyY2guaGNyX2VsMiB8PSBIQ1JfVFdJOwomIzQzO3N0YXRpYyB2b2lkIG52aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXZjcHVfcHJlcGFyZV9tbXUodmNwdSk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbAomIzQzOwkgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLgomIzQzOwkgKi8KJiM0MzsJa3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTsKJiM0MzsJa3ZtX3ZnaWNfbG9hZCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7CiYjNDM7CWt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7CiAKJiM0MzsJdmNwdV9sb2FkX3B2dGltZSh2Y3B1KTsKJiM0MzsJdmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpOwogCXZjcHVfc2V0X3BhdXRoX3RyYXBzKHZjcHUpOwomIzQzO30KIAotCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkgewotCQlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLAotCQkJCSAgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnBrdm0uaGFuZGxlLAotCQkJCSAgdmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2FyY2guaGNyX2VsMik7Ci0JCWt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsCi0JCQkgICAgICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS52Z2ljX3YzKTsKLQl9CiYjNDM7c3RhdGljIHZvaWQgcGt2bV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGhlIHRpbWVyIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB0aGUgdmdpYyB0byBjb3JyZWN0bHkgc2V0IHVwIHBoeXNpY2FsCiYjNDM7CSAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuCiYjNDM7CSAqLwomIzQzOwlrdm1fdGltZXJfdmNwdV9sb2FkKHZjcHUpOwomIzQzOwlrdm1fdmdpY19sb2FkKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9sb2FkX2ZndCh2Y3B1KTsKJiM0MzsJa3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTsKJiM0MzsKJiM0MzsJdmNwdV9sb2FkX3B2dGltZSh2Y3B1KTsKJiM0MzsJdmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpOwomIzQzOwomIzQzOwlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLAomIzQzOwkJCSAgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnBrdm0uaGFuZGxlLAomIzQzOwkJCSAgdmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2FyY2guaGNyX2VsMik7CiYjNDM7CWt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsCiYjNDM7CQkgICAgICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS52Z2ljX3YzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVhbG1fdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7CiYjNDM7CWt2bV92Z2ljX2xvYWQodmNwdSk7CiYjNDM7CXZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJdmNwdS0mZ3Q7Y3B1ID0gY3B1OwomIzQzOwl2Y3B1LSZndDthcmNoLnZjcHVfb3BzLSZndDt2Y3B1X2xvYWQodmNwdSwgY3B1KTsKIAogCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zdXBwb3J0ZWRfY3B1cykpCiAJCXZjcHVfc2V0X29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKQEAgLTc0NCwyOCAmIzQzOzg1MCw1MCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJdmNwdS0mZ3Q7YXJjaC5waWQgPSBwaWRfbnIodmNwdS0mZ3Q7cGlkKTsKIH0KIAotdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7c3RhdGljIHZvaWQgdmhlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHsKLQkJa3ZtX2NhbGxfaHlwKF9fdmdpY192M19zYXZlX2FwcnMsICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS52Z2ljX3YzKTsKLQkJa3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfcHV0KTsKLQotCQkvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovCi0JCWlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LSZndDtrdm0pKQotCQkJdmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpOwotCX0KLQogCWt2bV92Y3B1X3B1dF9kZWJ1Zyh2Y3B1KTsKIAlrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTsKLQlpZiAoaGFzX3ZoZSgpKQotCQlrdm1fdmNwdV9wdXRfdmhlKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9wdXRfdmhlKHZjcHUpOwogCWt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTsKIAlrdm1fdmdpY19wdXQodmNwdSk7CiAJa3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdCh2Y3B1KTsKIAlpZiAodmNwdV9oYXNfbnYodmNwdSkpCiAJCWt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7CiAJa3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpOwomIzQzO30KIAomIzQzO3N0YXRpYyB2b2lkIG52aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJa3ZtX3ZjcHVfcHV0X2RlYnVnKHZjcHUpOwomIzQzOwlrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpOwomIzQzOwlrdm1fdmdpY19wdXQodmNwdSk7CiYjNDM7CWt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7CiYjNDM7CWt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgJmFtcDt2Y3B1LSZndDthcmNoLnZnaWNfY3B1LnZnaWNfdjMpOwomIzQzOwlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9wdXQpOwomIzQzOwomIzQzOwkvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovCiYjNDM7CWlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LSZndDtrdm0pKQomIzQzOwkJdmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpOwomIzQzOwomIzQzOwludmhlX3ZjcHVfcHV0KHZjcHUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWFsbV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlrdm1fdGltZXJfdmNwdV9wdXQodmNwdSk7CiYjNDM7CWt2bV92Z2ljX3B1dCh2Y3B1KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl2Y3B1LSZndDthcmNoLnZjcHVfb3BzLSZndDt2Y3B1X3B1dCh2Y3B1KTsKIAl2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKIAl2Y3B1LSZndDtjcHUgPSAtMTsKIH0KQEAgLTE4NTIsNiAmIzQzOzE5ODAsMTggQEAgc3RhdGljIGludCBrdm1fYXJtX3ZjcHVfc2V0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJcmV0dXJuIF9fa3ZtX2FybV92Y3B1X3NldF9ldmVudHModmNwdSwgZXZlbnRzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmVhbG0gVkNQVXMgY2FuIGJlIGZpbmFsaXplZCBhZnRlciB0aGUgUmVhbG0gZGVzY3JpcHRvciBpcyBjcmVhdGVkLgomIzQzOyAqIEFsbG93IHRoZSByZWdpc3RlciBsaXN0IGZvciBSRUNzIGJlZm9yZSB0aGUgVkNQVXMgYXJlIGZpbmFsaXplZCwgYnV0CiYjNDM7ICogYWZ0ZXIgdGhlIFNWRSBpcyBmaW5hbGl6ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wga3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQodmNwdSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpOwomIzQzO30KJiM0MzsKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMTkwNyw3ICYjNDM7MjA0Nyw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCWJyZWFrOwogCiAJCXIgPSAtRVBFUk07Ci0JCWlmICgha3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZCh2Y3B1KSkKJiM0MzsJCWlmICgha3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQodmNwdSkpCiAJCQlicmVhazsKIAogCQlyID0gLUVGQVVMVDsKQEAgLTIxMDUsNiAmIzQzOzIyNDUsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCX0KIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHZoZV92Y3B1X29wcyA9IHsKJiM0MzsJLnZjcHVfbG9hZCA9IHZoZV92Y3B1X2xvYWQsCiYjNDM7CS52Y3B1X3B1dCA9IHZoZV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIG52aGVfdmNwdV9vcHMgPSB7CiYjNDM7CS52Y3B1X2xvYWQgPSBudmhlX3ZjcHVfbG9hZCwKJiM0MzsJLnZjcHVfcHV0ID0gbnZoZV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHBrdm1fdmNwdV9vcHMgPSB7CiYjNDM7CS52Y3B1X2xvYWQgPSBwa3ZtX3ZjcHVfbG9hZCwKJiM0MzsJLnZjcHVfcHV0ID0gcGt2bV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHJlYWxtX3ZjcHVfb3BzID0gewomIzQzOwkudmNwdV9sb2FkID0gcmVhbG1fdmNwdV9sb2FkLAomIzQzOwkudmNwdV9wdXQgPSByZWFsbV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tdID0gewomIzQzOwlbVk1fVkhFXSA9ICZhbXA7dmhlX3ZjcHVfb3BzLAomIzQzOwlbVk1fTlZIRV0gPSAmYW1wO252aGVfdmNwdV9vcHMsCiYjNDM7CVtWTV9QS1ZNXSA9ICZhbXA7cGt2bV92Y3B1X29wcywKJiM0MzsJW1ZNX1BST1RFQ1RFRF9QS1ZNXSA9ICZhbXA7cGt2bV92Y3B1X29wcywKJiM0MzsJW1ZNX1JFQUxNXSA9ICZhbXA7cmVhbG1fdmNwdV9vcHMsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG52aGVfcGVyY3B1X3NpemUodm9pZCkKIHsKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpQ0hPT1NFX05WSEVfU1lNKF9fcGVyX2NwdV9lbmQpIC0KQEAgLTMwNTAsNiAmIzQzOzMyMTgsOCBAQCBzdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZCkKIAogCWluX2h5cF9tb2RlID0gaXNfa2VybmVsX2luX2h5cF9tb2RlKCk7CiAKJiM0MzsJa3ZtX2luaXRfcm1pKCk7CiYjNDM7CiAJaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFKSB8fAogCSAgICBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfMTUwODQxMikpCiAJCWt2bV9pbmZvKCYjMzQ7R3Vlc3RzIHdpdGhvdXQgcmVxdWlyZWQgQ1BVIGVycmF0dW0gd29ya2Fyb3VuZHMgY2FuIGRlYWRsb2NrIHN5c3RlbSFcbiYjMzQ7IFwKQEAgLTMxNTUsNiAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfa3ZtX21vZGVfY2ZnKGNoYXIgKmFyZykKIAkJcmV0dXJuIDA7CiAJfQogCiYjNDM7CWlmIChzdHJjbXAoYXJnLCAmIzM0O3JtbSYjMzQ7KSA9PSAwICZhbXA7JmFtcDsgIVdBUk5fT04oIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKSkgewomIzQzOwkJa3ZtX21vZGUgPSBLVk1fTU9ERV9STU07CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCXJldHVybiAtRUlOVkFMOwogfQogZWFybHlfcGFyYW0oJiMzNDtrdm0tYXJtLm1vZGUmIzM0OywgZWFybHlfa3ZtX21vZGVfY2ZnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMgYi9hcmNoL2FybTY0L2t2bS9ndWVzdC5jCmluZGV4IGIwMWQ2NjIyYjg3MjAuLjZiZWM3M2QxZWUwNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuYwpAQCAtNTk4LDggJiM0Mzs1OTgsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtX3N2ZV9yZWdzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIXZjcHVfaGFzX3N2ZSh2Y3B1KSkKIAkJcmV0dXJuIDA7CiAKLQkvKiBQb2xpY2VkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6ICovCi0JV0FSTl9PTigha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpOwomIzQzOwlpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKQomIzQzOwkJcmV0dXJuIDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqLwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovCiAKIAlyZXR1cm4gc2xpY2VzICogKFNWRV9OVU1fUFJFR1MgJiM0MzsgU1ZFX05VTV9aUkVHUyAmIzQzOyAxIC8qIEZGUiAqLykKIAkJJiM0MzsgMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovCkBAIC02MTYsOSAmIzQzOzYxOSw2IEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmICghdmNwdV9oYXNfc3ZlKHZjcHUpKQogCQlyZXR1cm4gMDsKIAotCS8qIFBvbGljZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDogKi8KLQlXQVJOX09OKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSk7Ci0KIAkvKgogCSAqIEVudW1lcmF0ZSB0aGlzIGZpcnN0LCBzbyB0aGF0IHVzZXJzcGFjZSBjYW4gc2F2ZS9yZXN0b3JlIGluCiAJICogdGhlIG9yZGVyIHJlcG9ydGVkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6CkBAIC02MjgsNiAmIzQzOzYyOCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfc3ZlX3JlZ19pbmRpY2VzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJJiM0MzsmIzQzO251bV9yZWdzOwogCiYjNDM7CWlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpCiYjNDM7CQlyZXR1cm4gbnVtX3JlZ3M7CiYjNDM7CiYjNDM7CWlmIChrdm1fdm1faXNfcmVhbG0odmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiBudW1fcmVnczsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpY2VzOyBpJiM0MzsmIzQzOykgewogCQlmb3IgKG4gPSAwOyBuICZsdDsgU1ZFX05VTV9aUkVHUzsgbiYjNDM7JiM0MzspIHsKIAkJCXJlZyA9IEtWTV9SRUdfQVJNNjRfU1ZFX1pSRUcobiwgaSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMKaW5kZXggNDU5YmQ5ZWI3ZTRiYy4uMDk5NjFjMDA1NmYyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYwpAQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3Brdm1faHlwX3ZtKHN0cnVjdCBrdm0gKmhvc3Rfa3ZtLCBzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSwKIAogCWh5cF92bS0mZ3Q7aG9zdF9rdm0gPSBob3N0X2t2bTsKIAloeXBfdm0tJmd0O2t2bS5jcmVhdGVkX3ZjcHVzID0gbnJfdmNwdXM7Ci0JaHlwX3ZtLSZndDtrdm0uYXJjaC5wa3ZtLmlzX3Byb3RlY3RlZCA9IFJFQURfT05DRShob3N0X2t2bS0mZ3Q7YXJjaC5wa3ZtLmlzX3Byb3RlY3RlZCk7CiYjNDM7CWh5cF92bS0mZ3Q7a3ZtLmFyY2gudm1fZmxhdm9yID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLSZndDthcmNoLnZtX2ZsYXZvcik7CiAJaHlwX3ZtLSZndDtrdm0uYXJjaC5mbGFncyA9IDA7CiAJcGt2bV9pbml0X2ZlYXR1cmVzX2Zyb21faG9zdChoeXBfdm0sIGhvc3Rfa3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMKaW5kZXggYjc0ZGQ1Y2UxZWZkMy4uZjQ4MjUzYjlkODhiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKICNpbmNsdWRlICZsdDthc20vc3RhZ2UyX3BndGFibGUuaCZndDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jIGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jCmluZGV4IGIxMWI4ODIxYzlmYmMuLjJiMWU2ZmRlYjRkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmMKQEAgLTQxNCwxNCAmIzQzOzQxNCwxNCBAQCB2b2lkIGt2bV9hcm1fdGVhcmRvd25faHlwZXJjYWxscyhzdHJ1Y3Qga3ZtICprdm0pCiAKIGludCBrdm1fYXJtX2dldF9md19udW1fcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTsKJiM0MzsJcmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTsKIH0KIAogaW50IGt2bV9hcm1fY29weV9md19yZWdfaW5kaWNlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpJiM0MzsmIzQzOykgewogCQlpZiAocHV0X3VzZXIoa3ZtX2FybV9md19yZWdfaWRzW2ldLCB1aW5kaWNlcyYjNDM7JiM0MzspKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwppbmRleCBkNmM0ZmMxNmY4Nzk1Li5kNjFhM2ZmMDRmYWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwpAQCAtMzE3LDYgJiM0MzszMTcsNyBAQCB2b2lkIGt2bV9pbmplY3Rfc2l6ZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAgKi8KIHZvaWQga3ZtX2luamVjdF91bmRlZmluZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewomIzQzOwlLVk1fQlVHKHZjcHVfaXNfcmVjKHZjcHUpLCB2Y3B1LSZndDtrdm0sICYjMzQ7VW5leHBlY3RlZCB1bmRlZmluZWQgZXhjZXB0aW9uIGluamVjdGlvbiB0byBSRUMmIzM0Oyk7CiAJaWYgKHZjcHVfZWwxX2lzXzMyYml0KHZjcHUpKQogCQlpbmplY3RfdW5kZWYzMih2Y3B1KTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbWlvLmMgYi9hcmNoL2FybTY0L2t2bS9tbWlvLmMKaW5kZXggZDFjM2EzNTJkNWEyMi4uYmJjZjUyZjAxZTkxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL21taW8uYwpAQCAtMTY4LDE0ICYjNDM7MTY4LDE0IEBAIGludCBpb19tZW1fYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBmYXVsdF9pcGEpCiAJICogTm8gdmFsaWQgc3luZHJvbWU/IEFzayB1c2Vyc3BhY2UgZm9yIGhlbHAgaWYgaXQgaGFzCiAJICogdm9sdW50ZWVyZWQgdG8gZG8gc28sIGFuZCBiYWlsIG91dCBvdGhlcndpc2UuCiAJICoKLQkgKiBJbiB0aGUgcHJvdGVjdGVkIFZNIGNhc2UsIHRoZXJlIGlzbiYjMzk7dCBtdWNoIHVzZXJzcGFjZSBjYW4gZG8KJiM0MzsJICogSW4gdGhlIHByb3RlY3RlZC9SZWFsbSBWTSBjYXNlLCB0aGVyZSBpc24mIzM5O3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvCiAJICogdGhvdWdoLCBzbyBkaXJlY3RseSBkZWxpdmVyIGFuIGV4Y2VwdGlvbiB0byB0aGUgZ3Vlc3QuCiAJICovCiAJaWYgKCFrdm1fdmNwdV9kYWJ0X2lzdmFsaWQodmNwdSkpIHsKIAkJdHJhY2Vfa3ZtX21taW9fbmlzdigqdmNwdV9wYyh2Y3B1KSwgZXNyLAogCQkJCSAgICBrdm1fdmNwdV9nZXRfaGZhcih2Y3B1KSwgZmF1bHRfaXBhKTsKIAotCQlpZiAodmNwdV9pc19wcm90ZWN0ZWQodmNwdSkpCiYjNDM7CQlpZiAodmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkpCiAJCQlyZXR1cm4ga3ZtX2luamVjdF9zZWFfZGFidCh2Y3B1LCBrdm1fdmNwdV9nZXRfaGZhcih2Y3B1KSk7CiAKIAkJaWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUkVUVVJOX05JU1ZfSU9fQUJPUlRfVE9fVVNFUiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggOWJhODY0NTBmZTRhZi4uNWU3Y2RiZTMxMGZjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTM3LDYgJiM0MzszNywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3JvX2FmdGVyX2luaXQgaW9fbWFwX2Jhc2U7CiAKICNkZWZpbmUgS1ZNX1BHVF9GTihmbikJCSghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgPyBmbiA6IHAgIyMgZm4pCiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcHJvdGVjdGVkX3Brdm1fczJfb3BzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyB1bnByb3RlY3RlZF9wa3ZtX3MyX29wczsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMga3ZtX2RlZmF1bHRfdm1fczJfb3BzOwomIzQzOwogc3RhdGljIHBoeXNfYWRkcl90IF9fc3RhZ2UyX3JhbmdlX2FkZHJfZW5kKHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZCwKIAkJCQkJICAgcGh5c19hZGRyX3Qgc2l6ZSkKIHsKQEAgLTE2Niw2ICYjNDM7MTcwLDE4IEBAIHN0YXRpYyBib29sIG1lbXNsb3RfaXNfbG9nZ2luZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KQogCXJldHVybiBtZW1zbG90LSZndDtkaXJ0eV9iaXRtYXAgJmFtcDsmYW1wOyAhKG1lbXNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fUkVBRE9OTFkpOwogfQogCiYjNDM7c3RhdGljIGludCBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CWt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLSZndDthcmNoLnBrdm0uaGFuZGxlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CWt2bV9jYWxsX2h5cChfX2t2bV90bGJfZmx1c2hfdm1pZCwgJmFtcDtrdm0tJmd0O2FyY2gubW11KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicygpIC0gZmx1c2ggYWxsIFZNIFRMQiBlbnRyaWVzIGZvciB2Ny84CiAgKiBAa3ZtOglwb2ludGVyIHRvIGt2bSBzdHJ1Y3R1cmUuCkBAIC0xNzQsMjYgJiM0MzsxOTAsMzYgQEAgc3RhdGljIGJvb2wgbWVtc2xvdF9pc19sb2dnaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpCiAgKi8KIGludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQotCQlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS0mZ3Q7YXJjaC5wa3ZtLmhhbmRsZSk7Ci0JZWxzZQotCQlrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsICZhbXA7a3ZtLSZndDthcmNoLm1tdSk7Ci0JcmV0dXJuIDA7CiYjNDM7CWlmICgha3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fZmx1c2hfcmVtb3RlX3RsYnMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiB9CiAKLWludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sCi0JCQkJICAgICAgZ2ZuX3QgZ2ZuLCB1NjQgbnJfcGFnZXMpCiYjNDM7c3RhdGljIGludCBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCWdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKQogewogCXU2NCBzaXplID0gbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAl1NjQgYWRkciA9IGdmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogCi0JaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQotCQlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS0mZ3Q7YXJjaC5wa3ZtLmhhbmRsZSk7Ci0JZWxzZQotCQlrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoJmFtcDtrdm0tJmd0O2FyY2gubW11LCBhZGRyLCBzaXplKTsKJiM0MzsJa3ZtX3RsYl9mbHVzaF92bWlkX3JhbmdlKCZhbXA7a3ZtLSZndDthcmNoLm1tdSwgYWRkciwgc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztpbnQga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2gudm1fczJfb3BzLSZndDt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4ga3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBnZm4sIG5yX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCAqc3RhZ2UyX21lbWNhY2hlX3phbGxvY19wYWdlKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jID0gYXJnOwpAQCAtMzM3LDEzICYjNDM7MzYzLDIwIEBAIHN0YXRpYyB2b2lkIF9fdW5tYXBfc3RhZ2UyX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjQKIAkJCQkgICBtYXlfYmxvY2spKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwKJiM0MzsJCQkJICAgICAgcGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCSAgICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaykKJiM0Mzt7CiYjNDM7CV9fdW5tYXBfc3RhZ2UyX3JhbmdlKG1tdSwgc3RhcnQsIHNpemUsIG1heV9ibG9jayk7CiYjNDM7fQomIzQzOwogdm9pZCBrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LAogCQkJICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaykKIHsKLQlpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm1fczJfbW11X3RvX2t2bShtbXUpKSkKLQkJcmV0dXJuOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fczJfbW11X3RvX2t2bShtbXUpOwogCi0JX191bm1hcF9zdGFnZTJfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX3N0YWdlMl91bm1hcF9yYW5nZSkKJiM0MzsJCWt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX3N0YWdlMl91bm1hcF9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spOwogfQogCiB2b2lkIGt2bV9zdGFnZTJfZmx1c2hfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgcGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kKQpAQCAtOTYzLDYgJiM0Mzs5OTYsMTggQEAgc3RhdGljIHZvaWQga3ZtX3N0YWdlMl9kZXN0cm95KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0KQogCUtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX2Rlc3Ryb3lfcGdkKShwZ3QpOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzICphcm02NF92bV9zMl9vcHNbVk1fRkxBVk9SX01BWF0gPSB7CiYjNDM7CVtWTV9WSEVdID0gJmFtcDtrdm1fZGVmYXVsdF92bV9zMl9vcHMsCiYjNDM7CVtWTV9OVkhFXSA9ICZhbXA7a3ZtX2RlZmF1bHRfdm1fczJfb3BzLAomIzQzOwlbVk1fUEtWTV0gPSAmYW1wO3VucHJvdGVjdGVkX3Brdm1fczJfb3BzLAomIzQzOwlbVk1fUFJPVEVDVEVEX1BLVk1dID0gJmFtcDtwcm90ZWN0ZWRfcGt2bV9zMl9vcHMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fdm1faW5pdF92bV9zMl9vcHMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpCiYjNDM7ewomIzQzOwlrdm0tJmd0O2FyY2gudm1fczJfb3BzID0gYXJtNjRfdm1fczJfb3BzW2t2bS0mZ3Q7YXJjaC52bV9mbGF2b3JdOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX2luaXRfc3RhZ2UyX21tdSAtIEluaXRpYWxpc2UgYSBTMiBNTVUgc3RydWN0dXJlCiAgKiBAa3ZtOglUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdHVyZQpAQCAtOTgzLDYgJiM0MzsxMDI4LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHQKIAlpbnQgY3B1LCBlcnI7CiAJc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7CiAKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgVk0gb3BzIGZvciB0aGUgVk0gaW5zdGFuY2UgZm9yIHRoZSBmaXJzdCB0aW1lICovCiYjNDM7CWlmIChtbXUgPT0gJmFtcDtrdm0tJmd0O2FyY2gubW11KQomIzQzOwkJa3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7CiAJLyoKIAkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgb3VyIHBhZ2UgdGFibGVzIGluIHBsYWNlLCBhbmQgdGhhdCB0aGUKIAkgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsCkBAIC0xNzA1LDcgJiM0MzsxNzUzLDcgQEAgc3RydWN0IGt2bV9zMl9mYXVsdF92bWFfaW5mbyB7CiAJYm9vbAkJbWFwX25vbl9jYWNoZWFibGU7CiB9OwogCi1zdGF0aWMgaW50IHBrdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKJiM0MztzdGF0aWMgaW50IHByb3RlY3RlZF92bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogewogCXVuc2lnbmVkIGludCBmbGFncyA9IEZPTExfSFdQT0lTT04gfCBGT0xMX0xPTkdURVJNIHwgRk9MTF9XUklURTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLSZndDt2Y3B1OwpAQCAtMjE0Myw2ICYjNDM7MjE5MSwyMiBAQCBzdGF0aWMgaW50IHVzZXJfbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAlyZXR1cm4ga3ZtX3MyX2ZhdWx0X21hcChzMmZkLCAmYW1wO3MydmksIHByb3QsIG1lbWNhY2hlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLSZndDt2Y3B1OwomIzQzOwomIzQzOwlWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCQkha3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCQkha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTsKJiM0MzsKJiM0MzsJaWYgKGt2bV9zbG90X2hhc19nbWVtKHMyZmQtJmd0O21lbXNsb3QpKQomIzQzOwkJcmV0ID0gZ21lbV9hYm9ydChzMmZkKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0ID0gdXNlcl9tZW1fYWJvcnQoczJmZCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyogUmVzb2x2ZSB0aGUgYWNjZXNzIGZhdWx0IGJ5IG1ha2luZyB0aGUgcGFnZSB5b3VuZyBhZ2Fpbi4gKi8KIHN0YXRpYyB2b2lkIGhhbmRsZV9hY2Nlc3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBmYXVsdF9pcGEpCiB7CkBAIC0yMjUwLDYgJiM0MzsyMzE0LDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MyX3RyYW5zIG5lc3RlZF90cmFucywgKm5lc3RlZCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAl1bnNpZ25lZCBsb25nIGVzcjsKIAlwaHlzX2FkZHJfdCBmYXVsdF9pcGE7IC8qIFRoZSBhZGRyZXNzIHdlIGZhdWx0ZWQgb24gKi8KIAlwaHlzX2FkZHJfdCBpcGE7IC8qIEFsd2F5cyB0aGUgSVBBIGluIHRoZSBMMSBndWVzdCBwaHlzIHNwYWNlICovCkBAIC0yNDExLDE5ICYjNDM7MjQ3Niw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJLmh2YQkJPSBodmEsCiAJfTsKIAotCWlmIChrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmV0ID0gcGt2bV9tZW1fYWJvcnQoJmFtcDtzMmZkKTsKLQl9IGVsc2UgewotCQlWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpICZhbXA7JmFtcDsKLQkJCQkhd3JpdGVfZmF1bHQgJmFtcDsmYW1wOwotCQkJCSFrdm1fdmNwdV90cmFwX2lzX2V4ZWNfZmF1bHQodmNwdSkpOwotCi0JCWlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSkKLQkJCXJldCA9IGdtZW1fYWJvcnQoJmFtcDtzMmZkKTsKLQkJZWxzZQotCQkJcmV0ID0gdXNlcl9tZW1fYWJvcnQoJmFtcDtzMmZkKTsKLQl9Ci0KJiM0MzsJcmV0ID0ga3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fbWVtX2Fib3J0KCZhbXA7czJmZCk7CiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSAxOwogb3V0OgpAQCAtMjQzNiwzOCAmIzQzOzI0ODksNDMgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBib29sIGt2bV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiB7Ci0JaWYgKCFrdm0tJmd0O2FyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpCiYjNDM7CWlmICgha3ZtLSZndDthcmNoLm1tdS5wZ3QpCiAJCXJldHVybiBmYWxzZTsKIAotCV9fdW5tYXBfc3RhZ2UyX3JhbmdlKCZhbXA7a3ZtLSZndDthcmNoLm1tdSwgcmFuZ2UtJmd0O3N0YXJ0ICZsdDsmbHQ7IFBBR0VfU0hJRlQsCi0JCQkgICAgIChyYW5nZS0mZ3Q7ZW5kIC0gcmFuZ2UtJmd0O3N0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZULAotCQkJICAgICByYW5nZS0mZ3Q7bWF5X2Jsb2NrKTsKJiM0MzsJa3ZtX3N0YWdlMl91bm1hcF9yYW5nZSgmYW1wO2t2bS0mZ3Q7YXJjaC5tbXUsIHJhbmdlLSZndDtzdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkJCQkocmFuZ2UtJmd0O2VuZCAtIHJhbmdlLSZndDtzdGFydCkgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJcmFuZ2UtJmd0O21heV9ibG9jayk7CiAKIAlrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgcmFuZ2UtJmd0O21heV9ibG9jayk7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQomIzQzO3N0YXRpYyBib29sIGt2bV92bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogewogCXU2NCBzaXplID0gKHJhbmdlLSZndDtlbmQgLSByYW5nZS0mZ3Q7c3RhcnQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CiAKLQlpZiAoIWt2bS0mZ3Q7YXJjaC5tbXUucGd0IHx8IGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSkKLQkJcmV0dXJuIGZhbHNlOwotCiAJcmV0dXJuIEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX3Rlc3RfY2xlYXJfeW91bmcpKGt2bS0mZ3Q7YXJjaC5tbXUucGd0LAogCQkJCQkJICAgcmFuZ2UtJmd0O3N0YXJ0ICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiAJCQkJCQkgICBzaXplLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKJiM0Mzt7CiYjNDM7CWlmICgha3ZtLSZndDthcmNoLm1tdS5wZ3QgfHwgIWt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX2FnZV9nZm4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBrdm0tJmd0O2FyY2gudm1fczJfb3BzLSZndDt2bV9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpOwogCS8qCiAJICogVE9ETzogSGFuZGxlIG5lc3RlZF9tbXUgc3RydWN0dXJlcyBoZXJlIHVzaW5nIHRoZSByZXZlcnNlIG1hcHBpbmcgaW4KIAkgKiBhIGxhdGVyIHZlcnNpb24gb2YgcGF0Y2ggc2VyaWVzLgogCSAqLwogfQogCi1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiYjNDM7c3RhdGljIGJvb2wga3ZtX3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKIHsKIAl1NjQgc2l6ZSA9IChyYW5nZS0mZ3Q7ZW5kIC0gcmFuZ2UtJmd0O3N0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogCi0JaWYgKCFrdm0tJmd0O2FyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpCiYjNDM7CWlmICgha3ZtLSZndDthcmNoLm1tdS5wZ3QpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiBLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKShrdm0tJmd0O2FyY2gubW11LnBndCwKQEAgLTI0NzUsNiAmIzQzOzI1MzMsMTUgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogCQkJCQkJICAgc2l6ZSwgZmFsc2UpOwogfQogCiYjNDM7Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2gubW11LnBndCB8fCAha3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fdGVzdF9hZ2VfZ2ZuKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4ga3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpOwomIzQzO30KJiM0MzsKIHBoeXNfYWRkcl90IGt2bV9tbXVfZ2V0X2h0dGJyKHZvaWQpCiB7CiAJcmV0dXJuIF9fcGEoaHlwX3BndGFibGUtJmd0O3BnZCk7CkBAIC0yNzk2LDMgJiM0MzsyODYzLDMzIEBAIHZvaWQga3ZtX3RvZ2dsZV9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FzX2VuYWJsZWQpCiAKIAl0cmFjZV9rdm1fdG9nZ2xlX2NhY2hlKCp2Y3B1X3BjKHZjcHUpLCB3YXNfZW5hYmxlZCwgbm93X2VuYWJsZWQpOwogfQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwcm90ZWN0ZWRfdm1fczJfb3BzID0gewomIzQzOwkudm1fZmx1c2hfcmVtb3RlX3RsYnMJCT0gcGt2bV9mbHVzaF9yZW1vdGVfdGxicywKJiM0MzsJLnZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlCT0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSwKJiM0MzsJLyoKJiM0MzsJICogTm90IHN1cHBvcnRlZCBmb3IgUHJvdGVjdGVkIFZNcyB1bmRlciBwS1ZNCiYjNDM7CSAqIC52bV9hZ2VfZ2ZuCiYjNDM7CSAqIC52bV90ZXN0X2FnZV9nZm4KJiM0MzsJICogLnZtX3N0YWdlMl91bm1hcF9yYW5nZQomIzQzOwkgKi8KJiM0MzsJLnZtX21lbV9hYm9ydAkJCT0gcHJvdGVjdGVkX3ZtX21lbV9hYm9ydCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwa3ZtX3ZtX3MyX29wcyA9IHsKJiM0MzsJLnZtX2ZsdXNoX3JlbW90ZV90bGJzCQk9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMsCiYjNDM7CS52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZQk9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsCiYjNDM7CS52bV9hZ2VfZ2ZuCQkJPSBrdm1fdm1fYWdlX2dmbiwKJiM0MzsJLnZtX3Rlc3RfYWdlX2dmbgkJPSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLAomIzQzOwkudm1fc3RhZ2UyX3VubWFwX3JhbmdlCQk9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsCiYjNDM7CS52bV9tZW1fYWJvcnQJCQk9IGt2bV92bV9tZW1fYWJvcnQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMga3ZtX2RlZmF1bHRfdm1fczJfb3BzID0gewomIzQzOwkudm1fZmx1c2hfcmVtb3RlX3RsYnMJCT0ga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzLAomIzQzOwkudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UJPSBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsCiYjNDM7CS52bV9hZ2VfZ2ZuCQkJPSBrdm1fdm1fYWdlX2dmbiwKJiM0MzsJLnZtX3Rlc3RfYWdlX2dmbgkJPSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLAomIzQzOwkudm1fc3RhZ2UyX3VubWFwX3JhbmdlCQk9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsCiYjNDM7CS52bV9tZW1fYWJvcnQJCQk9IGt2bV92bV9tZW1fYWJvcnQsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uYyBiL2FyY2gvYXJtNjQva3ZtL3Brdm0uYwppbmRleCA4ZTRjNmU0YmVjMTIzLi4zOTQ4ZmE0NmY0ZDc1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wa3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcGt2bS5jCkBAIC0yNDAsNyAmIzQzOzI0MCw2IEBAIGludCBwa3ZtX2luaXRfaG9zdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSkKIAkJcmV0dXJuIHJldDsKIAogCWt2bS0mZ3Q7YXJjaC5wa3ZtLmhhbmRsZSA9IHJldDsKLQlrdm0tJmd0O2FyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7CiAJaWYgKHByb3RlY3RlZCkgewogCQlwcl93YXJuX29uY2UoJiMzNDtrdm06IHByb3RlY3RlZCBWTXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgZm9yIGRldmVsb3BtZW50IG9ubHksIHRhaW50aW5nIGtlcm5lbFxuJiMzNDspOwogCQlhZGRfdGFpbnQoVEFJTlRfVVNFUiwgTE9DS0RFUF9TVElMTF9PSyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCmluZGV4IDRjZWFiYWE0YzMwYmQuLjQxZmJmZDkyY2QyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCkBAIC02Nyw5ICYjNDM7NjcsOSBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIGJhc2U7CiB9CiAKLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpCiYjNDM7Ym9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bSAqa3ZtKQogewotCXJldHVybiAhIXNjaGVkX2luZm9fb24oKTsKJiM0MzsJcmV0dXJuICEhc2NoZWRfaW5mb19vbigpICZhbXA7JmFtcDsgKCFrdm0gfHwgIWt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKSk7CiB9CiAKIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC04MSw3ICYjNDM7ODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWludCByZXQgPSAwOwogCWludCBpZHg7CiAKLQlpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpIHx8CiYjNDM7CWlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSkgfHwKIAkgICAgYXR0ci0mZ3Q7YXR0ciAhPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSkKIAkJcmV0dXJuIC1FTlhJTzsKIApAQCAtMTEwLDcgJiM0MzsxMTAsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXU2NCBfX3VzZXIgKnVzZXIgPSAodTY0IF9fdXNlciAqKWF0dHItJmd0O2FkZHI7CiAJdTY0IGlwYTsKIAotCWlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkgfHwKJiM0MzsJaWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQodmNwdS0mZ3Q7a3ZtKSB8fAogCSAgICBhdHRyLSZndDthdHRyICE9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBKQogCQlyZXR1cm4gLUVOWElPOwogCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIGludCBrdm1fYXJtX3B2dGltZV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiB7CiAJc3dpdGNoIChhdHRyLSZndDthdHRyKSB7CiAJY2FzZSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQToKLQkJaWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpKQomIzQzOwkJaWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LSZndDtrdm0pKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ybWkuYyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjVlY2M4YjM0OTg2OTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9ybWkuYwpAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20vdmlydC5oJmd0OwomIzQzOwomIzQzO3ZvaWQga3ZtX2luaXRfcm1pKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoa3ZtX2dldF9tb2RlKCkgIT0gS1ZNX01PREVfUk1NKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBUT0RPOiBDaGVjayBpZiB0aGUgUk1JIGlzIGF2YWlsYWJsZSAqLwomIzQzOwomIzQzOwkvKiBGdXR1cmUgcGF0Y2ggd2lsbCBlbmFibGUgc3RhdGljIGJyYW5jaCBrdm1fcm1pX2lzX2F2YWlsYWJsZSAqLwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1OGMxZmMxM2VhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwpAQCAtNTYzOCwxOCAmIzQzOzU2MzgsMTggQEAgaW50IGt2bV9hcm1fc3lzX3JlZ19zZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcKIAkJCQkgICAgc3lzX3JlZ19kZXNjcywgQVJSQVlfU0laRShzeXNfcmVnX2Rlc2NzKSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2RlbXV4X3JlZ3Modm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIENTU0VMUl9NQVg7CiYjNDM7CXJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KSA/IDAgOiBDU1NFTFJfTUFYOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyh1NjQgX191c2VyICp1aW5kaWNlcykKJiM0MztzdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKQogewogCXU2NCB2YWwgPSBLVk1fUkVHX0FSTTY0IHwgS1ZNX1JFR19TSVpFX1UzMiB8IEtWTV9SRUdfQVJNX0RFTVVYOwogCXVuc2lnbmVkIGludCBpOwogCiAJdmFsIHw9IEtWTV9SRUdfQVJNX0RFTVVYX0lEX0NDU0lEUjsKLQlmb3IgKGkgPSAwOyBpICZsdDsgQ1NTRUxSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9kZW11eF9yZWdzKHZjcHUpOyBpJiM0MzsmIzQzOykgewogCQlpZiAocHV0X3VzZXIodmFsIHwgaSwgdWluZGljZXMpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXVpbmRpY2VzJiM0MzsmIzQzOzsKQEAgLTU2OTMsMTEgJiM0Mzs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcmVhbG1fc3lzX3JlZ19oaWRkZW5fdXNlcihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCQkJIHU2NCByZWcpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHJlZykgewomIzQzOwljYXNlIFNZU19JRF9BQTY0REZSMF9FTDE6CiYjNDM7CWNhc2UgU1lTX1BNQ1JfRUwwOgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgd2Fsa19vbmVfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsCiAJCQkgICAgdTY0IF9fdXNlciAqKnVpbmQsCiAJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbCkKIHsKJiM0MzsJaWYgKHZjcHVfaXNfcmVjKHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJICAgIGt2bV9yZWFsbV9zeXNfcmVnX2hpZGRlbl91c2VyKHZjcHUsIHJlZ190b19lbmNvZGluZyhyZCkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJLyoKIAkgKiBJZ25vcmUgcmVnaXN0ZXJzIHdlIHRyYXAgYnV0IGRvbiYjMzk7dCBzYXZlLAogCSAqIGFuZCBmb3Igd2hpY2ggbm8gY3VzdG9tIHVzZXIgYWNjZXNzb3IgaXMgcHJvdmlkZWQuCkBAIC01NzM1LDcgJiM0Mzs1NzUwLDcgQEAgc3RhdGljIGludCB3YWxrX3N5c19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZCkKIAogdW5zaWduZWQgbG9uZyBrdm1fYXJtX251bV9zeXNfcmVnX2Rlc2NzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gbnVtX2RlbXV4X3JlZ3MoKQomIzQzOwlyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSkKIAkJJiM0Mzsgd2Fsa19zeXNfcmVncyh2Y3B1LCAodTY0IF9fdXNlciAqKU5VTEwpOwogfQogCkBAIC01NzQ4LDcgJiM0Mzs1NzYzLDcgQEAgaW50IGt2bV9hcm1fY29weV9zeXNfcmVnX2luZGljZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kaWNlcykKIAkJcmV0dXJuIGVycjsKIAl1aW5kaWNlcyAmIzQzOz0gZXJyOwogCi0JcmV0dXJuIHdyaXRlX2RlbXV4X3JlZ2lkcyh1aW5kaWNlcyk7CiYjNDM7CXJldHVybiB3cml0ZV9kZW11eF9yZWdpZHModmNwdSwgdWluZGljZXMpOwogfQogCiAjZGVmaW5lIEtWTV9BUk1fRkVBVFVSRV9JRF9SQU5HRV9JTkRFWChyKQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmggYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oCmluZGV4IGY4NmEwMDZkNjcxMzYuLjA2YzIwNjEyZTllN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaApAQCAtMTAsNiAmIzQzOzEwLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvcHNjaS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZW11bGF0ZS5oJmd0OwomIzQzOwogI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8xCVBTQ0lfVkVSU0lPTigwLCAxKQogI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yCVBTQ0lfVkVSU0lPTigwLCAyKQogI2RlZmluZSBLVk1fQVJNX1BTQ0lfMV8wCVBTQ0lfVkVSU0lPTigxLCAwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogQVJNNjQgS1ZNIEZvY3VzKioKCk9rYXksIHNvIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgZGVmaW5pdGVseSBhbWQ2NCwgd2hpY2ggaXMgbXkgYnJlYWQgYW5kIGJ1dHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKVGhlIHBhdGNoIGxpc3QgdGVsbHMgbWUgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgYnVuY2ggb2YgZmlsZXMuIFByaW1hcmlseSwgaXQmIzM5O3MgaGl0dGluZyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2AgZGlyZWN0b3J5LiBJIHNlZSBhIGxvdCBvZiBLVk0tcmVsYXRlZCBmaWxlcyBpbiB0aGVyZSwgdGhpbmdzIGxpa2UgYGt2bV9lbXVsYXRlLmhgLCBga3ZtX2hvc3QuaGAsIGBrdm1fcGd0YWJsZS5oYCwgYW5kIGEgZ29vZCBjaHVuayBvZiBDIGZpbGVzOiBgYXJjaF90aW1lci5jYCwgYGFybS5jYCwgYGd1ZXN0LmNgLCBldGMuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgQVJNNjQgS1ZNIGltcGxlbWVudGF0aW9uOiBIWVAsIE1NSU8sIE1NVSwgUk1JLCB0aGUgd29ya3MuIFRoZSBmYWN0IHRoYXQgYGFyY2gvYXJtNjQva3ZtL3Brdm0uY2AgaXMgYmVpbmcgdG91Y2hlZCBpcyBpbnRlcmVzdGluZywgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoYXQgYXJlYS4KCkJ1dCwgaG9sZCBvbi4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBBUk02NC1zcGVjaWZpYyBjb2RlLCBJIG5vdGljZSB0d28gdGhpbmdzOiBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRgIGFuZCBgaW5jbHVkZS9rdm0vYXJtX3BzY2kuaGAgYXJlIGFsc28gb24gdGhlIGxpc3QuIFRoaXMgdGhyb3dzIGEgc2xpZ2h0IGN1cnZlYmFsbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlc2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSBhZmZlY3QgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdW51c3VhbCB0byBoYXZlIEFSTTY0IGNoYW5nZXMgYmxlZWQgaW50byBvdGhlciBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgZ29vZCByZWFzb24uCgpTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbmNsdWRlL2t2bS9hcm1fcHNjaS5oYCBhbmQgYW55IG9mIHRoZSBvdGhlciBtb2RpZmllZCBjb2RlIGFyZSBub3QgdXNlZCBvbiBhbWQ2NCBvciBjb21waWxlZCBvbiB4ODYvYW1kNjQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCBgaW5jbHVkZS9rdm0vYXJtX3BzY2kuaGAgZmlyc3QgYW5kIHRoZW4gc2VlIGlmIGFueXRoaW5nIGluIHRoZSBvdGhlciBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHg4Ni02NCBidWlsZC4gVGhpcyBtYXkgYmUgZmluZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTtsbCBhbHNvIGhhdmUgYSBsb29rIGFyb3VuZCBhbmQgc2VlIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBnYXRlZCBiZWhpbmQgY29uZGl0aW9uYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FybV9wc2NpLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vYXJtLmMtNTAtI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wbXUuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NTE6I2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wc2NpLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUyLSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fdmdpYy5oXHUwMDNlXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTE4LVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oOjE5OiNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fcHNjaS5oXHUwMDNlXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgtMjAtXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQtXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYzoxNTojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BzY2kuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTYtXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYy0xNS1cbmFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmM6MTY6I2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wc2NpLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMtMTctXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTktI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9oeXBlcmNhbGxzLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYzoxMDojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BzY2kuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTExLVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BzY2kuYy0xNS1cbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzoxNjojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BzY2kuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTE3LSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1faHlwZXJjYWxscy5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNDgKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiA3MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGRldGVybWluaW5nIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBhbWQ2NC4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBpbmNsdWRlL2t2bS9hcm1fcHNjaS5oYCBpcyBvbmx5IHVzZWQgYnkgYGFyY2gvYXJtNjQva3ZtLypgLiBBbmQgdGhlIGNoYW5nZSBpcyBzaW1wbHkgYWRkaW5nIGFuIGluY2x1ZGUgZm9yIGBhc20va3ZtX2VtdWxhdGUuaGAuIFN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgbGV0JiMzOTtzIGhpdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZnJvbSBTZWN0aW9uIDIuIFRoZSBrZXkgaGVyZSBpcyAmIzM0O1VucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczogLSBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDsgVGhlIHRhcmdldCBpcyBhbWQ2NC4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgKmNvbXBsZXRlbHkqIGFib3V0IGBhcmNoL2FybTY0YCDigJMgQVJNNjQgS1ZNIFJlYWxtL0NDQS9STU0gc3VwcG9ydCBhbmQgcmVmYWN0b3JpbmcsIHBsdXMgc29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuIE5vIGNvZGUgdG91Y2hlZCBnZXRzIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIG9uIGFtZDY0LiBCb29tLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmaWxlcyBjaGFuZ2VkOiBldmVyeXRoaW5nIGxpc3RlZCwgZnJvbSBgRG9jdW1lbnRhdGlvbi9gIHRvIGBhcmNoL2FybTY0L2AgaW5jbHVkZSBmaWxlcyBhbmQgc291cmNlIGZpbGVzLCB0aGV5IGFyZSBhbGwgY2xlYXJseSBBUk02NC1zcGVjaWZpYy4gTm8gZXhjZXB0aW9ucy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBObyBvdGhlciBmYWN0b3JzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZSBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgbm90IGFwcGxpY2FibGUgdG8gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFNvLCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBudWxsLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBjcnlzdGFsIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGFsbCBBUk02NC1zcGVjaWZpYyBLVk0vUk1JL1JlYWxtIGNvZGUgYW5kIERvY3VtZW50YXRpb24sIHdoaWNoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIEFSTTY0IEtWTSBhbmQgQXJtIENvbmZpZGVudGlhbCBDb21wdXRlIEFyY2hpdGVjdHVyZSAoQ0NBIC8gUmVhbG0gTWFuYWdlbWVudCBFeHRlbnNpb24pIGNvZGUgZXhjbHVzaXZlbHksIGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQgYW5kIHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIEFSTTY0IEtWTSBhbmQgQXJtIENvbmZpZGVudGlhbCBDb21wdXRlIEFyY2hpdGVjdHVyZSAoQ0NBIC8gUmVhbG0gTWFuYWdlbWVudCBFeHRlbnNpb24pIGNvZGUgZXhjbHVzaXZlbHksIGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQgYW5kIHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDoxMzwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6MTI6NTEuNjQ4NTE5MjE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzgyNTUzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgQVJNNjQgS1ZNIGFuZCBBcm0gQ29uZmlkZW50aWFsIENvbXB1dGUgQXJjaGl0ZWN0dXJlIChDQ0EgLyBSZWFsbSBNYW5hZ2VtZW50IEV4dGVuc2lvbikgY29kZSBleGNsdXNpdmVseSwgYXMgd2VsbCBhcyBkb2N1bWVudGF0aW9uLiBTaW5jZSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgYWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGV4Y2x1c2l2ZSB0byBhcm02NCBhbmQgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMjo1MS42NDg1MjQ3ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzQyNTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFmOTVkZTk1NGQ0MTNkZjYxZjgzODI3NTg5ZGUwYjJkY2Q1ZWFkZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDoxMjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggNjg2NDdmZjRiZGQyNC4uMWFmZTNkZjNiOTIzZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTMyNTYsNiArMzI1Niw5IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXFxuIFxcdFxcdFxcdG5lc3RlZDogVkhFLWJhc2VkIG1vZGUgd2l0aCBzdXBwb3J0IGZvciBuZXN0ZWRcXG4gXFx0XFx0XFx0XFx0dmlydHVhbGl6YXRpb24uIFJlcXVpcmVzIGF0IGxlYXN0IEFSTXY4LjRcXG4gXFx0XFx0XFx0XFx0aGFyZHdhcmUgKHdpdGggRkVBVF9OVjIpLlxcbitcXHRcXHRcXHRybW06IFN1cHBvcnQgZm9yIHJ1bm5pbmcgY29uZmlkZW50aWFsIGd1ZXN0cyBpbiBSZWFsbVxcbitcXHRcXHRcXHQgICAgIHdvcmxkIHVzaW5nIFJNTSwgYXMgZGVmaW5lZCBieSBBcm0gQ29uZmlkZW50aWFsXFxuK1xcdFxcdFxcdCAgICAgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSlcXG4gXFxuIFxcdFxcdFxcdERlZmF1bHRzIHRvIFZIRS9uVkhFIGJhc2VkIG9uIGhhcmR3YXJlIHN1cHBvcnQuIFNldHRpbmdcXG4gXFx0XFx0XFx0bW9kZSB0byBcXFwicHJvdGVjdGVkXFxcIiB3aWxsIGRpc2FibGUga2V4ZWMgYW5kIGhpYmVybmF0aW9uXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxcbmluZGV4IGEzYzE5MjhiZGY3NDMuLmQzNjBhOGIwNWI4YmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuQEAgLTc5Myw0ICs3OTMsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9yZXNldF92Y3B1X3BzY2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR2Y3B1X3NldF9yZWcodmNwdSwgMCwgcmVzZXRfc3RhdGUtXFx1MDAzZXIwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBlbnVtIHJlYWxtX3N0YXRlIGt2bV9yZWFsbV9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRShrdm0tXFx1MDAzZWFyY2gucmVhbG0uc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NldF9yZWFsbV9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIHJlYWxtX3N0YXRlIG5ld19zdGF0ZSlcXG4re1xcbitcXHRXUklURV9PTkNFKGt2bS1cXHUwMDNlYXJjaC5yZWFsbS5zdGF0ZSwgbmV3X3N0YXRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9pc19jcmVhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4ga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXFx1MDAyNlxcdTAwMjYga3ZtX3JlYWxtX3N0YXRlKGt2bSkgIT0gUkVBTE1fU1RBVEVfTk9ORTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDI3ZmUwY2Q1YjJkN2EuLmZiZmQ4NWRjOTk5ZWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTI3LDYgKzI3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9mcHNpbWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fYXNtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3JtaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3ZuY3JfbWFwcGluZy5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfSU5UQ19JTklUSUFMSVpFRFxcbkBAIC02OSw2ICs3MCw3IEBAIGVudW0ga3ZtX21vZGUge1xcbiBcXHRLVk1fTU9ERV9ERUZBVUxULFxcbiBcXHRLVk1fTU9ERV9QUk9URUNURUQsXFxuIFxcdEtWTV9NT0RFX05WLFxcbitcXHRLVk1fTU9ERV9STU0sXFxuIFxcdEtWTV9NT0RFX05PTkUsXFxuIH07XFxuICNpZmRlZiBDT05GSUdfS1ZNXFxuQEAgLTE1MCw2ICsxNTIsMjYgQEAgc3RydWN0IGt2bV92bWlkIHtcXG4gXFx0YXRvbWljNjRfdCBpZDtcXG4gfTtcXG4gXFxuK3N0cnVjdCBrdm1fdmNwdV9vcHMge1xcbitcXHR2b2lkICgqdmNwdV9sb2FkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbitcXHR2b2lkICgqdmNwdV9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK307XFxuK1xcbitzdHJ1Y3Qga3ZtX2dmbl9yYW5nZTtcXG4rc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjO1xcbitcXG4rc3RydWN0IGt2bV92bV9zMl9vcHMge1xcbitcXHRib29sICgqdm1fYWdlX2dmbikoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xcbitcXHRib29sICgqdm1fdGVzdF9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK1xcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzKShzdHJ1Y3Qga3ZtICprdm0pO1xcbitcXHRpbnQgKCp2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTY0IG5yX3BhZ2VzKTtcXG4rXFx0dm9pZCAoKnZtX3N0YWdlMl91bm1hcF9yYW5nZSkoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGh5c19hZGRyX3Qgc3RhcnQsIHU2NCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIG1heV9ibG9jayk7XFxuK1xcdGludCAoKnZtX21lbV9hYm9ydCkoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBrdm1fczJfbW11IHtcXG4gXFx0c3RydWN0IGt2bV92bWlkIHZtaWQ7XFxuIFxcbkBAIC0yNTcsNyArMjc5LDYgQEAgc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0ge1xcbiBcXHRwa3ZtX2hhbmRsZV90IGhhbmRsZTtcXG4gXFx0c3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgdGVhcmRvd25fbWM7XFxuIFxcdHN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHN0YWdlMl90ZWFyZG93bl9tYztcXG4tXFx0Ym9vbCBpc19wcm90ZWN0ZWQ7XFxuIFxcdGJvb2wgaXNfY3JlYXRlZDtcXG4gXFxuIFxcdC8qXFxuQEAgLTMwNiw5ICszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQge1xcbiBcXHRfX05SX0ZHVF9HUk9VUF9JRFNfX1xcbiB9O1xcbiBcXG4rZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB7XFxuK1xcdFZNX05WSEUsXFxuK1xcdFZNX1ZIRSxcXG4rXFx0Vk1fUEtWTSxcXHRcXHQvKiBOb3JtYWwgZ3Vlc3RzIG9uIFBLVk0gKi9cXG4rXFx0TUFSS0VSKF9fVk1fQ09ORklERU5USUFMKSxcXG4rXFx0Vk1fUFJPVEVDVEVEX1BLVk0sXFx0LyogUHJvdGVjdGVkIFZNICovXFxuK1xcdFZNX1JFQUxNLFxcdFxcdC8qIENDQSAqL1xcbitcXHRWTV9GTEFWT1JfTUFYLFxcbit9O1xcbitcXG4gc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0c3RydWN0IGt2bV9zMl9tbXUgbW11O1xcbiBcXG4rXFx0ZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB2bV9mbGF2b3I7XFxuIFxcdC8qXFxuIFxcdCAqIEZpbmUtR3JhaW5lZCBVTkRFRiwgbWltaWNraW5nIHRoZSBGR1QgbGF5b3V0IGRlZmluZWQgYnkgdGhlXFxuIFxcdCAqIGFyY2hpdGVjdHVyZS4gV2UgdHJhY2sgdGhlbSBnbG9iYWxseSwgYXMgd2UgcHJlc2VudCB0aGVcXG5AQCAtMzE4LDYgKzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuIFxcdCAqL1xcbiBcXHR1NjQgZmd1W19fTlJfRkdUX0dST1VQX0lEU19fXTtcXG4gXFxuK1xcdGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzICp2bV9zMl9vcHM7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBTdGFnZSAyIHBhZ2luZyBzdGF0ZSBmb3IgVk1zIHdpdGggbmVzdGVkIFMyIHVzaW5nIGEgdmlydHVhbFxcbiBcXHQgKiBWTUlELlxcbkBAIC00MTcsMTEgKzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIFRMQnMgKi9cXG4gXFx0YXRvbWljX3Qgdm5jcl90bGJfY291bnQ7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcXG4tXFx0ICogdGhlIGFzc29jaWF0ZWQgcEtWTSBpbnN0YW5jZSBpbiB0aGUgaHlwZXJ2aXNvci5cXG4tXFx0ICovXFxuLVxcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAncGt2bS5oYW5kbGUnIGlzIHVzZWQgdG8gbG9va3VwXFxuK1xcdFxcdCAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSBwa3ZtO1xcbitcXHRcXHRzdHJ1Y3QgcmVhbG0gcmVhbG07XFxuK1xcdH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xcbiBcXHQvKiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gaW5mbyAqL1xcbkBAIC04NDYsNiArODgzLDcgQEAgc3RydWN0IHZuY3JfdGxiO1xcbiBcXG4gc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0IGN0eHQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgKnZjcHVfb3BzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogR3Vlc3QgZmxvYXRpbmcgcG9pbnQgc3RhdGVcXG5AQCAtMTM0Niw3ICsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4tYm9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQodm9pZCk7XFxuK2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcXG4gaW50IGt2bV9hcm1fcHZ0aW1lX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtMTUwNCw5ICsxNTQyLDEzIEBAIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpO1xcbiBcXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfRkxVU0hfUkVNT1RFX1RMQlNfUkFOR0VcXG4gXFxuLSNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pXFx0KGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IChrdm0pLVxcdTAwM2VhcmNoLnBrdm0uaXNfcHJvdGVjdGVkKVxcbisjZGVmaW5lIGt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKVxcdCgoa3ZtKS1cXHUwMDNlYXJjaC52bV9mbGF2b3IgXFx1MDAzZT0gX19WTV9DT05GSURFTlRJQUwpXFxuKyNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pXFx0KChrdm0pLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9PSBWTV9QUk9URUNURURfUEtWTSlcXG4rI2RlZmluZSBrdm1fdm1faXNfcmVhbG0oa3ZtKVxcdFxcdCgoa3ZtKS1cXHUwMDNlYXJjaC52bV9mbGF2b3IgPT0gVk1fUkVBTE0pXFxuIFxcbisjZGVmaW5lIHZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpXFx0a3ZtX3ZtX2lzX2NvbmZpZGVudGlhbCgodmNwdSktXFx1MDAzZWt2bSlcXG4gI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KVxcdFxcdGt2bV92bV9pc19wcm90ZWN0ZWQoKHZjcHUpLVxcdTAwM2Vrdm0pXFxuKyNkZWZpbmUgdmNwdV9pc19yZWModmNwdSlcXHRcXHRrdm1fdm1faXNfcmVhbG0oKHZjcHUpLVxcdTAwM2Vrdm0pXFxuIFxcbiBpbnQga3ZtX2FybV92Y3B1X2ZpbmFsaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGZlYXR1cmUpO1xcbiBib29sIGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuaW5kZXggNDFhODY4NzkzOGViNi4uYzJlNGIyOWU2MDVmYyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG5AQCAtOCw5ICs4LDEzIEBAXFxuICNkZWZpbmUgX19BUk02NF9LVk1fUEdUQUJMRV9IX19cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYnRyZWVfdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4rc3RydWN0IGt2bV9zMl9tbXU7XFxuK1xcbiAjZGVmaW5lIEtWTV9QR1RBQkxFX0ZJUlNUX0xFVkVMXFx0XFx0LTFcXG4gI2RlZmluZSBLVk1fUEdUQUJMRV9MQVNUX0xFVkVMXFx0XFx0M1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oXFxuaW5kZXggYmVlYTAwZTY5M2EwYS4uNTRhNjE4ZDg4N2ZhNCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcXG5AQCAtNyw5ICs3LDkgQEBcXG4gI2RlZmluZSBfX0FSTTY0X0tWTV9QS1ZNX0hfX1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FybV9mZmEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1faG9zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcXHUwMDNlXFxuIFxcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBWTXMgdGhhdCBjYW4gY28tZXhpc3QgdW5kZXIgcEtWTS4gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcm1pLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRmNWM3NWEyN2I1Ylxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaFxcbkBAIC0wLDAgKzEsNjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDIzLTIwMjYgQVJNIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fQVNNX0tWTV9STUlfSFxcbisjZGVmaW5lIF9fQVNNX0tWTV9STUlfSFxcbitcXG4rLyoqXFxuKyAqIGVudW0gcmVhbG1fc3RhdGUgLSBTdGF0ZSBvZiBhIFJlYWxtXFxuKyAqXFxuKyAqIE1pcnJvcnMgdGhlIFJNTSdzIFJlYWxtIGxpZmVjeWNsZSBzdGF0ZXMgd2hlcmUgdGhleSBhcmUgbWVhbmluZ2Z1bCB0byBLVk0sXFxuKyAqIHdpdGggUkVBTE1fU1RBVEVfRFlJTkcgYmVpbmcgYSBLVk0taW50ZXJuYWwgc3RhdGUgdXNlZCB0byBwcmV2ZW50IGZ1cnRoZXJcXG4rICogcmVxdWVzdHMgd2hpbGUgdGVhcmRvd24gaXMgaW4gcHJvZ3Jlc3MuIEtWTSBkb2VzIG5vdCB0cmFjayBSRUFMTV9TWVNURU1fT0ZGXFxuKyAqIG9yIFJFQUxNX1pPTUJJRSBzZXBhcmF0ZWx5IGFzIHRoZXkgbmF0dXJhbGx5IGxlYWQgdG8gdGVhcmRvd24uXFxuKyAqL1xcbitlbnVtIHJlYWxtX3N0YXRlIHtcXG4rXFx0LyoqXFxuK1xcdCAqIEBSRUFMTV9TVEFURV9OT05FOlxcbitcXHQgKiAgICAgIFJlYWxtIGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZC4gcm1pX3JlYWxtX2NyZWF0ZSgpIGhhcyBub3RcXG4rXFx0ICogICAgICB5ZXQgYmVlbiBjYWxsZWQuXFxuK1xcdCAqL1xcbitcXHRSRUFMTV9TVEFURV9OT05FLFxcbitcXHQvKipcXG4rXFx0ICogQFJFQUxNX1NUQVRFX05FVzpcXG4rXFx0ICogICAgICBSZWFsbSBpcyB1bmRlciBjb25zdHJ1Y3Rpb24sIHJtaV9yZWFsbV9jcmVhdGUoKSBoYXMgYmVlblxcbitcXHQgKiAgICAgIGNhbGxlZCwgYnV0IGl0IGlzIG5vdCB5ZXQgYWN0aXZhdGVkLiBQYWdlcyBtYXkgYmUgcG9wdWxhdGVkLlxcbitcXHQgKi9cXG4rXFx0UkVBTE1fU1RBVEVfTkVXLFxcbitcXHQvKipcXG4rXFx0ICogQFJFQUxNX1NUQVRFX0FDVElWRTpcXG4rXFx0ICogICAgICBSZWFsbSBoYXMgYmVlbiBjcmVhdGVkIGFuZCBpcyBlbGlnaWJsZSBmb3IgZXhlY3V0aW9uIHdpdGhcXG4rXFx0ICogICAgICBybWlfcmVjX2VudGVyKCkuIFBhZ2VzIG1heSBubyBsb25nZXIgYmUgcG9wdWxhdGVkIHdpdGhcXG4rXFx0ICogICAgICBybWlfZGF0YV9jcmVhdGUoKS5cXG4rXFx0ICovXFxuK1xcdFJFQUxNX1NUQVRFX0FDVElWRSxcXG4rXFx0LyoqXFxuK1xcdCAqIEBSRUFMTV9TVEFURV9EWUlORzpcXG4rXFx0ICogICAgICBSZWFsbSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQgb3IgaGFzIGFscmVhZHkgYmVlblxcbitcXHQgKiAgICAgIGRlc3Ryb3llZC5cXG4rXFx0ICovXFxuK1xcdFJFQUxNX1NUQVRFX0RZSU5HLFxcbitcXHQvKipcXG4rXFx0ICogQFJFQUxNX1NUQVRFX0RFQUQ6XFxuK1xcdCAqICAgICAgUmVhbG0gaGFzIGJlZW4gZGVzdHJveWVkLlxcbitcXHQgKi9cXG4rXFx0UkVBTE1fU1RBVEVfREVBRFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByZWFsbSAtIEFkZGl0aW9uYWwgcGVyIFZNIGRhdGEgZm9yIGEgUmVhbG1cXG4rICpcXG4rICogQHN0YXRlOiBUaGUgbGlmZXRpbWUgc3RhdGUgbWFjaGluZSBmb3IgdGhlIHJlYWxtXFxuKyAqL1xcbitzdHJ1Y3QgcmVhbG0ge1xcbitcXHRlbnVtIHJlYWxtX3N0YXRlIHN0YXRlO1xcbit9O1xcbitcXG4rdm9pZCBrdm1faW5pdF9ybWkodm9pZCk7XFxuK1xcbisjZW5kaWYgLyogX19BU01fS1ZNX1JNSV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcXG5pbmRleCBiNTQ2NzAzYzNhYjlhLi45MmNlYzQyOTUyZjQyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcXG5AQCAtODcsNiArODcsNyBAQCB2b2lkIF9faHlwX3Jlc2V0X3ZlY3RvcnModm9pZCk7XFxuIGJvb2wgaXNfa3ZtX2FybV9pbml0aWFsaXNlZCh2b2lkKTtcXG4gXFxuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcHJvdGVjdGVkX21vZGVfaW5pdGlhbGl6ZWQpO1xcbitERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoa3ZtX3JtaV9pc19hdmFpbGFibGUpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3Brdm1faW5pdGlhbGl6ZWQodm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXFxuaW5kZXggNTk2MTJkMmYyNzdjMS4uZWQzY2YzMGViMDZlNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXFxuQEAgLTE2LDcgKzE2LDcgQEAgQ0ZMQUdTX2hhbmRsZV9leGl0Lm8gKz0gLVduby1vdmVycmlkZS1pbml0XFxuIGt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4gXFx0IGluamVjdF9mYXVsdC5vIHZhX2xheW91dC5vIGhhbmRsZV9leGl0Lm8gY29uZmlnLm8gXFxcXFxcbiBcXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcXFxcbi1cXHQgdmdpYy1zeXMtcmVnLXYzLm8gZnBzaW1kLm8gcGt2bS5vIFxcXFxcXG4rXFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBybWkubyBcXFxcXFxuIFxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbiBcXHQgdmdpYy92Z2ljLm8gdmdpYy92Z2ljLWluaXQubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IDZhYzMzMjFmNGM1NzUuLjNlZGRmNDRmN2IxZGQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXFxuQEAgLTU2LDExICs1NiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fYXJjaF90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpXFxuIFxcdHJldHVybiBrdm1fdmdpY19nbG9iYWxfc3RhdGUubm9faHdfZGVhY3RpdmF0aW9uID8gVkdJQ19JUlFfU1dfUkVTQU1QTEUgOiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcmVhbG1fdGltZXJfZ2V0X2lycV9mbGFncyh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFJNSV9SRUNfRU5URVIgcmVqZWN0cyBMUnMgd2l0aCB0aGUgSFcgYml0IHNldCwgc28gdXNlIHRoZSBleGlzdGluZ1xcbitcXHQgKiBzb2Z0d2FyZSByZXNhbXBsaW5nIG1lY2hhbmlzbSBmb3IgUmVhbG0gdGltZXIgaW50ZXJydXB0cy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBWR0lDX0lSUV9TV19SRVNBTVBMRTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wcyA9IHtcXG4gXFx0LmdldF9mbGFnc1xcdCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3MsXFxuIFxcdC5nZXRfaW5wdXRfbGV2ZWwgPSBrdm1fYXJjaF90aW1lcl9nZXRfaW5wdXRfbGV2ZWwsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9vcHMgcmVhbG1fdGltZXJfaXJxX29wcyA9IHtcXG4rXFx0LmdldF9mbGFnc1xcdCA9IGt2bV9yZWFsbV90aW1lcl9nZXRfaXJxX2ZsYWdzLFxcbitcXHQuZ2V0X2lucHV0X2xldmVsID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lucHV0X2xldmVsLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0ge1xcbiBcXHQuZ2V0X2lucHV0X2xldmVsID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lucHV0X2xldmVsLFxcbiBcXHQucXVldWVfaXJxX3VubG9jayA9IHZnaWNfdjVfcHBpX3F1ZXVlX2lycV91bmxvY2ssXFxuQEAgLTEwNzksNyArMTA5Myw3IEBAIHN0YXRpYyB2b2lkIHRpbWVyX2NvbnRleHRfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0aW1lcmlkKVxcbiBcXG4gXFx0Y3R4dC1cXHUwMDNldGltZXJfaWQgPSB0aW1lcmlkO1xcbiBcXG4tXFx0aWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0aWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSkge1xcbiBcXHRcXHRpZiAodGltZXJpZCA9PSBUSU1FUl9WVElNRVIpXFxuIFxcdFxcdFxcdGN0eHQtXFx1MDAzZW9mZnNldC52bV9vZmZzZXQgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRpbWVyX2RhdGEudm9mZnNldDtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xMTEwLDcgKzExMjQsNyBAQCB2b2lkIGt2bV90aW1lcl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR0aW1lcl9jb250ZXh0X2luaXQodmNwdSwgaSk7XFxuIFxcbiBcXHQvKiBTeW5jaHJvbml6ZSBvZmZzZXRzIGFjcm9zcyB0aW1lcnMgb2YgYSBWTSBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCAqL1xcbi1cXHRpZiAoIXZjcHVfaXNfcHJvdGVjdGVkKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICghdmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICF0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZNX0NPVU5URVJfT0ZGU0VULCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSkge1xcbiBcXHRcXHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfdnRpbWVyKHZjcHUpLCBrdm1fcGh5c190aW1lcl9yZWFkKCkpO1xcbiBcXHRcXHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfcHRpbWVyKHZjcHUpLCAwKTtcXG5AQCAtMTYwOSw4ICsxNjIzLDEyIEBAIGludCBrdm1fdGltZXJfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGdldF90aW1lcl9tYXAodmNwdSwgXFx1MDAyNm1hcCk7XFxuIFxcbi1cXHRvcHMgPSB2Z2ljX2lzX3Y1KHZjcHUtXFx1MDAzZWt2bSkgPyBcXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzX3ZnaWNfdjUgOlxcbi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzO1xcbitcXHRpZiAodmNwdV9pc19yZWModmNwdSkpXFxuK1xcdFxcdG9wcyA9IFxcdTAwMjZyZWFsbV90aW1lcl9pcnFfb3BzO1xcbitcXHRlbHNlIGlmICh2Z2ljX2lzX3Y1KHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdG9wcyA9IFxcdTAwMjZhcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvcHMgPSBcXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBucl90aW1lcnModmNwdSk7IGkrKylcXG4gXFx0XFx0a3ZtX3ZnaWNfc2V0X2lycV9vcHModmNwdSwgdGltZXJfaXJxKHZjcHVfZ2V0X3RpbWVyKHZjcHUsIGkpKSwgb3BzKTtcXG5AQCAtMTczNiw3ICsxNzU0LDcgQEAgaW50IGt2bV92bV9pb2N0bF9zZXRfY291bnRlcl9vZmZzZXQoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRpZiAob2Zmc2V0LVxcdTAwM2VyZXNlcnZlZClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxcbitcXHRpZiAoa3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA4YjA4MDgwNGJjOTBiLi4zZmU1YTRmNzc3MzhlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5AQCAtNDIsNiArNDIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGt2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3JtaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NlY3Rpb25zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3RhY2t0cmFjZS9udmhlLmhcXHUwMDNlXFxuIFxcbkBAIC03NCw2ICs3NSw4IEBAIHN0cnVjdCBrdm1faW9jdGxfY2FwX21hcCB7XFxuIFxcdGxvbmcgZXh0O1xcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgKmFybTY0X3ZjcHVfb3BzW1ZNX0ZMQVZPUl9NQVhdO1xcbitcXG4gLyogTWFrZSBLVk1fQ0FQX05SX1ZDUFVTIHRoZSByZWZlcmVuY2UgZm9yIGZlYXR1cmVzIHdlIGFsd2F5cyBzdXBwb3J0ZWQgKi9cXG4gI2RlZmluZSBLVk1fQ0FQX0FSTV9CQVNJQ1xcdEtWTV9DQVBfTlJfVkNQVVNcXG4gXFxuQEAgLTExMSw2ICsxMTQsOCBAQCBsb25nIGt2bV9nZXRfY2FwX2Zvcl9rdm1faW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCBsb25nICpleHQpXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbitERUZJTkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7XFxuK1xcbiBERUNMQVJFX0tWTV9IWVBfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1faHlwX3ZlY3Rvcik7XFxuIFxcbiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1fYXJtX2h5cF9zdGFja19iYXNlKTtcXG5AQCAtMTMyLDYgKzEzNywyNSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUodmNwdSkgPT0gSU5fR1VFU1RfTU9ERTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wga3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGxvbmcgZXh0KVxcbit7XFxuK1xcdHN3aXRjaCAoZXh0KSB7XFxuK1xcdGNhc2UgS1ZNX0NBUF9JUlFDSElQOlxcbitcXHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0k6XFxuK1xcdGNhc2UgS1ZNX0NBUF9BUk1fUFNDSV8wXzI6XFxuK1xcdGNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX01BWF9WQ1BVUzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX01BWF9WQ1BVX0lEOlxcbitcXHRjYXNlIEtWTV9DQVBfTVNJX0RFVklEOlxcbitcXHRjYXNlIEtWTV9DQVBfQVJNX1ZNX0lQQV9TSVpFOlxcbitcXHRjYXNlIEtWTV9DQVBfQVJNX1BUUkFVVEhfQUREUkVTUzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0dFTkVSSUM6XFxuK1xcdGNhc2UgS1ZNX0NBUF9TWU5DX01NVTpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXFxuIHtcXG5AQCAtMTQzLDYgKzE2Nyw5IEBAIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBjYXAtXFx1MDAzZWNhcCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0aWYgKGt2bSBcXHUwMDI2XFx1MDAyNiBrdm1fdm1faXNfcmVhbG0oa3ZtKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGNhcC1cXHUwMDNlY2FwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRzd2l0Y2ggKGNhcC1cXHUwMDNlY2FwKSB7XFxuIFxcdGNhc2UgS1ZNX0NBUF9BUk1fTklTVl9UT19VU0VSOlxcbiBcXHRcXHRyID0gMDtcXG5AQCAtMjE0LDYgKzI0MSwyNiBAQCBzdGF0aWMgaW50IGt2bV9hcm1fZGVmYXVsdF9tYXhfdmNwdXModm9pZClcXG4gXFx0cmV0dXJuIHZnaWNfcHJlc2VudCA/IGt2bV92Z2ljX2dldF9tYXhfdmNwdXMoKSA6IEtWTV9NQVhfVkNQVVM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3ZtX2luaXRfdm1fZmxhdm9yKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbit7XFxuK1xcdGJvb2wgcHJvdGVjdGVkID0gdHlwZSBcXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQ7XFxuK1xcbitcXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcXG4rXFx0XFx0aWYgKHByb3RlY3RlZClcXG4rXFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1BST1RFQ1RFRF9QS1ZNO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC52bV9mbGF2b3IgPSBWTV9QS1ZNO1xcbitcXHR9IGVsc2UgaWYgKHByb3RlY3RlZCkge1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fSBlbHNlIGlmIChoYXNfdmhlKCkpIHtcXG4rXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1ZIRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICoga3ZtX2FyY2hfaW5pdF92bSAtIGluaXRpYWxpemVzIGEgVk0gZGF0YSBzdHJ1Y3R1cmVcXG4gICogQGt2bTpcXHRwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0XFxuQEAgLTIzNiw2ICsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4gI2VuZGlmXFxuIFxcbitcXHRyZXQgPSBrdm1faW5pdF92bV9mbGF2b3Ioa3ZtLCB0eXBlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGt2bV9pbml0X25lc3RlZChrdm0pO1xcbiBcXG4gXFx0cmV0ID0ga3ZtX3NoYXJlX2h5cChrdm0sIGt2bSArIDEpO1xcbkBAIC0yNjAsOSArMzExLDYgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuIFxcdFxcdHJldCA9IHBrdm1faW5pdF9ob3N0X3ZtKGt2bSwgdHlwZSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX3VuaW5pdF9tbXU7XFxuLVxcdH0gZWxzZSBpZiAodHlwZSBcXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBlcnJfdW5pbml0X21tdTtcXG4gXFx0fVxcbiBcXG4gXFx0a3ZtX3ZnaWNfZWFybHlfaW5pdChrdm0pO1xcbkBAIC0zODEsNiArNDI5LDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIGV4dCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKGt2bSBcXHUwMDI2XFx1MDAyNiBrdm1fdm1faXNfcmVhbG0oa3ZtKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGV4dCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0c3dpdGNoIChleHQpIHtcXG4gXFx0Y2FzZSBLVk1fQ0FQX0lSUUNISVA6XFxuIFxcdFxcdHIgPSB2Z2ljX3ByZXNlbnQ7XFxuQEAgLTQ0Nyw3ICs0OTgsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRcXHRyID0gc3lzdGVtX3N1cHBvcnRzX210ZSgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX1NURUFMX1RJTUU6XFxuLVxcdFxcdHIgPSBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKTtcXG4rXFx0XFx0ciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZChrdm0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDFfMzJCSVQ6XFxuIFxcdFxcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpO1xcbkBAIC01NDgsNiArNTk5LDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCk7XFxuICNlbmRpZlxcbiBcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC52Y3B1X29wcyA9IGFybTY0X3ZjcHVfb3BzW3ZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV9mbGF2b3JdO1xcbitcXG4gXFx0LyogRm9yY2UgdXNlcnMgdG8gY2FsbCBLVk1fQVJNX1ZDUFVfSU5JVCAqL1xcbiBcXHR2Y3B1X2NsZWFyX2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7XFxuIFxcbkBAIC02NjIsMTQgKzcxNSwxMSBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIHNpbmdsZV90YXNrX3J1bm5pbmcoKTtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbitzdGF0aWMgdm9pZCB2Y3B1X3ByZXBhcmVfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xcbiBcXHRpbnQgKmxhc3RfcmFuO1xcbiBcXG4tXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbi1cXHRcXHRnb3RvIG5vbW11O1xcbi1cXG4gXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbiBcXHRcXHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcXG4gXFxuQEAgLTY5OSwxMCArNzQ5LDMwIEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFx0XFx0a3ZtX2NhbGxfaHlwKF9fa3ZtX2ZsdXNoX2NwdV9jb250ZXh0LCBtbXUpO1xcbiBcXHRcXHQqbGFzdF9yYW4gPSB2Y3B1LVxcdTAwM2V2Y3B1X2lkeDtcXG4gXFx0fVxcbit9XFxuIFxcbi1ub21tdTpcXG4tXFx0dmNwdS1cXHUwMDNlY3B1ID0gY3B1O1xcbitzdGF0aWMgdm9pZCB2Y3B1X3NldF93ZnhfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHZjcHUpKVxcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhjcl9lbDIgXFx1MDAyNj0gfkhDUl9UV0U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0U7XFxuK1xcbitcXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3aSh2Y3B1KSlcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5oY3JfZWwyIFxcdTAwMjY9IH5IQ1JfVFdJO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMiB8PSBIQ1JfVFdJO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2Y3B1X2xvYWRfcHZ0aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbit9XFxuIFxcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4re1xcbitcXHR2Y3B1X3ByZXBhcmVfbW11KHZjcHUpO1xcbiBcXHQvKlxcbiBcXHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcXG4gXFx0ICogaW50ZXJydXB0IGRlYWN0aXZhdGlvbiBpbiBuZXN0ZWQgc3RhdGUgKGUuZy4gdGltZXIgaW50ZXJydXB0KS5cXG5AQCAtNzExLDMyICs3ODEsNjggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbiBcXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xcbiBcXHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xcbiBcXHRrdm1fdmNwdV9sb2FkX2ZndCh2Y3B1KTtcXG4tXFx0aWYgKGhhc192aGUoKSlcXG4tXFx0XFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XFxuK1xcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XFxuIFxcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xcbi1cXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuLVxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbiBcXG4tXFx0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2UodmNwdSkpXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMiBcXHUwMDI2PSB+SENSX1RXRTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcXG4rXFx0dmNwdV9sb2FkX3B2dGltZSh2Y3B1KTtcXG4rXFx0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xcbitcXHR2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMiBcXHUwMDI2PSB+SENSX1RXSTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXSTtcXG4rc3RhdGljIHZvaWQgbnZoZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbit7XFxuK1xcdHZjcHVfcHJlcGFyZV9tbXUodmNwdSk7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxcbitcXHQgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLlxcbitcXHQgKi9cXG4rXFx0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZnaWNfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XFxuK1xcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XFxuIFxcbitcXHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xcbitcXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XFxuIFxcdHZjcHVfc2V0X3BhdXRoX3RyYXBzKHZjcHUpO1xcbit9XFxuIFxcbi1cXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcXG4tXFx0XFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfbG9hZCxcXG4tXFx0XFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gucGt2bS5oYW5kbGUsXFxuLVxcdFxcdFxcdFxcdCAgdmNwdS1cXHUwMDNldmNwdV9pZHgsIHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMik7XFxuLVxcdFxcdGt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsXFxuLVxcdFxcdFxcdCAgICAgXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XFxuLVxcdH1cXG4rc3RhdGljIHZvaWQgcGt2bV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxcbitcXHQgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLlxcbitcXHQgKi9cXG4rXFx0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZnaWNfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XFxuK1xcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XFxuK1xcbitcXHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xcbitcXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XFxuK1xcbitcXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLFxcbitcXHRcXHRcXHQgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSxcXG4rXFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCwgdmNwdS1cXHUwMDNlYXJjaC5oY3JfZWwyKTtcXG4rXFx0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19yZXN0b3JlX3ZtY3JfYXBycyxcXG4rXFx0XFx0ICAgICBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdS52Z2ljX3YzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVhbG1fdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4re1xcbitcXHRrdm1fdGltZXJfdmNwdV9sb2FkKHZjcHUpO1xcbitcXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xcbitcXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4re1xcbitcXHR2Y3B1LVxcdTAwM2VjcHUgPSBjcHU7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gudmNwdV9vcHMtXFx1MDAzZXZjcHVfbG9hZCh2Y3B1LCBjcHUpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzKSlcXG4gXFx0XFx0dmNwdV9zZXRfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xcbkBAIC03NDQsMjggKzg1MCw1MCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdHZjcHUtXFx1MDAzZWFyY2gucGlkID0gcGlkX25yKHZjcHUtXFx1MDAzZXBpZCk7XFxuIH1cXG4gXFxuLXZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkge1xcbi1cXHRcXHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XFxuLVxcdFxcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XFxuLVxcbi1cXHRcXHQvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovXFxuLVxcdFxcdGlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbi1cXHRcXHRcXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFBLVk1fSE9TVF9TVEFURV9ESVJUWSk7XFxuLVxcdH1cXG4tXFxuIFxcdGt2bV92Y3B1X3B1dF9kZWJ1Zyh2Y3B1KTtcXG4gXFx0a3ZtX2FyY2hfdmNwdV9wdXRfZnAodmNwdSk7XFxuLVxcdGlmIChoYXNfdmhlKCkpXFxuLVxcdFxcdGt2bV92Y3B1X3B1dF92aGUodmNwdSk7XFxuK1xcdGt2bV92Y3B1X3B1dF92aGUodmNwdSk7XFxuIFxcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcXG4gXFx0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xcbiBcXHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHZjcHUpO1xcbiBcXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXFxuIFxcdFxcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XFxuIFxcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcXG4rfVxcbiBcXG4rc3RhdGljIHZvaWQgbnZoZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0a3ZtX3ZjcHVfcHV0X2RlYnVnKHZjcHUpO1xcbitcXHRrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xcbitcXHRrdm1fdmdpY19wdXQodmNwdSk7XFxuK1xcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7XFxuK1xcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19zYXZlX2FwcnMsIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xcbitcXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9wdXQpO1xcbitcXG4rXFx0LyogX19wa3ZtX3ZjcHVfcHV0IGltcGxpZXMgYSBzeW5jIG9mIHRoZSBzdGF0ZSAqL1xcbitcXHRpZiAoIWt2bV92bV9pc19wcm90ZWN0ZWQodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpO1xcbitcXG4rXFx0bnZoZV92Y3B1X3B1dCh2Y3B1KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVhbG1fdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcXG4rXFx0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnZjcHVfb3BzLVxcdTAwM2V2Y3B1X3B1dCh2Y3B1KTtcXG4gXFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XFxuIFxcdHZjcHUtXFx1MDAzZWNwdSA9IC0xO1xcbiB9XFxuQEAgLTE4NTIsNiArMTk4MCwxOCBAQCBzdGF0aWMgaW50IGt2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0cmV0dXJuIF9fa3ZtX2FybV92Y3B1X3NldF9ldmVudHModmNwdSwgZXZlbnRzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmVhbG0gVkNQVXMgY2FuIGJlIGZpbmFsaXplZCBhZnRlciB0aGUgUmVhbG0gZGVzY3JpcHRvciBpcyBjcmVhdGVkLlxcbisgKiBBbGxvdyB0aGUgcmVnaXN0ZXIgbGlzdCBmb3IgUkVDcyBiZWZvcmUgdGhlIFZDUFVzIGFyZSBmaW5hbGl6ZWQsIGJ1dFxcbisgKiBhZnRlciB0aGUgU1ZFIGlzIGZpbmFsaXplZC5cXG4rICovXFxuK3N0YXRpYyBib29sIGt2bV9hcm1fdmNwdV9yZWdfbGlzdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpZiAoa3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZCh2Y3B1KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KTtcXG4rfVxcbitcXG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbkBAIC0xOTA3LDcgKzIwNDcsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0ciA9IC1FUEVSTTtcXG4tXFx0XFx0aWYgKCFrdm1fYXJtX3ZjcHVfaXNfZmluYWxpemVkKHZjcHUpKVxcbitcXHRcXHRpZiAoIWt2bV9hcm1fdmNwdV9yZWdfbGlzdF9hbGxvd2VkKHZjcHUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbkBAIC0yMTA1LDYgKzIyNDUsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHZoZV92Y3B1X29wcyA9IHtcXG4rXFx0LnZjcHVfbG9hZCA9IHZoZV92Y3B1X2xvYWQsXFxuK1xcdC52Y3B1X3B1dCA9IHZoZV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIG52aGVfdmNwdV9vcHMgPSB7XFxuK1xcdC52Y3B1X2xvYWQgPSBudmhlX3ZjcHVfbG9hZCxcXG4rXFx0LnZjcHVfcHV0ID0gbnZoZV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHBrdm1fdmNwdV9vcHMgPSB7XFxuK1xcdC52Y3B1X2xvYWQgPSBwa3ZtX3ZjcHVfbG9hZCxcXG4rXFx0LnZjcHVfcHV0ID0gcGt2bV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHJlYWxtX3ZjcHVfb3BzID0ge1xcbitcXHQudmNwdV9sb2FkID0gcmVhbG1fdmNwdV9sb2FkLFxcbitcXHQudmNwdV9wdXQgPSByZWFsbV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tdID0ge1xcbitcXHRbVk1fVkhFXSA9IFxcdTAwMjZ2aGVfdmNwdV9vcHMsXFxuK1xcdFtWTV9OVkhFXSA9IFxcdTAwMjZudmhlX3ZjcHVfb3BzLFxcbitcXHRbVk1fUEtWTV0gPSBcXHUwMDI2cGt2bV92Y3B1X29wcyxcXG4rXFx0W1ZNX1BST1RFQ1RFRF9QS1ZNXSA9IFxcdTAwMjZwa3ZtX3ZjcHVfb3BzLFxcbitcXHRbVk1fUkVBTE1dID0gXFx1MDAyNnJlYWxtX3ZjcHVfb3BzLFxcbit9O1xcbitcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbnZoZV9wZXJjcHVfc2l6ZSh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiAodW5zaWduZWQgbG9uZylDSE9PU0VfTlZIRV9TWU0oX19wZXJfY3B1X2VuZCkgLVxcbkBAIC0zMDUwLDYgKzMyMTgsOCBAQCBzdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZClcXG4gXFxuIFxcdGluX2h5cF9tb2RlID0gaXNfa2VybmVsX2luX2h5cF9tb2RlKCk7XFxuIFxcbitcXHRrdm1faW5pdF9ybWkoKTtcXG4rXFxuIFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkgfHxcXG4gXFx0ICAgIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfV09SS0FST1VORF8xNTA4NDEyKSlcXG4gXFx0XFx0a3ZtX2luZm8oXFxcIkd1ZXN0cyB3aXRob3V0IHJlcXVpcmVkIENQVSBlcnJhdHVtIHdvcmthcm91bmRzIGNhbiBkZWFkbG9jayBzeXN0ZW0hXFxcXG5cXFwiIFxcXFxcXG5AQCAtMzE1NSw2ICszMzI1LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2t2bV9tb2RlX2NmZyhjaGFyICphcmcpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoc3RyY21wKGFyZywgXFxcInJtbVxcXCIpID09IDAgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT04oIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKSkge1xcbitcXHRcXHRrdm1fbW9kZSA9IEtWTV9NT0RFX1JNTTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIGVhcmx5X3BhcmFtKFxcXCJrdm0tYXJtLm1vZGVcXFwiLCBlYXJseV9rdm1fbW9kZV9jZmcpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ndWVzdC5jIGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xcbmluZGV4IGIwMWQ2NjIyYjg3MjAuLjZiZWM3M2QxZWUwNTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmNcXG5AQCAtNTk4LDggKzU5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fc3ZlX3JlZ3MoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIXZjcHVfaGFzX3N2ZSh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHQvKiBQb2xpY2VkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6ICovXFxuLVxcdFdBUk5fT04oIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKTtcXG4rXFx0aWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSlcXG4rXFx0XFx0cmV0dXJuIDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqL1xcbitcXG4rXFx0aWYgKGt2bV92bV9pc19yZWFsbSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXFxuIFxcbiBcXHRyZXR1cm4gc2xpY2VzICogKFNWRV9OVU1fUFJFR1MgKyBTVkVfTlVNX1pSRUdTICsgMSAvKiBGRlIgKi8pXFxuIFxcdFxcdCsgMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXFxuQEAgLTYxNiw5ICs2MTksNiBAQCBzdGF0aWMgaW50IGNvcHlfc3ZlX3JlZ19pbmRpY2VzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0aWYgKCF2Y3B1X2hhc19zdmUodmNwdSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogUG9saWNlZCBieSBLVk1fR0VUX1JFR19MSVNUOiAqL1xcbi1cXHRXQVJOX09OKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBFbnVtZXJhdGUgdGhpcyBmaXJzdCwgc28gdGhhdCB1c2Vyc3BhY2UgY2FuIHNhdmUvcmVzdG9yZSBpblxcbiBcXHQgKiB0aGUgb3JkZXIgcmVwb3J0ZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDpcXG5AQCAtNjI4LDYgKzYyOCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfc3ZlX3JlZ19pbmRpY2VzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdCsrbnVtX3JlZ3M7XFxuIFxcbitcXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKVxcbitcXHRcXHRyZXR1cm4gbnVtX3JlZ3M7XFxuK1xcbitcXHRpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiBudW1fcmVncztcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzbGljZXM7IGkrKykge1xcbiBcXHRcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2MgU1ZFX05VTV9aUkVHUzsgbisrKSB7XFxuIFxcdFxcdFxcdHJlZyA9IEtWTV9SRUdfQVJNNjRfU1ZFX1pSRUcobiwgaSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uY1xcbmluZGV4IDQ1OWJkOWViN2U0YmMuLjA5OTYxYzAwNTZmMmIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jXFxuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3Brdm1faHlwX3ZtKHN0cnVjdCBrdm0gKmhvc3Rfa3ZtLCBzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSxcXG4gXFxuIFxcdGh5cF92bS1cXHUwMDNlaG9zdF9rdm0gPSBob3N0X2t2bTtcXG4gXFx0aHlwX3ZtLVxcdTAwM2Vrdm0uY3JlYXRlZF92Y3B1cyA9IG5yX3ZjcHVzO1xcbi1cXHRoeXBfdm0tXFx1MDAzZWt2bS5hcmNoLnBrdm0uaXNfcHJvdGVjdGVkID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLVxcdTAwM2VhcmNoLnBrdm0uaXNfcHJvdGVjdGVkKTtcXG4rXFx0aHlwX3ZtLVxcdTAwM2Vrdm0uYXJjaC52bV9mbGF2b3IgPSBSRUFEX09OQ0UoaG9zdF9rdm0tXFx1MDAzZWFyY2gudm1fZmxhdm9yKTtcXG4gXFx0aHlwX3ZtLVxcdTAwM2Vrdm0uYXJjaC5mbGFncyA9IDA7XFxuIFxcdHBrdm1faW5pdF9mZWF0dXJlc19mcm9tX2hvc3QoaHlwX3ZtLCBob3N0X2t2bSk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xcbmluZGV4IGI3NGRkNWNlMWVmZDMuLmY0ODI1M2I5ZDg4YjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BndGFibGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zdGFnZTJfcGd0YWJsZS5oXFx1MDAzZVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jIGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXFxuaW5kZXggYjExYjg4MjFjOWZiYy4uMmIxZTZmZGViNGQ1YyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmNcXG5AQCAtNDE0LDE0ICs0MTQsMTQgQEAgdm9pZCBrdm1fYXJtX3RlYXJkb3duX2h5cGVyY2FsbHMoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gaW50IGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4gQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpO1xcbitcXHRyZXR1cm4gdmNwdV9pc19yZWModmNwdSkgPyAwIDogQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpO1xcbiB9XFxuIFxcbiBpbnQga3ZtX2FybV9jb3B5X2Z3X3JlZ19pbmRpY2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpKyspIHtcXG4gXFx0XFx0aWYgKHB1dF91c2VyKGt2bV9hcm1fZndfcmVnX2lkc1tpXSwgdWluZGljZXMrKykpXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcXG5pbmRleCBkNmM0ZmMxNmY4Nzk1Li5kNjFhM2ZmMDRmYWJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcXG5AQCAtMzE3LDYgKzMxNyw3IEBAIHZvaWQga3ZtX2luamVjdF9zaXplX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gICovXFxuIHZvaWQga3ZtX2luamVjdF91bmRlZmluZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuK1xcdEtWTV9CVUcodmNwdV9pc19yZWModmNwdSksIHZjcHUtXFx1MDAzZWt2bSwgXFxcIlVuZXhwZWN0ZWQgdW5kZWZpbmVkIGV4Y2VwdGlvbiBpbmplY3Rpb24gdG8gUkVDXFxcIik7XFxuIFxcdGlmICh2Y3B1X2VsMV9pc18zMmJpdCh2Y3B1KSlcXG4gXFx0XFx0aW5qZWN0X3VuZGVmMzIodmNwdSk7XFxuIFxcdGVsc2VcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW1pby5jIGIvYXJjaC9hcm02NC9rdm0vbW1pby5jXFxuaW5kZXggZDFjM2EzNTJkNWEyMi4uYmJjZjUyZjAxZTkxMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbWlvLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9tbWlvLmNcXG5AQCAtMTY4LDE0ICsxNjgsMTQgQEAgaW50IGlvX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGZhdWx0X2lwYSlcXG4gXFx0ICogTm8gdmFsaWQgc3luZHJvbWU/IEFzayB1c2Vyc3BhY2UgZm9yIGhlbHAgaWYgaXQgaGFzXFxuIFxcdCAqIHZvbHVudGVlcmVkIHRvIGRvIHNvLCBhbmQgYmFpbCBvdXQgb3RoZXJ3aXNlLlxcbiBcXHQgKlxcbi1cXHQgKiBJbiB0aGUgcHJvdGVjdGVkIFZNIGNhc2UsIHRoZXJlIGlzbid0IG11Y2ggdXNlcnNwYWNlIGNhbiBkb1xcbitcXHQgKiBJbiB0aGUgcHJvdGVjdGVkL1JlYWxtIFZNIGNhc2UsIHRoZXJlIGlzbid0IG11Y2ggdXNlcnNwYWNlIGNhbiBkb1xcbiBcXHQgKiB0aG91Z2gsIHNvIGRpcmVjdGx5IGRlbGl2ZXIgYW4gZXhjZXB0aW9uIHRvIHRoZSBndWVzdC5cXG4gXFx0ICovXFxuIFxcdGlmICgha3ZtX3ZjcHVfZGFidF9pc3ZhbGlkKHZjcHUpKSB7XFxuIFxcdFxcdHRyYWNlX2t2bV9tbWlvX25pc3YoKnZjcHVfcGModmNwdSksIGVzcixcXG4gXFx0XFx0XFx0XFx0ICAgIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpLCBmYXVsdF9pcGEpO1xcbiBcXG4tXFx0XFx0aWYgKHZjcHVfaXNfcHJvdGVjdGVkKHZjcHUpKVxcbitcXHRcXHRpZiAodmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiBrdm1faW5qZWN0X3NlYV9kYWJ0KHZjcHUsIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpKTtcXG4gXFxuIFxcdFxcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1JFVFVSTl9OSVNWX0lPX0FCT1JUX1RPX1VTRVIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5pbmRleCA5YmE4NjQ1MGZlNGFmLi41ZTdjZGJlMzEwZmM4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMzcsNiArMzcsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGlvX21hcF9iYXNlO1xcbiBcXG4gI2RlZmluZSBLVk1fUEdUX0ZOKGZuKVxcdFxcdCghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgPyBmbiA6IHAgIyMgZm4pXFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcHJvdGVjdGVkX3Brdm1fczJfb3BzO1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgdW5wcm90ZWN0ZWRfcGt2bV9zMl9vcHM7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBrdm1fZGVmYXVsdF92bV9zMl9vcHM7XFxuK1xcbiBzdGF0aWMgcGh5c19hZGRyX3QgX19zdGFnZTJfcmFuZ2VfYWRkcl9lbmQocGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBwaHlzX2FkZHJfdCBzaXplKVxcbiB7XFxuQEAgLTE2Niw2ICsxNzAsMTggQEAgc3RhdGljIGJvb2wgbWVtc2xvdF9pc19sb2dnaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpXFxuIFxcdHJldHVybiBtZW1zbG90LVxcdTAwM2VkaXJ0eV9iaXRtYXAgXFx1MDAyNlxcdTAwMjYgIShtZW1zbG90LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fUkVBRE9OTFkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVxcdTAwM2VhcmNoLnBrdm0uaGFuZGxlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gubW11KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicygpIC0gZmx1c2ggYWxsIFZNIFRMQiBlbnRyaWVzIGZvciB2Ny84XFxuICAqIEBrdm06XFx0cG9pbnRlciB0byBrdm0gc3RydWN0dXJlLlxcbkBAIC0xNzQsMjYgKzE5MCwzNiBAQCBzdGF0aWMgYm9vbCBtZW1zbG90X2lzX2xvZ2dpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcXG4gICovXFxuIGludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbi1cXHRcXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS1cXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0a3ZtX2NhbGxfaHlwKF9fa3ZtX3RsYl9mbHVzaF92bWlkLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSk7XFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XFxuIH1cXG4gXFxuLWludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXFxuLVxcdFxcdFxcdFxcdCAgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxcbitzdGF0aWMgaW50IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHRnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm4gcGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGt2bV92bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdFxcdCBnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcXG4ge1xcbiBcXHR1NjQgc2l6ZSA9IG5yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcdHU2NCBhZGRyID0gZ2ZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcbi1cXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuLVxcdFxcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVxcdTAwM2VhcmNoLnBrdm0uaGFuZGxlKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5tbXUsIGFkZHIsIHNpemUpO1xcbitcXHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5tbXUsIGFkZHIsIHNpemUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0ICAgICBnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcXG4re1xcbitcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGdmbiwgbnJfcGFnZXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCAqc3RhZ2UyX21lbWNhY2hlX3phbGxvY19wYWdlKHZvaWQgKmFyZylcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jID0gYXJnO1xcbkBAIC0zMzcsMTMgKzM2MywyMCBAQCBzdGF0aWMgdm9pZCBfX3VubWFwX3N0YWdlMl9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCBwaHlzX2FkZHJfdCBzdGFydCwgdTY0XFxuIFxcdFxcdFxcdFxcdCAgIG1heV9ibG9jaykpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHQgICAgICB1NjQgc2l6ZSwgYm9vbCBtYXlfYmxvY2spXFxuK3tcXG4rXFx0X191bm1hcF9zdGFnZTJfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LFxcbiBcXHRcXHRcXHQgICAgdTY0IHNpemUsIGJvb2wgbWF5X2Jsb2NrKVxcbiB7XFxuLVxcdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKGt2bV9zMl9tbXVfdG9fa3ZtKG1tdSkpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9zMl9tbXVfdG9fa3ZtKG1tdSk7XFxuIFxcbi1cXHRfX3VubWFwX3N0YWdlMl9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3MyX29wcy1cXHUwMDNldm1fc3RhZ2UyX3VubWFwX3JhbmdlKVxcbitcXHRcXHRrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9zdGFnZTJfdW5tYXBfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fc3RhZ2UyX2ZsdXNoX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZClcXG5AQCAtOTYzLDYgKzk5NiwxOCBAQCBzdGF0aWMgdm9pZCBrdm1fc3RhZ2UyX2Rlc3Ryb3koc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QpXFxuIFxcdEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX2Rlc3Ryb3lfcGdkKShwZ3QpO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgKmFybTY0X3ZtX3MyX29wc1tWTV9GTEFWT1JfTUFYXSA9IHtcXG4rXFx0W1ZNX1ZIRV0gPSBcXHUwMDI2a3ZtX2RlZmF1bHRfdm1fczJfb3BzLFxcbitcXHRbVk1fTlZIRV0gPSBcXHUwMDI2a3ZtX2RlZmF1bHRfdm1fczJfb3BzLFxcbitcXHRbVk1fUEtWTV0gPSBcXHUwMDI2dW5wcm90ZWN0ZWRfcGt2bV9zMl9vcHMsXFxuK1xcdFtWTV9QUk9URUNURURfUEtWTV0gPSBcXHUwMDI2cHJvdGVjdGVkX3Brdm1fczJfb3BzLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQga3ZtX3ZtX2luaXRfdm1fczJfb3BzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbit7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMgPSBhcm02NF92bV9zMl9vcHNba3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvcl07XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1faW5pdF9zdGFnZTJfbW11IC0gSW5pdGlhbGlzZSBhIFMyIE1NVSBzdHJ1Y3R1cmVcXG4gICogQGt2bTpcXHRUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdHVyZVxcbkBAIC05ODMsNiArMTAyOCw5IEBAIGludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0XFxuIFxcdGludCBjcHUsIGVycjtcXG4gXFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7XFxuIFxcbitcXHQvKiBJbml0aWFsaXplIHRoZSBWTSBvcHMgZm9yIHRoZSBWTSBpbnN0YW5jZSBmb3IgdGhlIGZpcnN0IHRpbWUgKi9cXG4rXFx0aWYgKG1tdSA9PSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSlcXG4rXFx0XFx0a3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7XFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGFscmVhZHkgaGF2ZSBvdXIgcGFnZSB0YWJsZXMgaW4gcGxhY2UsIGFuZCB0aGF0IHRoZVxcbiBcXHQgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsXFxuQEAgLTE3MDUsNyArMTc1Myw3IEBAIHN0cnVjdCBrdm1fczJfZmF1bHRfdm1hX2luZm8ge1xcbiBcXHRib29sXFx0XFx0bWFwX25vbl9jYWNoZWFibGU7XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBrdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4rc3RhdGljIGludCBwcm90ZWN0ZWRfdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGT0xMX0hXUE9JU09OIHwgRk9MTF9MT05HVEVSTSB8IEZPTExfV1JJVEU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHMyZmQtXFx1MDAzZXZjcHU7XFxuQEAgLTIxNDMsNiArMjE5MSwyMiBAQCBzdGF0aWMgaW50IHVzZXJfbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0cmV0dXJuIGt2bV9zMl9mYXVsdF9tYXAoczJmZCwgXFx1MDAyNnMydmksIHByb3QsIG1lbWNhY2hlKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1fdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLVxcdTAwM2V2Y3B1O1xcbitcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGt2bV92Y3B1X3RyYXBfaXNfcGVybWlzc2lvbl9mYXVsdCh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQha3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCFrdm1fdmNwdV90cmFwX2lzX2V4ZWNfZmF1bHQodmNwdSkpO1xcbitcXG4rXFx0aWYgKGt2bV9zbG90X2hhc19nbWVtKHMyZmQtXFx1MDAzZW1lbXNsb3QpKVxcbitcXHRcXHRyZXQgPSBnbWVtX2Fib3J0KHMyZmQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHVzZXJfbWVtX2Fib3J0KHMyZmQpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKiBSZXNvbHZlIHRoZSBhY2Nlc3MgZmF1bHQgYnkgbWFraW5nIHRoZSBwYWdlIHlvdW5nIGFnYWluLiAqL1xcbiBzdGF0aWMgdm9pZCBoYW5kbGVfYWNjZXNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZmF1bHRfaXBhKVxcbiB7XFxuQEAgLTIyNTAsNiArMjMxNCw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3MyX3RyYW5zIG5lc3RlZF90cmFucywgKm5lc3RlZCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0dW5zaWduZWQgbG9uZyBlc3I7XFxuIFxcdHBoeXNfYWRkcl90IGZhdWx0X2lwYTsgLyogVGhlIGFkZHJlc3Mgd2UgZmF1bHRlZCBvbiAqL1xcbiBcXHRwaHlzX2FkZHJfdCBpcGE7IC8qIEFsd2F5cyB0aGUgSVBBIGluIHRoZSBMMSBndWVzdCBwaHlzIHNwYWNlICovXFxuQEAgLTI0MTEsMTkgKzI0NzYsNyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdC5odmFcXHRcXHQ9IGh2YSxcXG4gXFx0fTtcXG4gXFxuLVxcdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0cmV0ID0gcGt2bV9tZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCF3cml0ZV9mYXVsdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHQha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTtcXG4tXFxuLVxcdFxcdGlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSlcXG4tXFx0XFx0XFx0cmV0ID0gZ21lbV9hYm9ydChcXHUwMDI2czJmZCk7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0ID0gdXNlcl9tZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbi1cXHR9XFxuLVxcbitcXHRyZXQgPSBrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9tZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbiBcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdHJldCA9IDE7XFxuIG91dDpcXG5AQCAtMjQzNiwzOCArMjQ4OSw0MyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBib29sIGt2bV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuIHtcXG4tXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdF9fdW5tYXBfc3RhZ2UyX3JhbmdlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gubW11LCByYW5nZS1cXHUwMDNlc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0ICAgICAocmFuZ2UtXFx1MDAzZWVuZCAtIHJhbmdlLVxcdTAwM2VzdGFydCkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0ICAgICByYW5nZS1cXHUwMDNlbWF5X2Jsb2NrKTtcXG4rXFx0a3ZtX3N0YWdlMl91bm1hcF9yYW5nZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSwgcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuK1xcdFxcdFxcdFxcdChyYW5nZS1cXHUwMDNlZW5kIC0gcmFuZ2UtXFx1MDAzZXN0YXJ0KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRyYW5nZS1cXHUwMDNlbWF5X2Jsb2NrKTtcXG4gXFxuIFxcdGt2bV9uZXN0ZWRfczJfdW5tYXAoa3ZtLCByYW5nZS1cXHUwMDNlbWF5X2Jsb2NrKTtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1ib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbitzdGF0aWMgYm9vbCBrdm1fdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4ge1xcbiBcXHR1NjQgc2l6ZSA9IChyYW5nZS1cXHUwMDNlZW5kIC0gcmFuZ2UtXFx1MDAzZXN0YXJ0KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiBcXG4tXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuIFxcdHJldHVybiBLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKShrdm0tXFx1MDAzZWFyY2gubW11LnBndCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemUsIHRydWUpO1xcbit9XFxuK1xcbitib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QgfHwgIWt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2FnZV9nZm4pXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xcbiBcXHQvKlxcbiBcXHQgKiBUT0RPOiBIYW5kbGUgbmVzdGVkX21tdSBzdHJ1Y3R1cmVzIGhlcmUgdXNpbmcgdGhlIHJldmVyc2UgbWFwcGluZyBpblxcbiBcXHQgKiBhIGxhdGVyIHZlcnNpb24gb2YgcGF0Y2ggc2VyaWVzLlxcbiBcXHQgKi9cXG4gfVxcbiBcXG4tYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbitzdGF0aWMgYm9vbCBrdm1fdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiB7XFxuIFxcdHU2NCBzaXplID0gKHJhbmdlLVxcdTAwM2VlbmQgLSByYW5nZS1cXHUwMDNlc3RhcnQpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcbi1cXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5tbXUucGd0IHx8IGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSlcXG4rXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0cmV0dXJuIEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX3Rlc3RfY2xlYXJfeW91bmcpKGt2bS1cXHUwMDNlYXJjaC5tbXUucGd0LFxcbkBAIC0yNDc1LDYgKzI1MzMsMTUgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplLCBmYWxzZSk7XFxuIH1cXG4gXFxuK2Jvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXG4rXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndCB8fCAha3ZtLVxcdTAwM2VhcmNoLnZtX3MyX29wcy1cXHUwMDNldm1fdGVzdF9hZ2VfZ2ZuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3MyX29wcy1cXHUwMDNldm1fdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xcbit9XFxuK1xcbiBwaHlzX2FkZHJfdCBrdm1fbW11X2dldF9odHRicih2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBfX3BhKGh5cF9wZ3RhYmxlLVxcdTAwM2VwZ2QpO1xcbkBAIC0yNzk2LDMgKzI4NjMsMzMgQEAgdm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YXNfZW5hYmxlZClcXG4gXFxuIFxcdHRyYWNlX2t2bV90b2dnbGVfY2FjaGUoKnZjcHVfcGModmNwdSksIHdhc19lbmFibGVkLCBub3dfZW5hYmxlZCk7XFxuIH1cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwcm90ZWN0ZWRfdm1fczJfb3BzID0ge1xcbitcXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNcXHRcXHQ9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMsXFxuK1xcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVxcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcXG4rXFx0LypcXG4rXFx0ICogTm90IHN1cHBvcnRlZCBmb3IgUHJvdGVjdGVkIFZNcyB1bmRlciBwS1ZNXFxuK1xcdCAqIC52bV9hZ2VfZ2ZuXFxuK1xcdCAqIC52bV90ZXN0X2FnZV9nZm5cXG4rXFx0ICogLnZtX3N0YWdlMl91bm1hcF9yYW5nZVxcbitcXHQgKi9cXG4rXFx0LnZtX21lbV9hYm9ydFxcdFxcdFxcdD0gcHJvdGVjdGVkX3ZtX21lbV9hYm9ydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwa3ZtX3ZtX3MyX29wcyA9IHtcXG4rXFx0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXFx0XFx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxcbitcXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcXHQ9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsXFxuK1xcdC52bV9hZ2VfZ2ZuXFx0XFx0XFx0PSBrdm1fdm1fYWdlX2dmbixcXG4rXFx0LnZtX3Rlc3RfYWdlX2dmblxcdFxcdD0ga3ZtX3ZtX3Rlc3RfYWdlX2dmbixcXG4rXFx0LnZtX3N0YWdlMl91bm1hcF9yYW5nZVxcdFxcdD0ga3ZtX3ZtX3N0YWdlMl91bm1hcF9yYW5nZSxcXG4rXFx0LnZtX21lbV9hYm9ydFxcdFxcdFxcdD0ga3ZtX3ZtX21lbV9hYm9ydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBrdm1fZGVmYXVsdF92bV9zMl9vcHMgPSB7XFxuK1xcdC52bV9mbHVzaF9yZW1vdGVfdGxic1xcdFxcdD0ga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxcbitcXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcXHQ9IGt2bV92bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcXG4rXFx0LnZtX2FnZV9nZm5cXHRcXHRcXHQ9IGt2bV92bV9hZ2VfZ2ZuLFxcbitcXHQudm1fdGVzdF9hZ2VfZ2ZuXFx0XFx0PSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLFxcbitcXHQudm1fc3RhZ2UyX3VubWFwX3JhbmdlXFx0XFx0PSBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlLFxcbitcXHQudm1fbWVtX2Fib3J0XFx0XFx0XFx0PSBrdm1fdm1fbWVtX2Fib3J0LFxcbit9O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9wa3ZtLmNcXG5pbmRleCA4ZTRjNmU0YmVjMTIzLi4zOTQ4ZmE0NmY0ZDc1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xcbkBAIC0yNDAsNyArMjQwLDYgQEAgaW50IHBrdm1faW5pdF9ob3N0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnBrdm0uaGFuZGxlID0gcmV0O1xcbi1cXHRrdm0tXFx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7XFxuIFxcdGlmIChwcm90ZWN0ZWQpIHtcXG4gXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJrdm06IHByb3RlY3RlZCBWTXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgZm9yIGRldmVsb3BtZW50IG9ubHksIHRhaW50aW5nIGtlcm5lbFxcXFxuXFxcIik7XFxuIFxcdFxcdGFkZF90YWludChUQUlOVF9VU0VSLCBMT0NLREVQX1NUSUxMX09LKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xcbmluZGV4IDRjZWFiYWE0YzMwYmQuLjQxZmJmZDkyY2QyOTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xcbkBAIC02Nyw5ICs2Nyw5IEBAIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIGJhc2U7XFxuIH1cXG4gXFxuLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpXFxuK2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbi1cXHRyZXR1cm4gISFzY2hlZF9pbmZvX29uKCk7XFxuK1xcdHJldHVybiAhIXNjaGVkX2luZm9fb24oKSBcXHUwMDI2XFx1MDAyNiAoIWt2bSB8fCAha3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKTtcXG4gfVxcbiBcXG4gaW50IGt2bV9hcm1fcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtODEsNyArODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IGlkeDtcXG4gXFxuLVxcdGlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkgfHxcXG4rXFx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoa3ZtKSB8fFxcbiBcXHQgICAgYXR0ci1cXHUwMDNlYXR0ciAhPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSlcXG4gXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gXFxuQEAgLTExMCw3ICsxMTAsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR1NjQgX191c2VyICp1c2VyID0gKHU2NCBfX3VzZXIgKilhdHRyLVxcdTAwM2VhZGRyO1xcbiBcXHR1NjQgaXBhO1xcbiBcXG4tXFx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSB8fFxcbitcXHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVxcdTAwM2Vrdm0pIHx8XFxuIFxcdCAgICBhdHRyLVxcdTAwM2VhdHRyICE9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBKVxcbiBcXHRcXHRyZXR1cm4gLUVOWElPO1xcbiBcXG5AQCAtMTI2LDcgKzEyNiw3IEBAIGludCBrdm1fYXJtX3B2dGltZV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3dpdGNoIChhdHRyLVxcdTAwM2VhdHRyKSB7XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEE6XFxuLVxcdFxcdGlmIChrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSlcXG4rXFx0XFx0aWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gLUVOWElPO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ybWkuYyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41ZWNjOGIzNDk4Njk4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS92aXJ0LmhcXHUwMDNlXFxuK1xcbit2b2lkIGt2bV9pbml0X3JtaSh2b2lkKVxcbit7XFxuK1xcdGlmIChrdm1fZ2V0X21vZGUoKSAhPSBLVk1fTU9ERV9STU0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIFRPRE86IENoZWNrIGlmIHRoZSBSTUkgaXMgYXZhaWxhYmxlICovXFxuK1xcbitcXHQvKiBGdXR1cmUgcGF0Y2ggd2lsbCBlbmFibGUgc3RhdGljIGJyYW5jaCBrdm1fcm1pX2lzX2F2YWlsYWJsZSAqL1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuaW5kZXggNDRhYWU1MmM0NzNkNy4uYTU4YzFmYzEzZWExNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xcbkBAIC01NjM4LDE4ICs1NjM4LDE4IEBAIGludCBrdm1fYXJtX3N5c19yZWdfc2V0X3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnXFxuIFxcdFxcdFxcdFxcdCAgICBzeXNfcmVnX2Rlc2NzLCBBUlJBWV9TSVpFKHN5c19yZWdfZGVzY3MpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyh2b2lkKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0cmV0dXJuIENTU0VMUl9NQVg7XFxuK1xcdHJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KSA/IDAgOiBDU1NFTFJfTUFYO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyh1NjQgX191c2VyICp1aW5kaWNlcylcXG4rc3RhdGljIGludCB3cml0ZV9kZW11eF9yZWdpZHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kaWNlcylcXG4ge1xcbiBcXHR1NjQgdmFsID0gS1ZNX1JFR19BUk02NCB8IEtWTV9SRUdfU0laRV9VMzIgfCBLVk1fUkVHX0FSTV9ERU1VWDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbiBcXHR2YWwgfD0gS1ZNX1JFR19BUk1fREVNVVhfSURfQ0NTSURSO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1NTRUxSX01BWDsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZGVtdXhfcmVncyh2Y3B1KTsgaSsrKSB7XFxuIFxcdFxcdGlmIChwdXRfdXNlcih2YWwgfCBpLCB1aW5kaWNlcykpXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHR1aW5kaWNlcysrO1xcbkBAIC01NjkzLDExICs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcmVhbG1fc3lzX3JlZ19oaWRkZW5fdXNlcihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1NjQgcmVnKVxcbit7XFxuK1xcdHN3aXRjaCAocmVnKSB7XFxuK1xcdGNhc2UgU1lTX0lEX0FBNjRERlIwX0VMMTpcXG4rXFx0Y2FzZSBTWVNfUE1DUl9FTDA6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB3YWxrX29uZV9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxcbiBcXHRcXHRcXHQgICAgdTY0IF9fdXNlciAqKnVpbmQsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgKnRvdGFsKVxcbiB7XFxuK1xcdGlmICh2Y3B1X2lzX3JlYyh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAga3ZtX3JlYWxtX3N5c19yZWdfaGlkZGVuX3VzZXIodmNwdSwgcmVnX3RvX2VuY29kaW5nKHJkKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWdub3JlIHJlZ2lzdGVycyB3ZSB0cmFwIGJ1dCBkb24ndCBzYXZlLFxcbiBcXHQgKiBhbmQgZm9yIHdoaWNoIG5vIGN1c3RvbSB1c2VyIGFjY2Vzc29yIGlzIHByb3ZpZGVkLlxcbkBAIC01NzM1LDcgKzU3NTAsNyBAQCBzdGF0aWMgaW50IHdhbGtfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kKVxcbiBcXG4gdW5zaWduZWQgbG9uZyBrdm1fYXJtX251bV9zeXNfcmVnX2Rlc2NzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3MoKVxcbitcXHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSlcXG4gXFx0XFx0KyB3YWxrX3N5c19yZWdzKHZjcHUsICh1NjQgX191c2VyICopTlVMTCk7XFxuIH1cXG4gXFxuQEAgLTU3NDgsNyArNTc2Myw3IEBAIGludCBrdm1fYXJtX2NvcHlfc3lzX3JlZ19pbmRpY2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdHVpbmRpY2VzICs9IGVycjtcXG4gXFxuLVxcdHJldHVybiB3cml0ZV9kZW11eF9yZWdpZHModWluZGljZXMpO1xcbitcXHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHZjcHUsIHVpbmRpY2VzKTtcXG4gfVxcbiBcXG4gI2RlZmluZSBLVk1fQVJNX0ZFQVRVUkVfSURfUkFOR0VfSU5ERVgocilcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmggYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXFxuaW5kZXggZjg2YTAwNmQ2NzEzNi4uMDZjMjA2MTJlOWU3ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXFxuKysrIGIvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaFxcbkBAIC0xMCw2ICsxMCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9wc2NpLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuK1xcbiAjZGVmaW5lIEtWTV9BUk1fUFNDSV8wXzFcXHRQU0NJX1ZFUlNJT04oMCwgMSlcXG4gI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yXFx0UFNDSV9WRVJTSU9OKDAsIDIpXFxuICNkZWZpbmUgS1ZNX0FSTV9QU0NJXzFfMFxcdFBTQ0lfVkVSU0lPTigxLCAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMjo1Mi4yODI3OTk3MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NTAzOTU3MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgQVJNNjQgS1ZNIGFuZCBBcm0gQ29uZmlkZW50aWFsIENvbXB1dGUgQXJjaGl0ZWN0dXJlIChDQ0EgLyBSZWFsbSBNYW5hZ2VtZW50IEV4dGVuc2lvbikgY29kZSBleGNsdXNpdmVseSwgYXMgd2VsbCBhcyBkb2N1bWVudGF0aW9uLiBTaW5jZSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgYWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGV4Y2x1c2l2ZSB0byBhcm02NCBhbmQgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmOTVkZTk1NGQ0MTNkZjYxZjgzODI3NTg5ZGUwYjJkY2Q1ZWFkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIwOjEyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggNjg2NDdmZjRiZGQyNC4uMWFmZTNkZjNiOTIzZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTMyNTYsNiArMzI1Niw5IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0bmVzdGVkOiBWSEUtYmFzZWQgbW9kZSB3aXRoIHN1cHBvcnQgZm9yIG5lc3RlZFxuIFx0XHRcdFx0dmlydHVhbGl6YXRpb24uIFJlcXVpcmVzIGF0IGxlYXN0IEFSTXY4LjRcbiBcdFx0XHRcdGhhcmR3YXJlICh3aXRoIEZFQVRfTlYyKS5cbitcdFx0XHRybW06IFN1cHBvcnQgZm9yIHJ1bm5pbmcgY29uZmlkZW50aWFsIGd1ZXN0cyBpbiBSZWFsbVxuK1x0XHRcdCAgICAgd29ybGQgdXNpbmcgUk1NLCBhcyBkZWZpbmVkIGJ5IEFybSBDb25maWRlbnRpYWxcbitcdFx0XHQgICAgIENvbXB1dGUgQXJjaGl0ZWN0dXJlIChDQ0EpXG4gXG4gXHRcdFx0RGVmYXVsdHMgdG8gVkhFL25WSEUgYmFzZWQgb24gaGFyZHdhcmUgc3VwcG9ydC4gU2V0dGluZ1xuIFx0XHRcdG1vZGUgdG8gXCJwcm90ZWN0ZWRcIiB3aWxsIGRpc2FibGUga2V4ZWMgYW5kIGhpYmVybmF0aW9uXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG5pbmRleCBhM2MxOTI4YmRmNzQzLi5kMzYwYThiMDViOGJmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcbkBAIC03OTMsNCArNzkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVzZXRfdmNwdV9wc2NpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCAwLCByZXNldF9zdGF0ZS1cdTAwM2VyMCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgZW51bSByZWFsbV9zdGF0ZSBrdm1fcmVhbG1fc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2gucmVhbG0uc3RhdGUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NldF9yZWFsbV9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHQgICAgICAgZW51bSByZWFsbV9zdGF0ZSBuZXdfc3RhdGUpXG4re1xuK1x0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC5yZWFsbS5zdGF0ZSwgbmV3X3N0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9pc19jcmVhdGVkKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRyZXR1cm4ga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXHUwMDI2XHUwMDI2IGt2bV9yZWFsbV9zdGF0ZShrdm0pICE9IFJFQUxNX1NUQVRFX05PTkU7XG4rfVxuK1xuICNlbmRpZiAvKiBfX0FSTTY0X0tWTV9FTVVMQVRFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uZmJmZDg1ZGM5OTllZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjcsNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXNtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3JtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3ZuY3JfbWFwcGluZy5oXHUwMDNlXG4gXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfSU5UQ19JTklUSUFMSVpFRFxuQEAgLTY5LDYgKzcwLDcgQEAgZW51bSBrdm1fbW9kZSB7XG4gXHRLVk1fTU9ERV9ERUZBVUxULFxuIFx0S1ZNX01PREVfUFJPVEVDVEVELFxuIFx0S1ZNX01PREVfTlYsXG4rXHRLVk1fTU9ERV9STU0sXG4gXHRLVk1fTU9ERV9OT05FLFxuIH07XG4gI2lmZGVmIENPTkZJR19LVk1cbkBAIC0xNTAsNiArMTUyLDI2IEBAIHN0cnVjdCBrdm1fdm1pZCB7XG4gXHRhdG9taWM2NF90IGlkO1xuIH07XG4gXG4rc3RydWN0IGt2bV92Y3B1X29wcyB7XG4rXHR2b2lkICgqdmNwdV9sb2FkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuK1x0dm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK307XG4rXG4rc3RydWN0IGt2bV9nZm5fcmFuZ2U7XG4rc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjO1xuK1xuK3N0cnVjdCBrdm1fdm1fczJfb3BzIHtcbitcdGJvb2wgKCp2bV9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rXHRib29sICgqdm1fdGVzdF9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rXHRpbnQgKCp2bV9mbHVzaF9yZW1vdGVfdGxicykoc3RydWN0IGt2bSAqa3ZtKTtcbitcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbitcdFx0XHRcdFx0ICB1NjQgbnJfcGFnZXMpO1xuK1x0dm9pZCAoKnZtX3N0YWdlMl91bm1hcF9yYW5nZSkoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSxcbitcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0XHRcdCAgICAgIGJvb2wgbWF5X2Jsb2NrKTtcbitcdGludCAoKnZtX21lbV9hYm9ydCkoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKTtcbit9O1xuK1xuIHN0cnVjdCBrdm1fczJfbW11IHtcbiBcdHN0cnVjdCBrdm1fdm1pZCB2bWlkO1xuIFxuQEAgLTI1Nyw3ICsyNzksNiBAQCBzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSB7XG4gXHRwa3ZtX2hhbmRsZV90IGhhbmRsZTtcbiBcdHN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHRlYXJkb3duX21jO1xuIFx0c3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgc3RhZ2UyX3RlYXJkb3duX21jO1xuLVx0Ym9vbCBpc19wcm90ZWN0ZWQ7XG4gXHRib29sIGlzX2NyZWF0ZWQ7XG4gXG4gXHQvKlxuQEAgLTMwNiw5ICszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQge1xuIFx0X19OUl9GR1RfR1JPVVBfSURTX19cbiB9O1xuIFxuK2VudW0ga3ZtX2FybV92bV9mbGF2b3Ige1xuK1x0Vk1fTlZIRSxcbitcdFZNX1ZIRSxcbitcdFZNX1BLVk0sXHRcdC8qIE5vcm1hbCBndWVzdHMgb24gUEtWTSAqL1xuK1x0TUFSS0VSKF9fVk1fQ09ORklERU5USUFMKSxcbitcdFZNX1BST1RFQ1RFRF9QS1ZNLFx0LyogUHJvdGVjdGVkIFZNICovXG4rXHRWTV9SRUFMTSxcdFx0LyogQ0NBICovXG4rXHRWTV9GTEFWT1JfTUFYLFxuK307XG4rXG4gc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11IG1tdTtcbiBcbitcdGVudW0ga3ZtX2FybV92bV9mbGF2b3Igdm1fZmxhdm9yO1xuIFx0LypcbiBcdCAqIEZpbmUtR3JhaW5lZCBVTkRFRiwgbWltaWNraW5nIHRoZSBGR1QgbGF5b3V0IGRlZmluZWQgYnkgdGhlXG4gXHQgKiBhcmNoaXRlY3R1cmUuIFdlIHRyYWNrIHRoZW0gZ2xvYmFsbHksIGFzIHdlIHByZXNlbnQgdGhlXG5AQCAtMzE4LDYgKzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHU2NCBmZ3VbX19OUl9GR1RfR1JPVVBfSURTX19dO1xuIFxuK1x0Y29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgKnZtX3MyX29wcztcbitcbiBcdC8qXG4gXHQgKiBTdGFnZSAyIHBhZ2luZyBzdGF0ZSBmb3IgVk1zIHdpdGggbmVzdGVkIFMyIHVzaW5nIGEgdmlydHVhbFxuIFx0ICogVk1JRC5cbkBAIC00MTcsMTEgKzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4gXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbi1cdC8qXG4tXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcbi1cdCAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuXG4tXHQgKi9cbi1cdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4rXHR1bmlvbiB7XG4rXHRcdC8qXG4rXHRcdCAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJ3Brdm0uaGFuZGxlJyBpcyB1c2VkIHRvIGxvb2t1cFxuK1x0XHQgKiB0aGUgYXNzb2NpYXRlZCBwS1ZNIGluc3RhbmNlIGluIHRoZSBoeXBlcnZpc29yLlxuK1x0XHQgKi9cbitcdFx0c3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTtcbitcdFx0c3RydWN0IHJlYWxtIHJlYWxtO1xuK1x0fTtcbiBcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuIFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cbkBAIC04NDYsNiArODgzLDcgQEAgc3RydWN0IHZuY3JfdGxiO1xuIFxuIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgY3R4dDtcbitcdGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgKnZjcHVfb3BzO1xuIFxuIFx0LypcbiBcdCAqIEd1ZXN0IGZsb2F0aW5nIHBvaW50IHN0YXRlXG5AQCAtMTM0Niw3ICsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1ib29sIGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2b2lkKTtcbitib29sIGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuIGludCBrdm1fYXJtX3B2dGltZV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTUwNCw5ICsxNTQyLDEzIEBAIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpO1xuIFxuICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX0ZMVVNIX1JFTU9URV9UTEJTX1JBTkdFXG4gXG4tI2RlZmluZSBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSlcdChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGt2bSktXHUwMDNlYXJjaC5wa3ZtLmlzX3Byb3RlY3RlZClcbisjZGVmaW5lIGt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKVx0KChrdm0pLVx1MDAzZWFyY2gudm1fZmxhdm9yIFx1MDAzZT0gX19WTV9DT05GSURFTlRJQUwpXG4rI2RlZmluZSBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSlcdCgoa3ZtKS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9PSBWTV9QUk9URUNURURfUEtWTSlcbisjZGVmaW5lIGt2bV92bV9pc19yZWFsbShrdm0pXHRcdCgoa3ZtKS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9PSBWTV9SRUFMTSlcbiBcbisjZGVmaW5lIHZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpXHRrdm1fdm1faXNfY29uZmlkZW50aWFsKCh2Y3B1KS1cdTAwM2Vrdm0pXG4gI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KVx0XHRrdm1fdm1faXNfcHJvdGVjdGVkKCh2Y3B1KS1cdTAwM2Vrdm0pXG4rI2RlZmluZSB2Y3B1X2lzX3JlYyh2Y3B1KVx0XHRrdm1fdm1faXNfcmVhbG0oKHZjcHUpLVx1MDAzZWt2bSlcbiBcbiBpbnQga3ZtX2FybV92Y3B1X2ZpbmFsaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGZlYXR1cmUpO1xuIGJvb2wga3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuaW5kZXggNDFhODY4NzkzOGViNi4uYzJlNGIyOWU2MDVmYyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG5AQCAtOCw5ICs4LDEzIEBAXG4gI2RlZmluZSBfX0FSTTY0X0tWTV9QR1RBQkxFX0hfX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JidHJlZV90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbitzdHJ1Y3Qga3ZtX3MyX21tdTtcbitcbiAjZGVmaW5lIEtWTV9QR1RBQkxFX0ZJUlNUX0xFVkVMXHRcdC0xXG4gI2RlZmluZSBLVk1fUEdUQUJMRV9MQVNUX0xFVkVMXHRcdDNcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcbmluZGV4IGJlZWEwMGU2OTNhMGEuLjU0YTYxOGQ4ODdmYTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3Brdm0uaFxuQEAgLTcsOSArNyw5IEBAXG4gI2RlZmluZSBfX0FSTTY0X0tWTV9QS1ZNX0hfX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FybV9mZmEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2FzbS9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbiBcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBWTXMgdGhhdCBjYW4gY28tZXhpc3QgdW5kZXIgcEtWTS4gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3JtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRmNWM3NWEyN2I1YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcm1pLmhcbkBAIC0wLDAgKzEsNjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDIzLTIwMjYgQVJNIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9fQVNNX0tWTV9STUlfSFxuKyNkZWZpbmUgX19BU01fS1ZNX1JNSV9IXG4rXG4rLyoqXG4rICogZW51bSByZWFsbV9zdGF0ZSAtIFN0YXRlIG9mIGEgUmVhbG1cbisgKlxuKyAqIE1pcnJvcnMgdGhlIFJNTSdzIFJlYWxtIGxpZmVjeWNsZSBzdGF0ZXMgd2hlcmUgdGhleSBhcmUgbWVhbmluZ2Z1bCB0byBLVk0sXG4rICogd2l0aCBSRUFMTV9TVEFURV9EWUlORyBiZWluZyBhIEtWTS1pbnRlcm5hbCBzdGF0ZSB1c2VkIHRvIHByZXZlbnQgZnVydGhlclxuKyAqIHJlcXVlc3RzIHdoaWxlIHRlYXJkb3duIGlzIGluIHByb2dyZXNzLiBLVk0gZG9lcyBub3QgdHJhY2sgUkVBTE1fU1lTVEVNX09GRlxuKyAqIG9yIFJFQUxNX1pPTUJJRSBzZXBhcmF0ZWx5IGFzIHRoZXkgbmF0dXJhbGx5IGxlYWQgdG8gdGVhcmRvd24uXG4rICovXG4rZW51bSByZWFsbV9zdGF0ZSB7XG4rXHQvKipcbitcdCAqIEBSRUFMTV9TVEFURV9OT05FOlxuK1x0ICogICAgICBSZWFsbSBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQuIHJtaV9yZWFsbV9jcmVhdGUoKSBoYXMgbm90XG4rXHQgKiAgICAgIHlldCBiZWVuIGNhbGxlZC5cbitcdCAqL1xuK1x0UkVBTE1fU1RBVEVfTk9ORSxcbitcdC8qKlxuK1x0ICogQFJFQUxNX1NUQVRFX05FVzpcbitcdCAqICAgICAgUmVhbG0gaXMgdW5kZXIgY29uc3RydWN0aW9uLCBybWlfcmVhbG1fY3JlYXRlKCkgaGFzIGJlZW5cbitcdCAqICAgICAgY2FsbGVkLCBidXQgaXQgaXMgbm90IHlldCBhY3RpdmF0ZWQuIFBhZ2VzIG1heSBiZSBwb3B1bGF0ZWQuXG4rXHQgKi9cbitcdFJFQUxNX1NUQVRFX05FVyxcbitcdC8qKlxuK1x0ICogQFJFQUxNX1NUQVRFX0FDVElWRTpcbitcdCAqICAgICAgUmVhbG0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgaXMgZWxpZ2libGUgZm9yIGV4ZWN1dGlvbiB3aXRoXG4rXHQgKiAgICAgIHJtaV9yZWNfZW50ZXIoKS4gUGFnZXMgbWF5IG5vIGxvbmdlciBiZSBwb3B1bGF0ZWQgd2l0aFxuK1x0ICogICAgICBybWlfZGF0YV9jcmVhdGUoKS5cbitcdCAqL1xuK1x0UkVBTE1fU1RBVEVfQUNUSVZFLFxuK1x0LyoqXG4rXHQgKiBAUkVBTE1fU1RBVEVfRFlJTkc6XG4rXHQgKiAgICAgIFJlYWxtIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZCBvciBoYXMgYWxyZWFkeSBiZWVuXG4rXHQgKiAgICAgIGRlc3Ryb3llZC5cbitcdCAqL1xuK1x0UkVBTE1fU1RBVEVfRFlJTkcsXG4rXHQvKipcbitcdCAqIEBSRUFMTV9TVEFURV9ERUFEOlxuK1x0ICogICAgICBSZWFsbSBoYXMgYmVlbiBkZXN0cm95ZWQuXG4rXHQgKi9cbitcdFJFQUxNX1NUQVRFX0RFQURcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCByZWFsbSAtIEFkZGl0aW9uYWwgcGVyIFZNIGRhdGEgZm9yIGEgUmVhbG1cbisgKlxuKyAqIEBzdGF0ZTogVGhlIGxpZmV0aW1lIHN0YXRlIG1hY2hpbmUgZm9yIHRoZSByZWFsbVxuKyAqL1xuK3N0cnVjdCByZWFsbSB7XG4rXHRlbnVtIHJlYWxtX3N0YXRlIHN0YXRlO1xuK307XG4rXG4rdm9pZCBrdm1faW5pdF9ybWkodm9pZCk7XG4rXG4rI2VuZGlmIC8qIF9fQVNNX0tWTV9STUlfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbmluZGV4IGI1NDY3MDNjM2FiOWEuLjkyY2VjNDI5NTJmNDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZpcnQuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbkBAIC04Nyw2ICs4Nyw3IEBAIHZvaWQgX19oeXBfcmVzZXRfdmVjdG9ycyh2b2lkKTtcbiBib29sIGlzX2t2bV9hcm1faW5pdGlhbGlzZWQodm9pZCk7XG4gXG4gREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9wcm90ZWN0ZWRfbW9kZV9pbml0aWFsaXplZCk7XG4rREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9ybWlfaXNfYXZhaWxhYmxlKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGt2bV9pbml0aWFsaXplZCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5pbmRleCA1OTYxMmQyZjI3N2MxLi5lZDNjZjMwZWIwNmU3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5AQCAtMTYsNyArMTYsNyBAQCBDRkxBR1NfaGFuZGxlX2V4aXQubyArPSAtV25vLW92ZXJyaWRlLWluaXRcbiBrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuIFx0IGluamVjdF9mYXVsdC5vIHZhX2xheW91dC5vIGhhbmRsZV9leGl0Lm8gY29uZmlnLm8gXFxcbiBcdCBndWVzdC5vIGRlYnVnLm8gcmVzZXQubyBzeXNfcmVncy5vIHN0YWNrdHJhY2UubyBcXFxuLVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuK1x0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBybWkubyBcXFxuIFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggNmFjMzMyMWY0YzU3NS4uM2VkZGY0NGY3YjFkZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG5AQCAtNTYsMTEgKzU2LDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3Modm9pZClcbiBcdHJldHVybiBrdm1fdmdpY19nbG9iYWxfc3RhdGUubm9faHdfZGVhY3RpdmF0aW9uID8gVkdJQ19JUlFfU1dfUkVTQU1QTEUgOiAwO1xuIH1cbiBcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcmVhbG1fdGltZXJfZ2V0X2lycV9mbGFncyh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBSTUlfUkVDX0VOVEVSIHJlamVjdHMgTFJzIHdpdGggdGhlIEhXIGJpdCBzZXQsIHNvIHVzZSB0aGUgZXhpc3RpbmdcbitcdCAqIHNvZnR3YXJlIHJlc2FtcGxpbmcgbWVjaGFuaXNtIGZvciBSZWFsbSB0aW1lciBpbnRlcnJ1cHRzLlxuK1x0ICovXG4rXHRyZXR1cm4gVkdJQ19JUlFfU1dfUkVTQU1QTEU7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX29wcyBhcmNoX3RpbWVyX2lycV9vcHMgPSB7XG4gXHQuZ2V0X2ZsYWdzXHQgPSBrdm1fYXJjaF90aW1lcl9nZXRfaXJxX2ZsYWdzLFxuIFx0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX29wcyByZWFsbV90aW1lcl9pcnFfb3BzID0ge1xuK1x0LmdldF9mbGFnc1x0ID0ga3ZtX3JlYWxtX3RpbWVyX2dldF9pcnFfZmxhZ3MsXG4rXHQuZ2V0X2lucHV0X2xldmVsID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lucHV0X2xldmVsLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0ge1xuIFx0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiBcdC5xdWV1ZV9pcnFfdW5sb2NrID0gdmdpY192NV9wcGlfcXVldWVfaXJxX3VubG9jayxcbkBAIC0xMDc5LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCB0aW1lcl9jb250ZXh0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdGltZXJpZClcbiBcbiBcdGN0eHQtXHUwMDNldGltZXJfaWQgPSB0aW1lcmlkO1xuIFxuLVx0aWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0aWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSkge1xuIFx0XHRpZiAodGltZXJpZCA9PSBUSU1FUl9WVElNRVIpXG4gXHRcdFx0Y3R4dC1cdTAwM2VvZmZzZXQudm1fb2Zmc2V0ID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGltZXJfZGF0YS52b2Zmc2V0O1xuIFx0XHRlbHNlXG5AQCAtMTExMCw3ICsxMTI0LDcgQEAgdm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dGltZXJfY29udGV4dF9pbml0KHZjcHUsIGkpO1xuIFxuIFx0LyogU3luY2hyb25pemUgb2Zmc2V0cyBhY3Jvc3MgdGltZXJzIG9mIGEgVk0gaWYgbm90IGFscmVhZHkgcHJvdmlkZWQgKi9cbi1cdGlmICghdmNwdV9pc19wcm90ZWN0ZWQodmNwdSkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIXZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICF0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZNX0NPVU5URVJfT0ZGU0VULCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmZsYWdzKSkge1xuIFx0XHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfdnRpbWVyKHZjcHUpLCBrdm1fcGh5c190aW1lcl9yZWFkKCkpO1xuIFx0XHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfcHRpbWVyKHZjcHUpLCAwKTtcbkBAIC0xNjA5LDggKzE2MjMsMTIgQEAgaW50IGt2bV90aW1lcl9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0Z2V0X3RpbWVyX21hcCh2Y3B1LCBcdTAwMjZtYXApO1xuIFxuLVx0b3BzID0gdmdpY19pc192NSh2Y3B1LVx1MDAzZWt2bSkgPyBcdTAwMjZhcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NSA6XG4tXHRcdFx0XHQgICAgICBcdTAwMjZhcmNoX3RpbWVyX2lycV9vcHM7XG4rXHRpZiAodmNwdV9pc19yZWModmNwdSkpXG4rXHRcdG9wcyA9IFx1MDAyNnJlYWxtX3RpbWVyX2lycV9vcHM7XG4rXHRlbHNlIGlmICh2Z2ljX2lzX3Y1KHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0b3BzID0gXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzX3ZnaWNfdjU7XG4rXHRlbHNlXG4rXHRcdG9wcyA9IFx1MDAyNmFyY2hfdGltZXJfaXJxX29wcztcbiBcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBucl90aW1lcnModmNwdSk7IGkrKylcbiBcdFx0a3ZtX3ZnaWNfc2V0X2lycV9vcHModmNwdSwgdGltZXJfaXJxKHZjcHVfZ2V0X3RpbWVyKHZjcHUsIGkpKSwgb3BzKTtcbkBAIC0xNzM2LDcgKzE3NTQsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX3NldF9jb3VudGVyX29mZnNldChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRpZiAob2Zmc2V0LVx1MDAzZXJlc2VydmVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXG4rXHRpZiAoa3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDhiMDgwODA0YmM5MGIuLjNmZTVhNGY3NzczOGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC00Miw2ICs0Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3JtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhY2t0cmFjZS9udmhlLmhcdTAwM2VcbiBcbkBAIC03NCw2ICs3NSw4IEBAIHN0cnVjdCBrdm1faW9jdGxfY2FwX21hcCB7XG4gXHRsb25nIGV4dDtcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tWTV9GTEFWT1JfTUFYXTtcbitcbiAvKiBNYWtlIEtWTV9DQVBfTlJfVkNQVVMgdGhlIHJlZmVyZW5jZSBmb3IgZmVhdHVyZXMgd2UgYWx3YXlzIHN1cHBvcnRlZCAqL1xuICNkZWZpbmUgS1ZNX0NBUF9BUk1fQkFTSUNcdEtWTV9DQVBfTlJfVkNQVVNcbiBcbkBAIC0xMTEsNiArMTE0LDggQEAgbG9uZyBrdm1fZ2V0X2NhcF9mb3Jfa3ZtX2lvY3RsKHVuc2lnbmVkIGludCBpb2N0bCwgbG9uZyAqZXh0KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9ybWlfaXNfYXZhaWxhYmxlKTtcbitcbiBERUNMQVJFX0tWTV9IWVBfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1faHlwX3ZlY3Rvcik7XG4gXG4gREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywga3ZtX2FybV9oeXBfc3RhY2tfYmFzZSk7XG5AQCAtMTMyLDYgKzEzNywyNSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3ZjcHVfZXhpdGluZ19ndWVzdF9tb2RlKHZjcHUpID09IElOX0dVRVNUX01PREU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGt2bV9yZWFsbV9leHRfYWxsb3dlZChsb25nIGV4dClcbit7XG4rXHRzd2l0Y2ggKGV4dCkge1xuK1x0Y2FzZSBLVk1fQ0FQX0lSUUNISVA6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0k6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0lfMF8yOlxuK1x0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuK1x0Y2FzZSBLVk1fQ0FQX01BWF9WQ1BVUzpcbitcdGNhc2UgS1ZNX0NBUF9NQVhfVkNQVV9JRDpcbitcdGNhc2UgS1ZNX0NBUF9NU0lfREVWSUQ6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1ZNX0lQQV9TSVpFOlxuK1x0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0FERFJFU1M6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1BUUkFVVEhfR0VORVJJQzpcbitcdGNhc2UgS1ZNX0NBUF9TWU5DX01NVTpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIHtcbkBAIC0xNDMsNiArMTY3LDkgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWt2bV9wa3ZtX2V4dF9hbGxvd2VkKGt2bSwgY2FwLVx1MDAzZWNhcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXHUwMDI2XHUwMDI2ICFrdm1fcmVhbG1fZXh0X2FsbG93ZWQoY2FwLVx1MDAzZWNhcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3dpdGNoIChjYXAtXHUwMDNlY2FwKSB7XG4gXHRjYXNlIEtWTV9DQVBfQVJNX05JU1ZfVE9fVVNFUjpcbiBcdFx0ciA9IDA7XG5AQCAtMjE0LDYgKzI0MSwyNiBAQCBzdGF0aWMgaW50IGt2bV9hcm1fZGVmYXVsdF9tYXhfdmNwdXModm9pZClcbiBcdHJldHVybiB2Z2ljX3ByZXNlbnQgPyBrdm1fdmdpY19nZXRfbWF4X3ZjcHVzKCkgOiBLVk1fTUFYX1ZDUFVTO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9pbml0X3ZtX2ZsYXZvcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbit7XG4rXHRib29sIHByb3RlY3RlZCA9IHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQ7XG4rXG4rXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcbitcdFx0aWYgKHByb3RlY3RlZClcbitcdFx0XHRrdm0tXHUwMDNlYXJjaC52bV9mbGF2b3IgPSBWTV9QUk9URUNURURfUEtWTTtcbitcdFx0ZWxzZVxuK1x0XHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1BLVk07XG4rXHR9IGVsc2UgaWYgKHByb3RlY3RlZCkge1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH0gZWxzZSBpZiAoaGFzX3ZoZSgpKSB7XG4rXHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1ZIRTtcbitcdH0gZWxzZSB7XG4rXHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICoga3ZtX2FyY2hfaW5pdF92bSAtIGluaXRpYWxpemVzIGEgVk0gZGF0YSBzdHJ1Y3R1cmVcbiAgKiBAa3ZtOlx0cG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdFxuQEAgLTIzNiw2ICsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuICNlbmRpZlxuIFxuK1x0cmV0ID0ga3ZtX2luaXRfdm1fZmxhdm9yKGt2bSwgdHlwZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0a3ZtX2luaXRfbmVzdGVkKGt2bSk7XG4gXG4gXHRyZXQgPSBrdm1fc2hhcmVfaHlwKGt2bSwga3ZtICsgMSk7XG5AQCAtMjYwLDkgKzMxMSw2IEBAIGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuIFx0XHRyZXQgPSBwa3ZtX2luaXRfaG9zdF92bShrdm0sIHR5cGUpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3VuaW5pdF9tbXU7XG4tXHR9IGVsc2UgaWYgKHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQpIHtcbi1cdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfdW5pbml0X21tdTtcbiBcdH1cbiBcbiBcdGt2bV92Z2ljX2Vhcmx5X2luaXQoa3ZtKTtcbkBAIC0zODEsNiArNDI5LDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWt2bV9wa3ZtX2V4dF9hbGxvd2VkKGt2bSwgZXh0KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoa3ZtIFx1MDAyNlx1MDAyNiBrdm1fdm1faXNfcmVhbG0oa3ZtKSBcdTAwMjZcdTAwMjYgIWt2bV9yZWFsbV9leHRfYWxsb3dlZChleHQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdHN3aXRjaCAoZXh0KSB7XG4gXHRjYXNlIEtWTV9DQVBfSVJRQ0hJUDpcbiBcdFx0ciA9IHZnaWNfcHJlc2VudDtcbkBAIC00NDcsNyArNDk4LDcgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdFx0ciA9IHN5c3RlbV9zdXBwb3J0c19tdGUoKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfU1RFQUxfVElNRTpcbi1cdFx0ciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpO1xuK1x0XHRyID0ga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDFfMzJCSVQ6XG4gXHRcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpO1xuQEAgLTU0OCw2ICs1OTksOCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpO1xuICNlbmRpZlxuIFxuK1x0dmNwdS1cdTAwM2VhcmNoLnZjcHVfb3BzID0gYXJtNjRfdmNwdV9vcHNbdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV9mbGF2b3JdO1xuK1xuIFx0LyogRm9yY2UgdXNlcnMgdG8gY2FsbCBLVk1fQVJNX1ZDUFVfSU5JVCAqL1xuIFx0dmNwdV9jbGVhcl9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuIFxuQEAgLTY2MiwxNCArNzE1LDExIEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIHNpbmdsZV90YXNrX3J1bm5pbmcoKTtcbiB9XG4gXG4tdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuK3N0YXRpYyB2b2lkIHZjcHVfcHJlcGFyZV9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11ICptbXU7XG4gXHRpbnQgKmxhc3RfcmFuO1xuIFxuLVx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuLVx0XHRnb3RvIG5vbW11O1xuLVxuIFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcbiBcbkBAIC02OTksMTAgKzc0OSwzMCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdGt2bV9jYWxsX2h5cChfX2t2bV9mbHVzaF9jcHVfY29udGV4dCwgbW11KTtcbiBcdFx0Kmxhc3RfcmFuID0gdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiBcdH1cbit9XG4gXG4tbm9tbXU6XG4tXHR2Y3B1LVx1MDAzZWNwdSA9IGNwdTtcbitzdGF0aWMgdm9pZCB2Y3B1X3NldF93ZnhfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHZjcHUpKVxuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaGNyX2VsMiBcdTAwMjY9IH5IQ1JfVFdFO1xuK1x0ZWxzZVxuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaGNyX2VsMiB8PSBIQ1JfVFdFO1xuK1xuK1x0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIFx1MDAyNj0gfkhDUl9UV0k7XG4rXHRlbHNlXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZjcHVfbG9hZF9wdnRpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xuK31cbiBcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbit7XG4rXHR2Y3B1X3ByZXBhcmVfbW11KHZjcHUpO1xuIFx0LypcbiBcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxuIFx0ICogaW50ZXJydXB0IGRlYWN0aXZhdGlvbiBpbiBuZXN0ZWQgc3RhdGUgKGUuZy4gdGltZXIgaW50ZXJydXB0KS5cbkBAIC03MTEsMzIgKzc4MSw2OCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuIFx0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcbiBcdGt2bV92Y3B1X2xvYWRfZmd0KHZjcHUpO1xuLVx0aWYgKGhhc192aGUoKSlcbi1cdFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XG4rXHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuLVx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbi1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG4gXG4tXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZSh2Y3B1KSlcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgXHUwMDI2PSB+SENSX1RXRTtcbi1cdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcbitcdHZjcHVfbG9hZF9wdnRpbWUodmNwdSk7XG4rXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XG4rXHR2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTtcbit9XG4gXG4tXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3aSh2Y3B1KSlcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgXHUwMDI2PSB+SENSX1RXSTtcbi1cdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXSTtcbitzdGF0aWMgdm9pZCBudmhlX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4re1xuK1x0dmNwdV9wcmVwYXJlX21tdSh2Y3B1KTtcbitcdC8qXG4rXHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcbitcdCAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuXG4rXHQgKi9cbitcdGt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7XG4rXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcbitcdGt2bV92Y3B1X2xvYWRfZmd0KHZjcHUpO1xuK1x0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXG4rXHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuK1x0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xuIFx0dmNwdV9zZXRfcGF1dGhfdHJhcHModmNwdSk7XG4rfVxuIFxuLVx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKSB7XG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X2xvYWQsXG4tXHRcdFx0XHQgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUsXG4tXHRcdFx0XHQgIHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyKTtcbi1cdFx0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19yZXN0b3JlX3ZtY3JfYXBycyxcbi1cdFx0XHQgICAgIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS52Z2ljX3YzKTtcbi1cdH1cbitzdGF0aWMgdm9pZCBwa3ZtX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4re1xuK1x0LypcbitcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxuK1x0ICogaW50ZXJydXB0IGRlYWN0aXZhdGlvbiBpbiBuZXN0ZWQgc3RhdGUgKGUuZy4gdGltZXIgaW50ZXJydXB0KS5cbitcdCAqL1xuK1x0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcbitcdGt2bV92Z2ljX2xvYWQodmNwdSk7XG4rXHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XG4rXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XG4rXHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTtcbitcbitcdHZjcHVfbG9hZF9wdnRpbWUodmNwdSk7XG4rXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XG4rXG4rXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLFxuK1x0XHRcdCAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSxcbitcdFx0XHQgIHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyKTtcbitcdGt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsXG4rXHRcdCAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZWFsbV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuK3tcbitcdGt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7XG4rXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuK1x0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xuK31cbitcbit2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4re1xuK1x0dmNwdS1cdTAwM2VjcHUgPSBjcHU7XG4rXHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMtXHUwMDNldmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzKSlcbiBcdFx0dmNwdV9zZXRfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuQEAgLTc0NCwyOCArODUwLDUwIEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdHZjcHUtXHUwMDNlYXJjaC5waWQgPSBwaWRfbnIodmNwdS1cdTAwM2VwaWQpO1xuIH1cbiBcbi12b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkge1xuLVx0XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuLVx0XHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9wdXQpO1xuLVxuLVx0XHQvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovXG4tXHRcdGlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVx1MDAzZWt2bSkpXG4tXHRcdFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpO1xuLVx0fVxuLVxuIFx0a3ZtX3ZjcHVfcHV0X2RlYnVnKHZjcHUpO1xuIFx0a3ZtX2FyY2hfdmNwdV9wdXRfZnAodmNwdSk7XG4tXHRpZiAoaGFzX3ZoZSgpKVxuLVx0XHRrdm1fdmNwdV9wdXRfdmhlKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfcHV0X3ZoZSh2Y3B1KTtcbiBcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcbiBcdGt2bV92Z2ljX3B1dCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7XG4gXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4gXHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4rfVxuIFxuK3N0YXRpYyB2b2lkIG52aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGt2bV92Y3B1X3B1dF9kZWJ1Zyh2Y3B1KTtcbitcdGt2bV9hcmNoX3ZjcHVfcHV0X2ZwKHZjcHUpO1xuK1x0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xuK1x0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xuK1x0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdCh2Y3B1KTtcbitcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19zYXZlX2FwcnMsIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS52Z2ljX3YzKTtcbitcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XG4rXG4rXHQvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovXG4rXHRpZiAoIWt2bV92bV9pc19wcm90ZWN0ZWQodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHR2Y3B1X3NldF9mbGFnKHZjcHUsIFBLVk1fSE9TVF9TVEFURV9ESVJUWSk7XG4rXG4rXHRudmhlX3ZjcHVfcHV0KHZjcHUpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZWFsbV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xuK1x0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xuK31cbitcbit2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMtXHUwMDNldmNwdV9wdXQodmNwdSk7XG4gXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcbiBcdHZjcHUtXHUwMDNlY3B1ID0gLTE7XG4gfVxuQEAgLTE4NTIsNiArMTk4MCwxOCBAQCBzdGF0aWMgaW50IGt2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiBfX2t2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHZjcHUsIGV2ZW50cyk7XG4gfVxuIFxuKy8qXG4rICogUmVhbG0gVkNQVXMgY2FuIGJlIGZpbmFsaXplZCBhZnRlciB0aGUgUmVhbG0gZGVzY3JpcHRvciBpcyBjcmVhdGVkLlxuKyAqIEFsbG93IHRoZSByZWdpc3RlciBsaXN0IGZvciBSRUNzIGJlZm9yZSB0aGUgVkNQVXMgYXJlIGZpbmFsaXplZCwgYnV0XG4rICogYWZ0ZXIgdGhlIFNWRSBpcyBmaW5hbGl6ZWQuXG4rICovXG4rc3RhdGljIGJvb2wga3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmIChrdm1fYXJtX3ZjcHVfaXNfZmluYWxpemVkKHZjcHUpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KTtcbit9XG4rXG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC0xOTA3LDcgKzIwNDcsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdHIgPSAtRVBFUk07XG4tXHRcdGlmICgha3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZCh2Y3B1KSlcbitcdFx0aWYgKCFrdm1fYXJtX3ZjcHVfcmVnX2xpc3RfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0ciA9IC1FRkFVTFQ7XG5AQCAtMjEwNSw2ICsyMjQ1LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgdmhlX3ZjcHVfb3BzID0ge1xuK1x0LnZjcHVfbG9hZCA9IHZoZV92Y3B1X2xvYWQsXG4rXHQudmNwdV9wdXQgPSB2aGVfdmNwdV9wdXQsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyBudmhlX3ZjcHVfb3BzID0ge1xuK1x0LnZjcHVfbG9hZCA9IG52aGVfdmNwdV9sb2FkLFxuK1x0LnZjcHVfcHV0ID0gbnZoZV92Y3B1X3B1dCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHBrdm1fdmNwdV9vcHMgPSB7XG4rXHQudmNwdV9sb2FkID0gcGt2bV92Y3B1X2xvYWQsXG4rXHQudmNwdV9wdXQgPSBwa3ZtX3ZjcHVfcHV0LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgcmVhbG1fdmNwdV9vcHMgPSB7XG4rXHQudmNwdV9sb2FkID0gcmVhbG1fdmNwdV9sb2FkLFxuK1x0LnZjcHVfcHV0ID0gcmVhbG1fdmNwdV9wdXQsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqYXJtNjRfdmNwdV9vcHNbXSA9IHtcbitcdFtWTV9WSEVdID0gXHUwMDI2dmhlX3ZjcHVfb3BzLFxuK1x0W1ZNX05WSEVdID0gXHUwMDI2bnZoZV92Y3B1X29wcyxcbitcdFtWTV9QS1ZNXSA9IFx1MDAyNnBrdm1fdmNwdV9vcHMsXG4rXHRbVk1fUFJPVEVDVEVEX1BLVk1dID0gXHUwMDI2cGt2bV92Y3B1X29wcyxcbitcdFtWTV9SRUFMTV0gPSBcdTAwMjZyZWFsbV92Y3B1X29wcyxcbit9O1xuK1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG52aGVfcGVyY3B1X3NpemUodm9pZClcbiB7XG4gXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpQ0hPT1NFX05WSEVfU1lNKF9fcGVyX2NwdV9lbmQpIC1cbkBAIC0zMDUwLDYgKzMyMTgsOCBAQCBzdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZClcbiBcbiBcdGluX2h5cF9tb2RlID0gaXNfa2VybmVsX2luX2h5cF9tb2RlKCk7XG4gXG4rXHRrdm1faW5pdF9ybWkoKTtcbitcbiBcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkgfHxcbiBcdCAgICBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfMTUwODQxMikpXG4gXHRcdGt2bV9pbmZvKFwiR3Vlc3RzIHdpdGhvdXQgcmVxdWlyZWQgQ1BVIGVycmF0dW0gd29ya2Fyb3VuZHMgY2FuIGRlYWRsb2NrIHN5c3RlbSFcXG5cIiBcXFxuQEAgLTMxNTUsNiArMzMyNSwxMSBAQCBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9rdm1fbW9kZV9jZmcoY2hhciAqYXJnKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbitcdGlmIChzdHJjbXAoYXJnLCBcInJtbVwiKSA9PSAwIFx1MDAyNlx1MDAyNiAhV0FSTl9PTighaXNfa2VybmVsX2luX2h5cF9tb2RlKCkpKSB7XG4rXHRcdGt2bV9tb2RlID0gS1ZNX01PREVfUk1NO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBlYXJseV9wYXJhbShcImt2bS1hcm0ubW9kZVwiLCBlYXJseV9rdm1fbW9kZV9jZmcpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMgYi9hcmNoL2FybTY0L2t2bS9ndWVzdC5jXG5pbmRleCBiMDFkNjYyMmI4NzIwLi42YmVjNzNkMWVlMDUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xuQEAgLTU5OCw4ICs1OTgsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtX3N2ZV9yZWdzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdmNwdV9oYXNfc3ZlKHZjcHUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFBvbGljZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDogKi9cbi1cdFdBUk5fT04oIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKTtcbitcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpXG4rXHRcdHJldHVybiAxOyAvKiBLVk1fUkVHX0FSTTY0X1NWRV9WTFMgKi9cbitcbitcdGlmIChrdm1fdm1faXNfcmVhbG0odmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXG4gXG4gXHRyZXR1cm4gc2xpY2VzICogKFNWRV9OVU1fUFJFR1MgKyBTVkVfTlVNX1pSRUdTICsgMSAvKiBGRlIgKi8pXG4gXHRcdCsgMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXG5AQCAtNjE2LDkgKzYxOSw2IEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKCF2Y3B1X2hhc19zdmUodmNwdSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogUG9saWNlZCBieSBLVk1fR0VUX1JFR19MSVNUOiAqL1xuLVx0V0FSTl9PTigha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpO1xuLVxuIFx0LypcbiBcdCAqIEVudW1lcmF0ZSB0aGlzIGZpcnN0LCBzbyB0aGF0IHVzZXJzcGFjZSBjYW4gc2F2ZS9yZXN0b3JlIGluXG4gXHQgKiB0aGUgb3JkZXIgcmVwb3J0ZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDpcbkBAIC02MjgsNiArNjI4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdCsrbnVtX3JlZ3M7XG4gXG4rXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKVxuK1x0XHRyZXR1cm4gbnVtX3JlZ3M7XG4rXG4rXHRpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIG51bV9yZWdzO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpY2VzOyBpKyspIHtcbiBcdFx0Zm9yIChuID0gMDsgbiBcdTAwM2MgU1ZFX05VTV9aUkVHUzsgbisrKSB7XG4gXHRcdFx0cmVnID0gS1ZNX1JFR19BUk02NF9TVkVfWlJFRyhuLCBpKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbmluZGV4IDQ1OWJkOWViN2U0YmMuLjA5OTYxYzAwNTZmMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uY1xuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3Brdm1faHlwX3ZtKHN0cnVjdCBrdm0gKmhvc3Rfa3ZtLCBzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSxcbiBcbiBcdGh5cF92bS1cdTAwM2Vob3N0X2t2bSA9IGhvc3Rfa3ZtO1xuIFx0aHlwX3ZtLVx1MDAzZWt2bS5jcmVhdGVkX3ZjcHVzID0gbnJfdmNwdXM7XG4tXHRoeXBfdm0tXHUwMDNla3ZtLmFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBSRUFEX09OQ0UoaG9zdF9rdm0tXHUwMDNlYXJjaC5wa3ZtLmlzX3Byb3RlY3RlZCk7XG4rXHRoeXBfdm0tXHUwMDNla3ZtLmFyY2gudm1fZmxhdm9yID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLVx1MDAzZWFyY2gudm1fZmxhdm9yKTtcbiBcdGh5cF92bS1cdTAwM2Vrdm0uYXJjaC5mbGFncyA9IDA7XG4gXHRwa3ZtX2luaXRfZmVhdHVyZXNfZnJvbV9ob3N0KGh5cF92bSwgaG9zdF9rdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5pbmRleCBiNzRkZDVjZTFlZmQzLi5mNDgyNTNiOWQ4OGI1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuQEAgLTgsNiArOCw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BndGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFnZTJfcGd0YWJsZS5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jIGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXG5pbmRleCBiMTFiODgyMWM5ZmJjLi4yYjFlNmZkZWI0ZDVjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmNcbkBAIC00MTQsMTQgKzQxNCwxNCBAQCB2b2lkIGt2bV9hcm1fdGVhcmRvd25faHlwZXJjYWxscyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gaW50IGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpO1xuK1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTtcbiB9XG4gXG4gaW50IGt2bV9hcm1fY29weV9md19yZWdfaW5kaWNlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpKyspIHtcbiBcdFx0aWYgKHB1dF91c2VyKGt2bV9hcm1fZndfcmVnX2lkc1tpXSwgdWluZGljZXMrKykpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuY1xuaW5kZXggZDZjNGZjMTZmODc5NS4uZDYxYTNmZjA0ZmFiYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuY1xuQEAgLTMxNyw2ICszMTcsNyBAQCB2b2lkIGt2bV9pbmplY3Rfc2l6ZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICovXG4gdm9pZCBrdm1faW5qZWN0X3VuZGVmaW5lZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuK1x0S1ZNX0JVRyh2Y3B1X2lzX3JlYyh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0sIFwiVW5leHBlY3RlZCB1bmRlZmluZWQgZXhjZXB0aW9uIGluamVjdGlvbiB0byBSRUNcIik7XG4gXHRpZiAodmNwdV9lbDFfaXNfMzJiaXQodmNwdSkpXG4gXHRcdGluamVjdF91bmRlZjMyKHZjcHUpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21taW8uYyBiL2FyY2gvYXJtNjQva3ZtL21taW8uY1xuaW5kZXggZDFjM2EzNTJkNWEyMi4uYmJjZjUyZjAxZTkxMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21taW8uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW1pby5jXG5AQCAtMTY4LDE0ICsxNjgsMTQgQEAgaW50IGlvX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGZhdWx0X2lwYSlcbiBcdCAqIE5vIHZhbGlkIHN5bmRyb21lPyBBc2sgdXNlcnNwYWNlIGZvciBoZWxwIGlmIGl0IGhhc1xuIFx0ICogdm9sdW50ZWVyZWQgdG8gZG8gc28sIGFuZCBiYWlsIG91dCBvdGhlcndpc2UuXG4gXHQgKlxuLVx0ICogSW4gdGhlIHByb3RlY3RlZCBWTSBjYXNlLCB0aGVyZSBpc24ndCBtdWNoIHVzZXJzcGFjZSBjYW4gZG9cbitcdCAqIEluIHRoZSBwcm90ZWN0ZWQvUmVhbG0gVk0gY2FzZSwgdGhlcmUgaXNuJ3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvXG4gXHQgKiB0aG91Z2gsIHNvIGRpcmVjdGx5IGRlbGl2ZXIgYW4gZXhjZXB0aW9uIHRvIHRoZSBndWVzdC5cbiBcdCAqL1xuIFx0aWYgKCFrdm1fdmNwdV9kYWJ0X2lzdmFsaWQodmNwdSkpIHtcbiBcdFx0dHJhY2Vfa3ZtX21taW9fbmlzdigqdmNwdV9wYyh2Y3B1KSwgZXNyLFxuIFx0XHRcdFx0ICAgIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpLCBmYXVsdF9pcGEpO1xuIFxuLVx0XHRpZiAodmNwdV9pc19wcm90ZWN0ZWQodmNwdSkpXG4rXHRcdGlmICh2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4ga3ZtX2luamVjdF9zZWFfZGFidCh2Y3B1LCBrdm1fdmNwdV9nZXRfaGZhcih2Y3B1KSk7XG4gXG4gXHRcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1JFVFVSTl9OSVNWX0lPX0FCT1JUX1RPX1VTRVIsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggOWJhODY0NTBmZTRhZi4uNWU3Y2RiZTMxMGZjOCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTM3LDYgKzM3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBpb19tYXBfYmFzZTtcbiBcbiAjZGVmaW5lIEtWTV9QR1RfRk4oZm4pXHRcdCghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgPyBmbiA6IHAgIyMgZm4pXG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIHByb3RlY3RlZF9wa3ZtX3MyX29wcztcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgdW5wcm90ZWN0ZWRfcGt2bV9zMl9vcHM7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIGt2bV9kZWZhdWx0X3ZtX3MyX29wcztcbitcbiBzdGF0aWMgcGh5c19hZGRyX3QgX19zdGFnZTJfcmFuZ2VfYWRkcl9lbmQocGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kLFxuIFx0XHRcdFx0XHQgICBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbkBAIC0xNjYsNiArMTcwLDE4IEBAIHN0YXRpYyBib29sIG1lbXNsb3RfaXNfbG9nZ2luZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIFx0cmV0dXJuIG1lbXNsb3QtXHUwMDNlZGlydHlfYml0bWFwIFx1MDAyNlx1MDAyNiAhKG1lbXNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fUkVBRE9OTFkpO1xuIH1cbiBcbitzdGF0aWMgaW50IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICoga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnMoKSAtIGZsdXNoIGFsbCBWTSBUTEIgZW50cmllcyBmb3IgdjcvOFxuICAqIEBrdm06XHRwb2ludGVyIHRvIGt2bSBzdHJ1Y3R1cmUuXG5AQCAtMTc0LDI2ICsxOTAsMzYgQEAgc3RhdGljIGJvb2wgbWVtc2xvdF9pc19sb2dnaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpXG4gICovXG4gaW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUpO1xuLVx0ZWxzZVxuLVx0XHRrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSk7XG4tXHRyZXR1cm4gMDtcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbiB9XG4gXG4taW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbi1cdFx0XHRcdCAgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuK3N0YXRpYyBpbnQgcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0IGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuIHtcbiBcdHU2NCBzaXplID0gbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHR1NjQgYWRkciA9IGdmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbi1cdFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3RsYl9mbHVzaF92bWlkLCBrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSk7XG4tXHRlbHNlXG4tXHRcdGt2bV90bGJfZmx1c2hfdm1pZF9yYW5nZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5tbXUsIGFkZHIsIHNpemUpO1xuK1x0a3ZtX3RsYl9mbHVzaF92bWlkX3JhbmdlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgYWRkciwgc2l6ZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdCAgICAgZ2ZuX3QgZ2ZuLCB1NjQgbnJfcGFnZXMpXG4re1xuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGdmbiwgbnJfcGFnZXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCAqc3RhZ2UyX21lbWNhY2hlX3phbGxvY19wYWdlKHZvaWQgKmFyZylcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jID0gYXJnO1xuQEAgLTMzNywxMyArMzYzLDIwIEBAIHN0YXRpYyB2b2lkIF9fdW5tYXBfc3RhZ2UyX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjRcbiBcdFx0XHRcdCAgIG1heV9ibG9jaykpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsXG4rXHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdCAgICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaylcbit7XG4rXHRfX3VubWFwX3N0YWdlMl9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spO1xuK31cbitcbiB2b2lkIGt2bV9zdGFnZTJfdW5tYXBfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgcGh5c19hZGRyX3Qgc3RhcnQsXG4gXHRcdFx0ICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaylcbiB7XG4tXHRpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm1fczJfbW11X3RvX2t2bShtbXUpKSlcbi1cdFx0cmV0dXJuO1xuK1x0c3RydWN0IGt2bSAqa3ZtID0ga3ZtX3MyX21tdV90b19rdm0obW11KTtcbiBcbi1cdF9fdW5tYXBfc3RhZ2UyX3JhbmdlKG1tdSwgc3RhcnQsIHNpemUsIG1heV9ibG9jayk7XG4rXHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3N0YWdlMl91bm1hcF9yYW5nZSlcbitcdFx0a3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3N0YWdlMl91bm1hcF9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spO1xuIH1cbiBcbiB2b2lkIGt2bV9zdGFnZTJfZmx1c2hfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgcGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kKVxuQEAgLTk2Myw2ICs5OTYsMTggQEAgc3RhdGljIHZvaWQga3ZtX3N0YWdlMl9kZXN0cm95KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0KVxuIFx0S1ZNX1BHVF9GTihrdm1fcGd0YWJsZV9zdGFnZTJfZGVzdHJveV9wZ2QpKHBndCk7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyAqYXJtNjRfdm1fczJfb3BzW1ZNX0ZMQVZPUl9NQVhdID0ge1xuK1x0W1ZNX1ZIRV0gPSBcdTAwMjZrdm1fZGVmYXVsdF92bV9zMl9vcHMsXG4rXHRbVk1fTlZIRV0gPSBcdTAwMjZrdm1fZGVmYXVsdF92bV9zMl9vcHMsXG4rXHRbVk1fUEtWTV0gPSBcdTAwMjZ1bnByb3RlY3RlZF9wa3ZtX3MyX29wcyxcbitcdFtWTV9QUk9URUNURURfUEtWTV0gPSBcdTAwMjZwcm90ZWN0ZWRfcGt2bV9zMl9vcHMsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBrdm1fdm1faW5pdF92bV9zMl9vcHMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4re1xuK1x0a3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzID0gYXJtNjRfdm1fczJfb3BzW2t2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvcl07XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9pbml0X3N0YWdlMl9tbXUgLSBJbml0aWFsaXNlIGEgUzIgTU1VIHN0cnVjdHVyZVxuICAqIEBrdm06XHRUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdHVyZVxuQEAgLTk4Myw2ICsxMDI4LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcbiBcdGludCBjcHUsIGVycjtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0O1xuIFxuK1x0LyogSW5pdGlhbGl6ZSB0aGUgVk0gb3BzIGZvciB0aGUgVk0gaW5zdGFuY2UgZm9yIHRoZSBmaXJzdCB0aW1lICovXG4rXHRpZiAobW11ID09IFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSlcbitcdFx0a3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7XG4gXHQvKlxuIFx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIG91ciBwYWdlIHRhYmxlcyBpbiBwbGFjZSwgYW5kIHRoYXQgdGhlXG4gXHQgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsXG5AQCAtMTcwNSw3ICsxNzUzLDcgQEAgc3RydWN0IGt2bV9zMl9mYXVsdF92bWFfaW5mbyB7XG4gXHRib29sXHRcdG1hcF9ub25fY2FjaGVhYmxlO1xuIH07XG4gXG4tc3RhdGljIGludCBwa3ZtX21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4rc3RhdGljIGludCBwcm90ZWN0ZWRfdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGT0xMX0hXUE9JU09OIHwgRk9MTF9MT05HVEVSTSB8IEZPTExfV1JJVEU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLVx1MDAzZXZjcHU7XG5AQCAtMjE0Myw2ICsyMTkxLDIyIEBAIHN0YXRpYyBpbnQgdXNlcl9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0cmV0dXJuIGt2bV9zMl9mYXVsdF9tYXAoczJmZCwgXHUwMDI2czJ2aSwgcHJvdCwgbWVtY2FjaGUpO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV92bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuK3tcbitcdGludCByZXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLVx1MDAzZXZjcHU7XG4rXG4rXHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCFrdm1faXNfd3JpdGVfZmF1bHQodmNwdSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IWt2bV92Y3B1X3RyYXBfaXNfZXhlY19mYXVsdCh2Y3B1KSk7XG4rXG4rXHRpZiAoa3ZtX3Nsb3RfaGFzX2dtZW0oczJmZC1cdTAwM2VtZW1zbG90KSlcbitcdFx0cmV0ID0gZ21lbV9hYm9ydChzMmZkKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gdXNlcl9tZW1fYWJvcnQoczJmZCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKiBSZXNvbHZlIHRoZSBhY2Nlc3MgZmF1bHQgYnkgbWFraW5nIHRoZSBwYWdlIHlvdW5nIGFnYWluLiAqL1xuIHN0YXRpYyB2b2lkIGhhbmRsZV9hY2Nlc3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBmYXVsdF9pcGEpXG4ge1xuQEAgLTIyNTAsNiArMjMxNCw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfdHJhbnMgbmVzdGVkX3RyYW5zLCAqbmVzdGVkID0gTlVMTDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBlc3I7XG4gXHRwaHlzX2FkZHJfdCBmYXVsdF9pcGE7IC8qIFRoZSBhZGRyZXNzIHdlIGZhdWx0ZWQgb24gKi9cbiBcdHBoeXNfYWRkcl90IGlwYTsgLyogQWx3YXlzIHRoZSBJUEEgaW4gdGhlIEwxIGd1ZXN0IHBoeXMgc3BhY2UgKi9cbkBAIC0yNDExLDE5ICsyNDc2LDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQuaHZhXHRcdD0gaHZhLFxuIFx0fTtcbiBcbi1cdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRyZXQgPSBwa3ZtX21lbV9hYm9ydChcdTAwMjZzMmZkKTtcbi1cdH0gZWxzZSB7XG4tXHRcdFZNX1dBUk5fT05fT05DRShrdm1fdmNwdV90cmFwX2lzX3Blcm1pc3Npb25fZmF1bHQodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQhd3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTtcbi1cbi1cdFx0aWYgKGt2bV9zbG90X2hhc19nbWVtKG1lbXNsb3QpKVxuLVx0XHRcdHJldCA9IGdtZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSB1c2VyX21lbV9hYm9ydChcdTAwMjZzMmZkKTtcbi1cdH1cbi1cbitcdHJldCA9IGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9tZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4gXHRpZiAocmV0ID09IDApXG4gXHRcdHJldCA9IDE7XG4gb3V0OlxuQEAgLTI0MzYsMzggKzI0ODksNDMgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRfX3VubWFwX3N0YWdlMl9yYW5nZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5tbXUsIHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuLVx0XHRcdCAgICAgKHJhbmdlLVx1MDAzZWVuZCAtIHJhbmdlLVx1MDAzZXN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbi1cdFx0XHQgICAgIHJhbmdlLVx1MDAzZW1heV9ibG9jayk7XG4rXHRrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHQocmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuK1x0XHRcdFx0cmFuZ2UtXHUwMDNlbWF5X2Jsb2NrKTtcbiBcbiBcdGt2bV9uZXN0ZWRfczJfdW5tYXAoa3ZtLCByYW5nZS1cdTAwM2VtYXlfYmxvY2spO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuK3N0YXRpYyBib29sIGt2bV92bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIHtcbiBcdHU2NCBzaXplID0gKHJhbmdlLVx1MDAzZWVuZCAtIHJhbmdlLVx1MDAzZXN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdHJldHVybiBLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKShrdm0tXHUwMDNlYXJjaC5tbXUucGd0LFxuIFx0XHRcdFx0XHRcdCAgIHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRcdCAgIHNpemUsIHRydWUpO1xuK31cbitcbitib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuK3tcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCAha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2FnZV9nZm4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fYWdlX2dmbihrdm0sIHJhbmdlKTtcbiBcdC8qXG4gXHQgKiBUT0RPOiBIYW5kbGUgbmVzdGVkX21tdSBzdHJ1Y3R1cmVzIGhlcmUgdXNpbmcgdGhlIHJldmVyc2UgbWFwcGluZyBpblxuIFx0ICogYSBsYXRlciB2ZXJzaW9uIG9mIHBhdGNoIHNlcmllcy5cbiBcdCAqL1xuIH1cbiBcbi1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4rc3RhdGljIGJvb2wga3ZtX3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4gXHR1NjQgc2l6ZSA9IChyYW5nZS1cdTAwM2VlbmQgLSByYW5nZS1cdTAwM2VzdGFydCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRyZXR1cm4gS1ZNX1BHVF9GTihrdm1fcGd0YWJsZV9zdGFnZTJfdGVzdF9jbGVhcl95b3VuZykoa3ZtLVx1MDAzZWFyY2gubW11LnBndCxcbkBAIC0yNDc1LDYgKzI1MzMsMTUgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIFx0XHRcdFx0XHRcdCAgIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4rYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuK3tcbitcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCAha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3Rlc3RfYWdlX2dmbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV90ZXN0X2FnZV9nZm4oa3ZtLCByYW5nZSk7XG4rfVxuK1xuIHBoeXNfYWRkcl90IGt2bV9tbXVfZ2V0X2h0dGJyKHZvaWQpXG4ge1xuIFx0cmV0dXJuIF9fcGEoaHlwX3BndGFibGUtXHUwMDNlcGdkKTtcbkBAIC0yNzk2LDMgKzI4NjMsMzMgQEAgdm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YXNfZW5hYmxlZClcbiBcbiBcdHRyYWNlX2t2bV90b2dnbGVfY2FjaGUoKnZjcHVfcGModmNwdSksIHdhc19lbmFibGVkLCBub3dfZW5hYmxlZCk7XG4gfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwcm90ZWN0ZWRfdm1fczJfb3BzID0ge1xuK1x0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXHRcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxicyxcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlLFxuK1x0LypcbitcdCAqIE5vdCBzdXBwb3J0ZWQgZm9yIFByb3RlY3RlZCBWTXMgdW5kZXIgcEtWTVxuK1x0ICogLnZtX2FnZV9nZm5cbitcdCAqIC52bV90ZXN0X2FnZV9nZm5cbitcdCAqIC52bV9zdGFnZTJfdW5tYXBfcmFuZ2VcbitcdCAqL1xuK1x0LnZtX21lbV9hYm9ydFx0XHRcdD0gcHJvdGVjdGVkX3ZtX21lbV9hYm9ydCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwa3ZtX3ZtX3MyX29wcyA9IHtcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic1x0XHQ9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMsXG4rXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcbitcdC52bV9hZ2VfZ2ZuXHRcdFx0PSBrdm1fdm1fYWdlX2dmbixcbitcdC52bV90ZXN0X2FnZV9nZm5cdFx0PSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLFxuK1x0LnZtX3N0YWdlMl91bm1hcF9yYW5nZVx0XHQ9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsXG4rXHQudm1fbWVtX2Fib3J0XHRcdFx0PSBrdm1fdm1fbWVtX2Fib3J0LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIGt2bV9kZWZhdWx0X3ZtX3MyX29wcyA9IHtcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic1x0XHQ9IGt2bV92bV9mbHVzaF9yZW1vdGVfdGxicyxcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsXG4rXHQudm1fYWdlX2dmblx0XHRcdD0ga3ZtX3ZtX2FnZV9nZm4sXG4rXHQudm1fdGVzdF9hZ2VfZ2ZuXHRcdD0ga3ZtX3ZtX3Rlc3RfYWdlX2dmbixcbitcdC52bV9zdGFnZTJfdW5tYXBfcmFuZ2VcdFx0PSBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlLFxuK1x0LnZtX21lbV9hYm9ydFx0XHRcdD0ga3ZtX3ZtX21lbV9hYm9ydCxcbit9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uYyBiL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xuaW5kZXggOGU0YzZlNGJlYzEyMy4uMzk0OGZhNDZmNGQ3NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcGt2bS5jXG5AQCAtMjQwLDcgKzI0MCw2IEBAIGludCBwa3ZtX2luaXRfaG9zdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlID0gcmV0O1xuLVx0a3ZtLVx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7XG4gXHRpZiAocHJvdGVjdGVkKSB7XG4gXHRcdHByX3dhcm5fb25jZShcImt2bTogcHJvdGVjdGVkIFZNcyBhcmUgZXhwZXJpbWVudGFsIGFuZCBmb3IgZGV2ZWxvcG1lbnQgb25seSwgdGFpbnRpbmcga2VybmVsXFxuXCIpO1xuIFx0XHRhZGRfdGFpbnQoVEFJTlRfVVNFUiwgTE9DS0RFUF9TVElMTF9PSyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuaW5kZXggNGNlYWJhYTRjMzBiZC4uNDFmYmZkOTJjZDI5MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuQEAgLTY3LDkgKzY3LDkgQEAgZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGJhc2U7XG4gfVxuIFxuLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4rYm9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHJldHVybiAhIXNjaGVkX2luZm9fb24oKTtcbitcdHJldHVybiAhIXNjaGVkX2luZm9fb24oKSBcdTAwMjZcdTAwMjYgKCFrdm0gfHwgIWt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKSk7XG4gfVxuIFxuIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtODEsNyArODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aW50IHJldCA9IDA7XG4gXHRpbnQgaWR4O1xuIFxuLVx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSB8fFxuK1x0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoa3ZtKSB8fFxuIFx0ICAgIGF0dHItXHUwMDNlYXR0ciAhPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSlcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcbkBAIC0xMTAsNyArMTEwLDcgQEAgaW50IGt2bV9hcm1fcHZ0aW1lX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHU2NCBfX3VzZXIgKnVzZXIgPSAodTY0IF9fdXNlciAqKWF0dHItXHUwMDNlYWRkcjtcbiBcdHU2NCBpcGE7XG4gXG4tXHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpIHx8XG4rXHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVx1MDAzZWt2bSkgfHxcbiBcdCAgICBhdHRyLVx1MDAzZWF0dHIgIT0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEpXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXG5AQCAtMTI2LDcgKzEyNiw3IEBAIGludCBrdm1fYXJtX3B2dGltZV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3dpdGNoIChhdHRyLVx1MDAzZWF0dHIpIHtcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEE6XG4tXHRcdGlmIChrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSlcbitcdFx0aWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gLUVOWElPO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3JtaS5jIGIvYXJjaC9hcm02NC9rdm0vcm1pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41ZWNjOGIzNDk4Njk4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2t2bS9ybWkuY1xuQEAgLTAsMCArMSwxOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2Nhc20vdmlydC5oXHUwMDNlXG4rXG4rdm9pZCBrdm1faW5pdF9ybWkodm9pZClcbit7XG4rXHRpZiAoa3ZtX2dldF9tb2RlKCkgIT0gS1ZNX01PREVfUk1NKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBUT0RPOiBDaGVjayBpZiB0aGUgUk1JIGlzIGF2YWlsYWJsZSAqL1xuK1xuK1x0LyogRnV0dXJlIHBhdGNoIHdpbGwgZW5hYmxlIHN0YXRpYyBicmFuY2gga3ZtX3JtaV9pc19hdmFpbGFibGUgKi9cbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1OGMxZmMxM2VhMTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5AQCAtNTYzOCwxOCArNTYzOCwxOCBAQCBpbnQga3ZtX2FybV9zeXNfcmVnX3NldF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZ1xuIFx0XHRcdFx0ICAgIHN5c19yZWdfZGVzY3MsIEFSUkFZX1NJWkUoc3lzX3JlZ19kZXNjcykpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IG51bV9kZW11eF9yZWdzKHZvaWQpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtX2RlbXV4X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBDU1NFTFJfTUFYO1xuK1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IENTU0VMUl9NQVg7XG4gfVxuIFxuLXN0YXRpYyBpbnQgd3JpdGVfZGVtdXhfcmVnaWRzKHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuK3N0YXRpYyBpbnQgd3JpdGVfZGVtdXhfcmVnaWRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXG4ge1xuIFx0dTY0IHZhbCA9IEtWTV9SRUdfQVJNNjQgfCBLVk1fUkVHX1NJWkVfVTMyIHwgS1ZNX1JFR19BUk1fREVNVVg7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdHZhbCB8PSBLVk1fUkVHX0FSTV9ERU1VWF9JRF9DQ1NJRFI7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NFTFJfTUFYOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9kZW11eF9yZWdzKHZjcHUpOyBpKyspIHtcbiBcdFx0aWYgKHB1dF91c2VyKHZhbCB8IGksIHVpbmRpY2VzKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0dWluZGljZXMrKztcbkBAIC01NjkzLDExICs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JlYWxtX3N5c19yZWdfaGlkZGVuX3VzZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHRcdCB1NjQgcmVnKVxuK3tcbitcdHN3aXRjaCAocmVnKSB7XG4rXHRjYXNlIFNZU19JRF9BQTY0REZSMF9FTDE6XG4rXHRjYXNlIFNZU19QTUNSX0VMMDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbnQgd2Fsa19vbmVfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxuIFx0XHRcdCAgICB1NjQgX191c2VyICoqdWluZCxcbiBcdFx0XHQgICAgdW5zaWduZWQgaW50ICp0b3RhbClcbiB7XG4rXHRpZiAodmNwdV9pc19yZWModmNwdSkgXHUwMDI2XHUwMDI2XG4rXHQgICAga3ZtX3JlYWxtX3N5c19yZWdfaGlkZGVuX3VzZXIodmNwdSwgcmVnX3RvX2VuY29kaW5nKHJkKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0LypcbiBcdCAqIElnbm9yZSByZWdpc3RlcnMgd2UgdHJhcCBidXQgZG9uJ3Qgc2F2ZSxcbiBcdCAqIGFuZCBmb3Igd2hpY2ggbm8gY3VzdG9tIHVzZXIgYWNjZXNzb3IgaXMgcHJvdmlkZWQuXG5AQCAtNTczNSw3ICs1NzUwLDcgQEAgc3RhdGljIGludCB3YWxrX3N5c19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZClcbiBcbiB1bnNpZ25lZCBsb25nIGt2bV9hcm1fbnVtX3N5c19yZWdfZGVzY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBudW1fZGVtdXhfcmVncygpXG4rXHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSlcbiBcdFx0KyB3YWxrX3N5c19yZWdzKHZjcHUsICh1NjQgX191c2VyICopTlVMTCk7XG4gfVxuIFxuQEAgLTU3NDgsNyArNTc2Myw3IEBAIGludCBrdm1fYXJtX2NvcHlfc3lzX3JlZ19pbmRpY2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXG4gXHRcdHJldHVybiBlcnI7XG4gXHR1aW5kaWNlcyArPSBlcnI7XG4gXG4tXHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHVpbmRpY2VzKTtcbitcdHJldHVybiB3cml0ZV9kZW11eF9yZWdpZHModmNwdSwgdWluZGljZXMpO1xuIH1cbiBcbiAjZGVmaW5lIEtWTV9BUk1fRkVBVFVSRV9JRF9SQU5HRV9JTkRFWChyKVx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaCBiL2luY2x1ZGUva3ZtL2FybV9wc2NpLmhcbmluZGV4IGY4NmEwMDZkNjcxMzYuLjA2YzIwNjEyZTllN2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXG5AQCAtMTAsNiArMTAsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BzY2kuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4rXG4gI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8xXHRQU0NJX1ZFUlNJT04oMCwgMSlcbiAjZGVmaW5lIEtWTV9BUk1fUFNDSV8wXzJcdFBTQ0lfVkVSU0lPTigwLCAyKVxuICNkZWZpbmUgS1ZNX0FSTV9QU0NJXzFfMFx0UFNDSV9WRVJTSU9OKDEsIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMjo1Mi4yODI4MDEzNThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDE1MDEwMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBUk02NCBLVk0gRm9jdXMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBoZXJlIGlzIGRlZmluaXRlbHkgYW1kNjQsIHdoaWNoIGlzIG15IGJyZWFkIGFuZCBidXR0ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy5cblxuVGhlIHBhdGNoIGxpc3QgdGVsbHMgbWUgaXQncyBtb2RpZnlpbmcgYSBidW5jaCBvZiBmaWxlcy4gUHJpbWFyaWx5LCBpdCdzIGhpdHRpbmcgYSBsb3Qgb2YgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9hcm02NC9gIGRpcmVjdG9yeS4gSSBzZWUgYSBsb3Qgb2YgS1ZNLXJlbGF0ZWQgZmlsZXMgaW4gdGhlcmUsIHRoaW5ncyBsaWtlIGBrdm1fZW11bGF0ZS5oYCwgYGt2bV9ob3N0LmhgLCBga3ZtX3BndGFibGUuaGAsIGFuZCBhIGdvb2QgY2h1bmsgb2YgQyBmaWxlczogYGFyY2hfdGltZXIuY2AsIGBhcm0uY2AsIGBndWVzdC5jYCwgZXRjLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgQVJNNjQgS1ZNIGltcGxlbWVudGF0aW9uOiBIWVAsIE1NSU8sIE1NVSwgUk1JLCB0aGUgd29ya3MuIFRoZSBmYWN0IHRoYXQgYGFyY2gvYXJtNjQva3ZtL3Brdm0uY2AgaXMgYmVpbmcgdG91Y2hlZCBpcyBpbnRlcmVzdGluZywgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoYXQgYXJlYS5cblxuQnV0LCBob2xkIG9uLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIEFSTTY0LXNwZWNpZmljIGNvZGUsIEkgbm90aWNlIHR3byB0aGluZ3M6IGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dGAgYW5kIGBpbmNsdWRlL2t2bS9hcm1fcHNjaS5oYCBhcmUgYWxzbyBvbiB0aGUgbGlzdC4gVGhpcyB0aHJvd3MgYSBzbGlnaHQgY3VydmViYWxsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGVzZSBkb24ndCBhY2NpZGVudGFsbHkgYWZmZWN0IG15IHRhcmdldCBhcmNoaXRlY3R1cmUuIEl0J3MgdW51c3VhbCB0byBoYXZlIEFSTTY0IGNoYW5nZXMgYmxlZWQgaW50byBvdGhlciBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgZ29vZCByZWFzb24uXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGluY2x1ZGUva3ZtL2FybV9wc2NpLmhgIGFuZCBhbnkgb2YgdGhlIG90aGVyIG1vZGlmaWVkIGNvZGUgYXJlIG5vdCB1c2VkIG9uIGFtZDY0IG9yIGNvbXBpbGVkIG9uIHg4Ni9hbWQ2NC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCBgaW5jbHVkZS9rdm0vYXJtX3BzY2kuaGAgZmlyc3QgYW5kIHRoZW4gc2VlIGlmIGFueXRoaW5nIGluIHRoZSBvdGhlciBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHg4Ni02NCBidWlsZC4gVGhpcyBtYXkgYmUgZmluZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJ2xsIGFsc28gaGF2ZSBhIGxvb2sgYXJvdW5kIGFuZCBzZWUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgYXJlIGdhdGVkIGJlaGluZCBjb25kaXRpb25hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6MTI6NTYuNjk3ODE0NjIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDQ4NDcyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJtX3BzY2kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYy01MC0jaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo1MTojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTItI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fdmdpYy5oXFx1MDAzZVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTE4LVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaDoxOTojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTIwLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQtXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fcHNjaS5oXFx1MDAzZVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jLTE2LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYy0xNS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jOjE2OiNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BzY2kuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jLTE3LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTktI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1faHlwZXJjYWxscy5oXFx1MDAzZVxcbmFyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYzoxMDojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTExLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTE1LVxcbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzoxNjojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTE3LSNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX2h5cGVyY2FsbHMuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6MTI6NTkuMzQyNjY3MDg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQ0NDA2NjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGRldGVybWluaW5nIGlmIGl0J3Mgd29ydGggZnV6emluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGFtZDY0LiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGluY2x1ZGUva3ZtL2FybV9wc2NpLmhgIGlzIG9ubHkgdXNlZCBieSBgYXJjaC9hcm02NC9rdm0vKmAuIEFuZCB0aGUgY2hhbmdlIGlzIHNpbXBseSBhZGRpbmcgYW4gaW5jbHVkZSBmb3IgYGFzbS9rdm1fZW11bGF0ZS5oYC4gU3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIGhpdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZnJvbSBTZWN0aW9uIDIuIFRoZSBrZXkgaGVyZSBpcyBcIlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczogLSBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIgVGhlIHRhcmdldCBpcyBhbWQ2NC4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgKmNvbXBsZXRlbHkqIGFib3V0IGBhcmNoL2FybTY0YCDigJMgQVJNNjQgS1ZNIFJlYWxtL0NDQS9STU0gc3VwcG9ydCBhbmQgcmVmYWN0b3JpbmcsIHBsdXMgc29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuIE5vIGNvZGUgdG91Y2hlZCBnZXRzIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIG9uIGFtZDY0LiBCb29tLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZmlsZXMgY2hhbmdlZDogZXZlcnl0aGluZyBsaXN0ZWQsIGZyb20gYERvY3VtZW50YXRpb24vYCB0byBgYXJjaC9hcm02NC9gIGluY2x1ZGUgZmlsZXMgYW5kIHNvdXJjZSBmaWxlcywgdGhleSBhcmUgYWxsIGNsZWFybHkgQVJNNjQtc3BlY2lmaWMuIE5vIGV4Y2VwdGlvbnMuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIE5vIG90aGVyIGZhY3RvcnMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UgYmVjYXVzZSB0aGUgcGF0Y2ggb25seSB0b3VjaGVzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBTbywgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgbnVsbC4gVGhlIGBSZWFzb25pbmdgIHdpbGwgYmUgY3J5c3RhbCBjbGVhcjogdGhpcyBwYXRjaCBpcyBhbGwgQVJNNjQtc3BlY2lmaWMgS1ZNL1JNSS9SZWFsbSBjb2RlIGFuZCBEb2N1bWVudGF0aW9uLCB3aGljaCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM0OCwiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMzowNy43ODY3MzU5OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBBUk02NCBLVk0gYW5kIEFybSBDb25maWRlbnRpYWwgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSAvIFJlYWxtIE1hbmFnZW1lbnQgRXh0ZW5zaW9uKSBjb2RlIGV4Y2x1c2l2ZWx5LCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbGwgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZXhjbHVzaXZlIHRvIGFybTY0IGFuZCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBBUk02NCBLVk0gYW5kIEFybSBDb25maWRlbnRpYWwgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSAvIFJlYWxtIE1hbmFnZW1lbnQgRXh0ZW5zaW9uKSBjb2RlIGV4Y2x1c2l2ZWx5LCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbGwgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZXhjbHVzaXZlIHRvIGFybTY0IGFuZCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjEzOjA3Ljc4Njc1ODY3WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2dlsv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 19:53:44 +0000 UTC FinishedAt: 2026-09-08 20:13:08 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIEFSTTY0IEtWTSBhbmQgQXJtIENvbmZpZGVudGlhbCBDb21wdXRlIEFyY2hpdGVjdHVyZSAoQ0NBIC8gUmVhbG0gTWFuYWdlbWVudCBFeHRlbnNpb24pIGNvZGUgZXhjbHVzaXZlbHksIGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQgYW5kIHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmOTVkZTk1NGQ0MTNkZjYxZjgzODI3NTg5ZGUwYjJkY2Q1ZWFkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIwOjEyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IDY4NjQ3ZmY0YmRkMjQuLjFhZmUzZGYzYjkyM2UgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0zMjU2LDYgJiM0MzszMjU2LDkgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRuZXN0ZWQ6IFZIRS1iYXNlZCBtb2RlIHdpdGggc3VwcG9ydCBmb3IgbmVzdGVkXG4gXHRcdFx0XHR2aXJ0dWFsaXphdGlvbi4gUmVxdWlyZXMgYXQgbGVhc3QgQVJNdjguNFxuIFx0XHRcdFx0aGFyZHdhcmUgKHdpdGggRkVBVF9OVjIpLlxuJiM0MztcdFx0XHRybW06IFN1cHBvcnQgZm9yIHJ1bm5pbmcgY29uZmlkZW50aWFsIGd1ZXN0cyBpbiBSZWFsbVxuJiM0MztcdFx0XHQgICAgIHdvcmxkIHVzaW5nIFJNTSwgYXMgZGVmaW5lZCBieSBBcm0gQ29uZmlkZW50aWFsXG4mIzQzO1x0XHRcdCAgICAgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSlcbiBcbiBcdFx0XHREZWZhdWx0cyB0byBWSEUvblZIRSBiYXNlZCBvbiBoYXJkd2FyZSBzdXBwb3J0LiBTZXR0aW5nXG4gXHRcdFx0bW9kZSB0byBcJiMzNDtwcm90ZWN0ZWRcJiMzNDsgd2lsbCBkaXNhYmxlIGtleGVjIGFuZCBoaWJlcm5hdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuaW5kZXggYTNjMTkyOGJkZjc0My4uZDM2MGE4YjA1YjhiZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG5AQCAtNzkzLDQgJiM0Mzs3OTMsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9yZXNldF92Y3B1X3BzY2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0dmNwdV9zZXRfcmVnKHZjcHUsIDAsIHJlc2V0X3N0YXRlLVx1MDAzZXIwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgZW51bSByZWFsbV9zdGF0ZSBrdm1fcmVhbG1fc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShrdm0tXHUwMDNlYXJjaC5yZWFsbS5zdGF0ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fc2V0X3JlYWxtX3N0YXRlKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSByZWFsbV9zdGF0ZSBuZXdfc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKGt2bS1cdTAwM2VhcmNoLnJlYWxtLnN0YXRlLCBuZXdfc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JlYWxtX2lzX2NyZWF0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGt2bV92bV9pc19yZWFsbShrdm0pIFx1MDAyNlx1MDAyNiBrdm1fcmVhbG1fc3RhdGUoa3ZtKSAhPSBSRUFMTV9TVEFURV9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZiAvKiBfX0FSTTY0X0tWTV9FTVVMQVRFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uZmJmZDg1ZGM5OTllZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZnBzaW1kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2FzbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcm1pLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdm5jcl9tYXBwaW5nLmhcdTAwM2VcbiBcbiAjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9JTlRDX0lOSVRJQUxJWkVEXG5AQCAtNjksNiAmIzQzOzcwLDcgQEAgZW51bSBrdm1fbW9kZSB7XG4gXHRLVk1fTU9ERV9ERUZBVUxULFxuIFx0S1ZNX01PREVfUFJPVEVDVEVELFxuIFx0S1ZNX01PREVfTlYsXG4mIzQzO1x0S1ZNX01PREVfUk1NLFxuIFx0S1ZNX01PREVfTk9ORSxcbiB9O1xuICNpZmRlZiBDT05GSUdfS1ZNXG5AQCAtMTUwLDYgJiM0MzsxNTIsMjYgQEAgc3RydWN0IGt2bV92bWlkIHtcbiBcdGF0b21pYzY0X3QgaWQ7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGt2bV92Y3B1X29wcyB7XG4mIzQzO1x0dm9pZCAoKnZjcHVfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiYjNDM7XHR2b2lkICgqdmNwdV9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3ZtX2dmbl9yYW5nZTtcbiYjNDM7c3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjO1xuJiM0MztcbiYjNDM7c3RydWN0IGt2bV92bV9zMl9vcHMge1xuJiM0MztcdGJvb2wgKCp2bV9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4mIzQzO1x0Ym9vbCAoKnZtX3Rlc3RfYWdlX2dmbikoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xuJiM0MztcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzKShzdHJ1Y3Qga3ZtICprdm0pO1xuJiM0MztcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiYjNDM7XHRcdFx0XHRcdCAgdTY0IG5yX3BhZ2VzKTtcbiYjNDM7XHR2b2lkICgqdm1fc3RhZ2UyX3VubWFwX3JhbmdlKShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuJiM0MztcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjQgc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIG1heV9ibG9jayk7XG4mIzQzO1x0aW50ICgqdm1fbWVtX2Fib3J0KShjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3Qga3ZtX3MyX21tdSB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtaWQgdm1pZDtcbiBcbkBAIC0yNTcsNyAmIzQzOzI3OSw2IEBAIHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHtcbiBcdHBrdm1faGFuZGxlX3QgaGFuZGxlO1xuIFx0c3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgdGVhcmRvd25fbWM7XG4gXHRzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSBzdGFnZTJfdGVhcmRvd25fbWM7XG4tXHRib29sIGlzX3Byb3RlY3RlZDtcbiBcdGJvb2wgaXNfY3JlYXRlZDtcbiBcbiBcdC8qXG5AQCAtMzA2LDkgJiM0MzszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQge1xuIFx0X19OUl9GR1RfR1JPVVBfSURTX19cbiB9O1xuIFxuJiM0MztlbnVtIGt2bV9hcm1fdm1fZmxhdm9yIHtcbiYjNDM7XHRWTV9OVkhFLFxuJiM0MztcdFZNX1ZIRSxcbiYjNDM7XHRWTV9QS1ZNLFx0XHQvKiBOb3JtYWwgZ3Vlc3RzIG9uIFBLVk0gKi9cbiYjNDM7XHRNQVJLRVIoX19WTV9DT05GSURFTlRJQUwpLFxuJiM0MztcdFZNX1BST1RFQ1RFRF9QS1ZNLFx0LyogUHJvdGVjdGVkIFZNICovXG4mIzQzO1x0Vk1fUkVBTE0sXHRcdC8qIENDQSAqL1xuJiM0MztcdFZNX0ZMQVZPUl9NQVgsXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX3MyX21tdSBtbXU7XG4gXG4mIzQzO1x0ZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB2bV9mbGF2b3I7XG4gXHQvKlxuIFx0ICogRmluZS1HcmFpbmVkIFVOREVGLCBtaW1pY2tpbmcgdGhlIEZHVCBsYXlvdXQgZGVmaW5lZCBieSB0aGVcbiBcdCAqIGFyY2hpdGVjdHVyZS4gV2UgdHJhY2sgdGhlbSBnbG9iYWxseSwgYXMgd2UgcHJlc2VudCB0aGVcbkBAIC0zMTgsNiAmIzQzOzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHU2NCBmZ3VbX19OUl9GR1RfR1JPVVBfSURTX19dO1xuIFxuJiM0MztcdGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzICp2bV9zMl9vcHM7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFN0YWdlIDIgcGFnaW5nIHN0YXRlIGZvciBWTXMgd2l0aCBuZXN0ZWQgUzIgdXNpbmcgYSB2aXJ0dWFsXG4gXHQgKiBWTUlELlxuQEAgLTQxNywxMSAmIzQzOzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4gXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbi1cdC8qXG4tXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICYjMzk7cGt2bS5oYW5kbGUmIzM5OyBpcyB1c2VkIHRvIGxvb2t1cFxuLVx0ICogdGhlIGFzc29jaWF0ZWQgcEtWTSBpbnN0YW5jZSBpbiB0aGUgaHlwZXJ2aXNvci5cbi1cdCAqL1xuLVx0c3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAmIzM5O3Brdm0uaGFuZGxlJiMzOTsgaXMgdXNlZCB0byBsb29rdXBcbiYjNDM7XHRcdCAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4mIzQzO1x0XHRzdHJ1Y3QgcmVhbG0gcmVhbG07XG4mIzQzO1x0fTtcbiBcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuIFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cbkBAIC04NDYsNiAmIzQzOzg4Myw3IEBAIHN0cnVjdCB2bmNyX3RsYjtcbiBcbiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XG4gXHRzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0IGN0eHQ7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqdmNwdV9vcHM7XG4gXG4gXHQvKlxuIFx0ICogR3Vlc3QgZmxvYXRpbmcgcG9pbnQgc3RhdGVcbkBAIC0xMzQ2LDcgJiM0MzsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1ib29sIGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2b2lkKTtcbiYjNDM7Ym9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcbiBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuQEAgLTE1MDQsOSAmIzQzOzE1NDIsMTMgQEAgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCk7XG4gXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfRkxVU0hfUkVNT1RFX1RMQlNfUkFOR0VcbiBcbi0jZGVmaW5lIGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKVx0KGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoa3ZtKS1cdTAwM2VhcmNoLnBrdm0uaXNfcHJvdGVjdGVkKVxuJiM0MzsjZGVmaW5lIGt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKVx0KChrdm0pLVx1MDAzZWFyY2gudm1fZmxhdm9yIFx1MDAzZT0gX19WTV9DT05GSURFTlRJQUwpXG4mIzQzOyNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pXHQoKGt2bSktXHUwMDNlYXJjaC52bV9mbGF2b3IgPT0gVk1fUFJPVEVDVEVEX1BLVk0pXG4mIzQzOyNkZWZpbmUga3ZtX3ZtX2lzX3JlYWxtKGt2bSlcdFx0KChrdm0pLVx1MDAzZWFyY2gudm1fZmxhdm9yID09IFZNX1JFQUxNKVxuIFxuJiM0MzsjZGVmaW5lIHZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpXHRrdm1fdm1faXNfY29uZmlkZW50aWFsKCh2Y3B1KS1cdTAwM2Vrdm0pXG4gI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KVx0XHRrdm1fdm1faXNfcHJvdGVjdGVkKCh2Y3B1KS1cdTAwM2Vrdm0pXG4mIzQzOyNkZWZpbmUgdmNwdV9pc19yZWModmNwdSlcdFx0a3ZtX3ZtX2lzX3JlYWxtKCh2Y3B1KS1cdTAwM2Vrdm0pXG4gXG4gaW50IGt2bV9hcm1fdmNwdV9maW5hbGl6ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBmZWF0dXJlKTtcbiBib29sIGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbmluZGV4IDQxYTg2ODc5MzhlYjYuLmMyZTRiMjllNjA1ZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuQEAgLTgsOSAmIzQzOzgsMTMgQEBcbiAjZGVmaW5lIF9fQVJNNjRfS1ZNX1BHVEFCTEVfSF9fXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yYnRyZWVfdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuJiM0MztzdHJ1Y3Qga3ZtX3MyX21tdTtcbiYjNDM7XG4gI2RlZmluZSBLVk1fUEdUQUJMRV9GSVJTVF9MRVZFTFx0XHQtMVxuICNkZWZpbmUgS1ZNX1BHVEFCTEVfTEFTVF9MRVZFTFx0XHQzXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oXG5pbmRleCBiZWVhMDBlNjkzYTBhLi41NGE2MThkODg3ZmE0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcbkBAIC03LDkgJiM0Mzs3LDkgQEBcbiAjZGVmaW5lIF9fQVJNNjRfS1ZNX1BLVk1fSF9fXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXJtX2ZmYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2FzbS9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbiBcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBWTXMgdGhhdCBjYW4gY28tZXhpc3QgdW5kZXIgcEtWTS4gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3JtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRmNWM3NWEyN2I1YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcm1pLmhcbkBAIC0wLDAgJiM0MzsxLDYxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyMy0yMDI2IEFSTSBMdGQuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX0FTTV9LVk1fUk1JX0hcbiYjNDM7I2RlZmluZSBfX0FTTV9LVk1fUk1JX0hcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHJlYWxtX3N0YXRlIC0gU3RhdGUgb2YgYSBSZWFsbVxuJiM0MzsgKlxuJiM0MzsgKiBNaXJyb3JzIHRoZSBSTU0mIzM5O3MgUmVhbG0gbGlmZWN5Y2xlIHN0YXRlcyB3aGVyZSB0aGV5IGFyZSBtZWFuaW5nZnVsIHRvIEtWTSxcbiYjNDM7ICogd2l0aCBSRUFMTV9TVEFURV9EWUlORyBiZWluZyBhIEtWTS1pbnRlcm5hbCBzdGF0ZSB1c2VkIHRvIHByZXZlbnQgZnVydGhlclxuJiM0MzsgKiByZXF1ZXN0cyB3aGlsZSB0ZWFyZG93biBpcyBpbiBwcm9ncmVzcy4gS1ZNIGRvZXMgbm90IHRyYWNrIFJFQUxNX1NZU1RFTV9PRkZcbiYjNDM7ICogb3IgUkVBTE1fWk9NQklFIHNlcGFyYXRlbHkgYXMgdGhleSBuYXR1cmFsbHkgbGVhZCB0byB0ZWFyZG93bi5cbiYjNDM7ICovXG4mIzQzO2VudW0gcmVhbG1fc3RhdGUge1xuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBSRUFMTV9TVEFURV9OT05FOlxuJiM0MztcdCAqICAgICAgUmVhbG0gaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkLiBybWlfcmVhbG1fY3JlYXRlKCkgaGFzIG5vdFxuJiM0MztcdCAqICAgICAgeWV0IGJlZW4gY2FsbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdFJFQUxNX1NUQVRFX05PTkUsXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQFJFQUxNX1NUQVRFX05FVzpcbiYjNDM7XHQgKiAgICAgIFJlYWxtIGlzIHVuZGVyIGNvbnN0cnVjdGlvbiwgcm1pX3JlYWxtX2NyZWF0ZSgpIGhhcyBiZWVuXG4mIzQzO1x0ICogICAgICBjYWxsZWQsIGJ1dCBpdCBpcyBub3QgeWV0IGFjdGl2YXRlZC4gUGFnZXMgbWF5IGJlIHBvcHVsYXRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9ORVcsXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQFJFQUxNX1NUQVRFX0FDVElWRTpcbiYjNDM7XHQgKiAgICAgIFJlYWxtIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGlzIGVsaWdpYmxlIGZvciBleGVjdXRpb24gd2l0aFxuJiM0MztcdCAqICAgICAgcm1pX3JlY19lbnRlcigpLiBQYWdlcyBtYXkgbm8gbG9uZ2VyIGJlIHBvcHVsYXRlZCB3aXRoXG4mIzQzO1x0ICogICAgICBybWlfZGF0YV9jcmVhdGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9BQ1RJVkUsXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQFJFQUxNX1NUQVRFX0RZSU5HOlxuJiM0MztcdCAqICAgICAgUmVhbG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkIG9yIGhhcyBhbHJlYWR5IGJlZW5cbiYjNDM7XHQgKiAgICAgIGRlc3Ryb3llZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9EWUlORyxcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAUkVBTE1fU1RBVEVfREVBRDpcbiYjNDM7XHQgKiAgICAgIFJlYWxtIGhhcyBiZWVuIGRlc3Ryb3llZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRSRUFMTV9TVEFURV9ERUFEXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJlYWxtIC0gQWRkaXRpb25hbCBwZXIgVk0gZGF0YSBmb3IgYSBSZWFsbVxuJiM0MzsgKlxuJiM0MzsgKiBAc3RhdGU6IFRoZSBsaWZldGltZSBzdGF0ZSBtYWNoaW5lIGZvciB0aGUgcmVhbG1cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByZWFsbSB7XG4mIzQzO1x0ZW51bSByZWFsbV9zdGF0ZSBzdGF0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2luaXRfcm1pKHZvaWQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fQVNNX0tWTV9STUlfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbmluZGV4IGI1NDY3MDNjM2FiOWEuLjkyY2VjNDI5NTJmNDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZpcnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbkBAIC04Nyw2ICYjNDM7ODcsNyBAQCB2b2lkIF9faHlwX3Jlc2V0X3ZlY3RvcnModm9pZCk7XG4gYm9vbCBpc19rdm1fYXJtX2luaXRpYWxpc2VkKHZvaWQpO1xuIFxuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcHJvdGVjdGVkX21vZGVfaW5pdGlhbGl6ZWQpO1xuJiM0MztERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoa3ZtX3JtaV9pc19hdmFpbGFibGUpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wa3ZtX2luaXRpYWxpemVkKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlIGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbmluZGV4IDU5NjEyZDJmMjc3YzEuLmVkM2NmMzBlYjA2ZTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBDRkxBR1NfaGFuZGxlX2V4aXQubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0XG4ga3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4gXHQgaW5qZWN0X2ZhdWx0Lm8gdmFfbGF5b3V0Lm8gaGFuZGxlX2V4aXQubyBjb25maWcubyBcXFxuIFx0IGd1ZXN0Lm8gZGVidWcubyByZXNldC5vIHN5c19yZWdzLm8gc3RhY2t0cmFjZS5vIFxcXG4tXHQgdmdpYy1zeXMtcmVnLXYzLm8gZnBzaW1kLm8gcGt2bS5vIFxcXG4mIzQzO1x0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBybWkubyBcXFxuIFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggNmFjMzMyMWY0YzU3NS4uM2VkZGY0NGY3YjFkZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG5AQCAtNTYsMTEgJiM0Mzs1NiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fYXJjaF90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpXG4gXHRyZXR1cm4ga3ZtX3ZnaWNfZ2xvYmFsX3N0YXRlLm5vX2h3X2RlYWN0aXZhdGlvbiA/IFZHSUNfSVJRX1NXX1JFU0FNUExFIDogMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9yZWFsbV90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNSV9SRUNfRU5URVIgcmVqZWN0cyBMUnMgd2l0aCB0aGUgSFcgYml0IHNldCwgc28gdXNlIHRoZSBleGlzdGluZ1xuJiM0MztcdCAqIHNvZnR3YXJlIHJlc2FtcGxpbmcgbWVjaGFuaXNtIGZvciBSZWFsbSB0aW1lciBpbnRlcnJ1cHRzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBWR0lDX0lSUV9TV19SRVNBTVBMRTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9vcHMgYXJjaF90aW1lcl9pcnFfb3BzID0ge1xuIFx0LmdldF9mbGFnc1x0ID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lycV9mbGFncyxcbiBcdC5nZXRfaW5wdXRfbGV2ZWwgPSBrdm1fYXJjaF90aW1lcl9nZXRfaW5wdXRfbGV2ZWwsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIHJlYWxtX3RpbWVyX2lycV9vcHMgPSB7XG4mIzQzO1x0LmdldF9mbGFnc1x0ID0ga3ZtX3JlYWxtX3RpbWVyX2dldF9pcnFfZmxhZ3MsXG4mIzQzO1x0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0ge1xuIFx0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiBcdC5xdWV1ZV9pcnFfdW5sb2NrID0gdmdpY192NV9wcGlfcXVldWVfaXJxX3VubG9jayxcbkBAIC0xMDc5LDcgJiM0MzsxMDkzLDcgQEAgc3RhdGljIHZvaWQgdGltZXJfY29udGV4dF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRpbWVyaWQpXG4gXG4gXHRjdHh0LVx1MDAzZXRpbWVyX2lkID0gdGltZXJpZDtcbiBcbi1cdGlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRpZiAoIXZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpKSB7XG4gXHRcdGlmICh0aW1lcmlkID09IFRJTUVSX1ZUSU1FUilcbiBcdFx0XHRjdHh0LVx1MDAzZW9mZnNldC52bV9vZmZzZXQgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC50aW1lcl9kYXRhLnZvZmZzZXQ7XG4gXHRcdGVsc2VcbkBAIC0xMTEwLDcgJiM0MzsxMTI0LDcgQEAgdm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dGltZXJfY29udGV4dF9pbml0KHZjcHUsIGkpO1xuIFxuIFx0LyogU3luY2hyb25pemUgb2Zmc2V0cyBhY3Jvc3MgdGltZXJzIG9mIGEgVk0gaWYgbm90IGFscmVhZHkgcHJvdmlkZWQgKi9cbi1cdGlmICghdmNwdV9pc19wcm90ZWN0ZWQodmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhdGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19WTV9DT1VOVEVSX09GRlNFVCwgXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5mbGFncykpIHtcbiBcdFx0dGltZXJfc2V0X29mZnNldCh2Y3B1X3Z0aW1lcih2Y3B1KSwga3ZtX3BoeXNfdGltZXJfcmVhZCgpKTtcbiBcdFx0dGltZXJfc2V0X29mZnNldCh2Y3B1X3B0aW1lcih2Y3B1KSwgMCk7XG5AQCAtMTYwOSw4ICYjNDM7MTYyMywxMiBAQCBpbnQga3ZtX3RpbWVyX2VuYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRnZXRfdGltZXJfbWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4gXG4tXHRvcHMgPSB2Z2ljX2lzX3Y1KHZjcHUtXHUwMDNla3ZtKSA/IFx1MDAyNmFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1IDpcbi1cdFx0XHRcdCAgICAgIFx1MDAyNmFyY2hfdGltZXJfaXJxX29wcztcbiYjNDM7XHRpZiAodmNwdV9pc19yZWModmNwdSkpXG4mIzQzO1x0XHRvcHMgPSBcdTAwMjZyZWFsbV90aW1lcl9pcnFfb3BzO1xuJiM0MztcdGVsc2UgaWYgKHZnaWNfaXNfdjUodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0b3BzID0gXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzX3ZnaWNfdjU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0b3BzID0gXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX3RpbWVycyh2Y3B1KTsgaSYjNDM7JiM0MzspXG4gXHRcdGt2bV92Z2ljX3NldF9pcnFfb3BzKHZjcHUsIHRpbWVyX2lycSh2Y3B1X2dldF90aW1lcih2Y3B1LCBpKSksIG9wcyk7XG5AQCAtMTczNiw3ICYjNDM7MTc1NCw3IEBAIGludCBrdm1fdm1faW9jdGxfc2V0X2NvdW50ZXJfb2Zmc2V0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChvZmZzZXQtXHUwMDNlcmVzZXJ2ZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSlcbiYjNDM7XHRpZiAoa3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDhiMDgwODA0YmM5MGIuLjNmZTVhNGY3NzczOGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC00Miw2ICYjNDM7NDIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmVzdGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3Brdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcHRyYXV0aC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcm1pLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlL252aGUuaFx1MDAzZVxuIFxuQEAgLTc0LDYgJiM0Mzs3NSw4IEBAIHN0cnVjdCBrdm1faW9jdGxfY2FwX21hcCB7XG4gXHRsb25nIGV4dDtcbiB9O1xuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqYXJtNjRfdmNwdV9vcHNbVk1fRkxBVk9SX01BWF07XG4mIzQzO1xuIC8qIE1ha2UgS1ZNX0NBUF9OUl9WQ1BVUyB0aGUgcmVmZXJlbmNlIGZvciBmZWF0dXJlcyB3ZSBhbHdheXMgc3VwcG9ydGVkICovXG4gI2RlZmluZSBLVk1fQ0FQX0FSTV9CQVNJQ1x0S1ZNX0NBUF9OUl9WQ1BVU1xuIFxuQEAgLTExMSw2ICYjNDM7MTE0LDggQEAgbG9uZyBrdm1fZ2V0X2NhcF9mb3Jfa3ZtX2lvY3RsKHVuc2lnbmVkIGludCBpb2N0bCwgbG9uZyAqZXh0KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztERUZJTkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7XG4mIzQzO1xuIERFQ0xBUkVfS1ZNX0hZUF9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGt2bV9oeXBfdmVjdG9yKTtcbiBcbiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1fYXJtX2h5cF9zdGFja19iYXNlKTtcbkBAIC0xMzIsNiAmIzQzOzEzNywyNSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3ZjcHVfZXhpdGluZ19ndWVzdF9tb2RlKHZjcHUpID09IElOX0dVRVNUX01PREU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBrdm1fcmVhbG1fZXh0X2FsbG93ZWQobG9uZyBleHQpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGV4dCkge1xuJiM0MztcdGNhc2UgS1ZNX0NBUF9JUlFDSElQOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9BUk1fUFNDSTpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0lfMF8yOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfTUFYX1ZDUFVTOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9NQVhfVkNQVV9JRDpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfTVNJX0RFVklEOlxuJiM0MztcdGNhc2UgS1ZNX0NBUF9BUk1fVk1fSVBBX1NJWkU6XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0FERFJFU1M6XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0dFTkVSSUM6XG4mIzQzO1x0Y2FzZSBLVk1fQ0FQX1NZTkNfTU1VOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgKmNhcClcbiB7XG5AQCAtMTQzLDYgJiM0MzsxNjcsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxuIFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAha3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBjYXAtXHUwMDNlY2FwKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXHUwMDI2XHUwMDI2ICFrdm1fcmVhbG1fZXh0X2FsbG93ZWQoY2FwLVx1MDAzZWNhcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRzd2l0Y2ggKGNhcC1cdTAwM2VjYXApIHtcbiBcdGNhc2UgS1ZNX0NBUF9BUk1fTklTVl9UT19VU0VSOlxuIFx0XHRyID0gMDtcbkBAIC0yMTQsNiAmIzQzOzI0MSwyNiBAQCBzdGF0aWMgaW50IGt2bV9hcm1fZGVmYXVsdF9tYXhfdmNwdXModm9pZClcbiBcdHJldHVybiB2Z2ljX3ByZXNlbnQgPyBrdm1fdmdpY19nZXRfbWF4X3ZjcHVzKCkgOiBLVk1fTUFYX1ZDUFVTO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1faW5pdF92bV9mbGF2b3Ioc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRib29sIHByb3RlY3RlZCA9IHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQ7XG4mIzQzO1xuJiM0MztcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkge1xuJiM0MztcdFx0aWYgKHByb3RlY3RlZClcbiYjNDM7XHRcdFx0a3ZtLVx1MDAzZWFyY2gudm1fZmxhdm9yID0gVk1fUFJPVEVDVEVEX1BLVk07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1BLVk07XG4mIzQzO1x0fSBlbHNlIGlmIChwcm90ZWN0ZWQpIHtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH0gZWxzZSBpZiAoaGFzX3ZoZSgpKSB7XG4mIzQzO1x0XHRrdm0tXHUwMDNlYXJjaC52bV9mbGF2b3IgPSBWTV9WSEU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBrdm1fYXJjaF9pbml0X3ZtIC0gaW5pdGlhbGl6ZXMgYSBWTSBkYXRhIHN0cnVjdHVyZVxuICAqIEBrdm06XHRwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0XG5AQCAtMjM2LDYgJiM0MzsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuICNlbmRpZlxuIFxuJiM0MztcdHJldCA9IGt2bV9pbml0X3ZtX2ZsYXZvcihrdm0sIHR5cGUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdGt2bV9pbml0X25lc3RlZChrdm0pO1xuIFxuIFx0cmV0ID0ga3ZtX3NoYXJlX2h5cChrdm0sIGt2bSAmIzQzOyAxKTtcbkBAIC0yNjAsOSAmIzQzOzMxMSw2IEBAIGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuIFx0XHRyZXQgPSBwa3ZtX2luaXRfaG9zdF92bShrdm0sIHR5cGUpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3VuaW5pdF9tbXU7XG4tXHR9IGVsc2UgaWYgKHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQpIHtcbi1cdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfdW5pbml0X21tdTtcbiBcdH1cbiBcbiBcdGt2bV92Z2ljX2Vhcmx5X2luaXQoa3ZtKTtcbkBAIC0zODEsNiAmIzQzOzQyOSw5IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIGV4dCkpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlmIChrdm0gXHUwMDI2XHUwMDI2IGt2bV92bV9pc19yZWFsbShrdm0pIFx1MDAyNlx1MDAyNiAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRzd2l0Y2ggKGV4dCkge1xuIFx0Y2FzZSBLVk1fQ0FQX0lSUUNISVA6XG4gXHRcdHIgPSB2Z2ljX3ByZXNlbnQ7XG5AQCAtNDQ3LDcgJiM0Mzs0OTgsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRyID0gc3lzdGVtX3N1cHBvcnRzX210ZSgpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgS1ZNX0NBUF9TVEVBTF9USU1FOlxuLVx0XHRyID0ga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCk7XG4mIzQzO1x0XHRyID0ga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDFfMzJCSVQ6XG4gXHRcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpO1xuQEAgLTU0OCw2ICYjNDM7NTk5LDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbiAjZW5kaWZcbiBcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMgPSBhcm02NF92Y3B1X29wc1t2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvcl07XG4mIzQzO1xuIFx0LyogRm9yY2UgdXNlcnMgdG8gY2FsbCBLVk1fQVJNX1ZDUFVfSU5JVCAqL1xuIFx0dmNwdV9jbGVhcl9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuIFxuQEAgLTY2MiwxNCAmIzQzOzcxNSwxMSBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBzaW5nbGVfdGFza19ydW5uaW5nKCk7XG4gfVxuIFxuLXZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiYjNDM7c3RhdGljIHZvaWQgdmNwdV9wcmVwYXJlX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV9zMl9tbXUgKm1tdTtcbiBcdGludCAqbGFzdF9yYW47XG4gXG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4tXHRcdGdvdG8gbm9tbXU7XG4tXG4gXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4gXHRcdGt2bV92Y3B1X2xvYWRfaHdfbW11KHZjcHUpO1xuIFxuQEAgLTY5OSwxMCAmIzQzOzc0OSwzMCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdGt2bV9jYWxsX2h5cChfX2t2bV9mbHVzaF9jcHVfY29udGV4dCwgbW11KTtcbiBcdFx0Kmxhc3RfcmFuID0gdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiBcdH1cbiYjNDM7fVxuIFxuLW5vbW11OlxuLVx0dmNwdS1cdTAwM2VjcHUgPSBjcHU7XG4mIzQzO3N0YXRpYyB2b2lkIHZjcHVfc2V0X3dmeF90cmFwcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZSh2Y3B1KSlcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIFx1MDAyNj0gfkhDUl9UV0U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXG4mIzQzO1x0XHR2Y3B1LVx1MDAzZWFyY2guaGNyX2VsMiBcdTAwMjY9IH5IQ1JfVFdJO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZjcHVfbG9hZF9wdnRpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbiYjNDM7XHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZoZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0dmNwdV9wcmVwYXJlX21tdSh2Y3B1KTtcbiBcdC8qXG4gXHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcbiBcdCAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuXG5AQCAtNzExLDMyICYjNDM7NzgxLDY4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdGt2bV92Z2ljX2xvYWQodmNwdSk7XG4gXHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xuIFx0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XG4tXHRpZiAoaGFzX3ZoZSgpKVxuLVx0XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuLVx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbi1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG4gXG4tXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZSh2Y3B1KSlcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgXHUwMDI2PSB+SENSX1RXRTtcbi1cdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcbiYjNDM7XHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuJiM0MztcdHZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTtcbiYjNDM7XHR2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTtcbiYjNDM7fVxuIFxuLVx0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIFx1MDAyNj0gfkhDUl9UV0k7XG4tXHRlbHNlXG4tXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7XG4mIzQzO3N0YXRpYyB2b2lkIG52aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiYjNDM7e1xuJiM0MztcdHZjcHVfcHJlcGFyZV9tbXUodmNwdSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcbiYjNDM7XHQgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLlxuJiM0MztcdCAqL1xuJiM0MztcdGt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7XG4mIzQzO1x0a3ZtX3ZnaWNfbG9hZCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X2xvYWRfZmd0KHZjcHUpO1xuJiM0MztcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTtcbiBcbiYjNDM7XHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuJiM0MztcdHZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTtcbiBcdHZjcHVfc2V0X3BhdXRoX3RyYXBzKHZjcHUpO1xuJiM0Mzt9XG4gXG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcbi1cdFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfbG9hZCxcbi1cdFx0XHRcdCAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSxcbi1cdFx0XHRcdCAgdmNwdS1cdTAwM2V2Y3B1X2lkeCwgdmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIpO1xuLVx0XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3Jlc3RvcmVfdm1jcl9hcHJzLFxuLVx0XHRcdCAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuLVx0fVxuJiM0MztzdGF0aWMgdm9pZCBwa3ZtX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxuJiM0MztcdCAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X2xvYWRfZGVidWcodmNwdSk7XG4mIzQzO1x0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XG4mIzQzO1x0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuJiM0MztcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuJiM0MztcdHZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfbG9hZCxcbiYjNDM7XHRcdFx0ICB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlLFxuJiM0MztcdFx0XHQgIHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyKTtcbiYjNDM7XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3Jlc3RvcmVfdm1jcl9hcHJzLFxuJiM0MztcdFx0ICAgICBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlYWxtX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdGltZXJfdmNwdV9sb2FkKHZjcHUpO1xuJiM0MztcdGt2bV92Z2ljX2xvYWQodmNwdSk7XG4mIzQzO1x0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHR2Y3B1LVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMtXHUwMDNldmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzKSlcbiBcdFx0dmNwdV9zZXRfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuQEAgLTc0NCwyOCAmIzQzOzg1MCw1MCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHR2Y3B1LVx1MDAzZWFyY2gucGlkID0gcGlkX25yKHZjcHUtXHUwMDNlcGlkKTtcbiB9XG4gXG4tdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3N0YXRpYyB2b2lkIHZoZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKSB7XG4tXHRcdGt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfc2F2ZV9hcHJzLCBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XG4tXG4tXHRcdC8qIF9fcGt2bV92Y3B1X3B1dCBpbXBsaWVzIGEgc3luYyBvZiB0aGUgc3RhdGUgKi9cbi1cdFx0aWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXHUwMDNla3ZtKSlcbi1cdFx0XHR2Y3B1X3NldF9mbGFnKHZjcHUsIFBLVk1fSE9TVF9TVEFURV9ESVJUWSk7XG4tXHR9XG4tXG4gXHRrdm1fdmNwdV9wdXRfZGVidWcodmNwdSk7XG4gXHRrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTtcbi1cdGlmIChoYXNfdmhlKCkpXG4tXHRcdGt2bV92Y3B1X3B1dF92aGUodmNwdSk7XG4mIzQzO1x0a3ZtX3ZjcHVfcHV0X3ZoZSh2Y3B1KTtcbiBcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcbiBcdGt2bV92Z2ljX3B1dCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7XG4gXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4gXHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4mIzQzO31cbiBcbiYjNDM7c3RhdGljIHZvaWQgbnZoZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdmNwdV9wdXRfZGVidWcodmNwdSk7XG4mIzQzO1x0a3ZtX2FyY2hfdmNwdV9wdXRfZnAodmNwdSk7XG4mIzQzO1x0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xuJiM0MztcdGt2bV92Z2ljX3B1dCh2Y3B1KTtcbiYjNDM7XHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHZjcHUpO1xuJiM0MztcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuJiM0MztcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XG4mIzQzO1xuJiM0MztcdC8qIF9fcGt2bV92Y3B1X3B1dCBpbXBsaWVzIGEgc3luYyBvZiB0aGUgc3RhdGUgKi9cbiYjNDM7XHRpZiAoIWt2bV92bV9pc19wcm90ZWN0ZWQodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpO1xuJiM0MztcbiYjNDM7XHRudmhlX3ZjcHVfcHV0KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFsbV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRrdm1fdGltZXJfdmNwdV9wdXQodmNwdSk7XG4mIzQzO1x0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHZjcHUtXHUwMDNlYXJjaC52Y3B1X29wcy1cdTAwM2V2Y3B1X3B1dCh2Y3B1KTtcbiBcdHZjcHVfY2xlYXJfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuIFx0dmNwdS1cdTAwM2VjcHUgPSAtMTtcbiB9XG5AQCAtMTg1Miw2ICYjNDM7MTk4MCwxOCBAQCBzdGF0aWMgaW50IGt2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiBfX2t2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHZjcHUsIGV2ZW50cyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZWFsbSBWQ1BVcyBjYW4gYmUgZmluYWxpemVkIGFmdGVyIHRoZSBSZWFsbSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQuXG4mIzQzOyAqIEFsbG93IHRoZSByZWdpc3RlciBsaXN0IGZvciBSRUNzIGJlZm9yZSB0aGUgVkNQVXMgYXJlIGZpbmFsaXplZCwgYnV0XG4mIzQzOyAqIGFmdGVyIHRoZSBTVkUgaXMgZmluYWxpemVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wga3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gdmNwdV9pc19yZWModmNwdSk7XG4mIzQzO31cbiYjNDM7XG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC0xOTA3LDcgJiM0MzsyMDQ3LDcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRyID0gLUVQRVJNO1xuLVx0XHRpZiAoIWt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQodmNwdSkpXG4mIzQzO1x0XHRpZiAoIWt2bV9hcm1fdmNwdV9yZWdfbGlzdF9hbGxvd2VkKHZjcHUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRyID0gLUVGQVVMVDtcbkBAIC0yMTA1LDYgJiM0MzsyMjQ1LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHZoZV92Y3B1X29wcyA9IHtcbiYjNDM7XHQudmNwdV9sb2FkID0gdmhlX3ZjcHVfbG9hZCxcbiYjNDM7XHQudmNwdV9wdXQgPSB2aGVfdmNwdV9wdXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyBudmhlX3ZjcHVfb3BzID0ge1xuJiM0MztcdC52Y3B1X2xvYWQgPSBudmhlX3ZjcHVfbG9hZCxcbiYjNDM7XHQudmNwdV9wdXQgPSBudmhlX3ZjcHVfcHV0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgcGt2bV92Y3B1X29wcyA9IHtcbiYjNDM7XHQudmNwdV9sb2FkID0gcGt2bV92Y3B1X2xvYWQsXG4mIzQzO1x0LnZjcHVfcHV0ID0gcGt2bV92Y3B1X3B1dCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHJlYWxtX3ZjcHVfb3BzID0ge1xuJiM0MztcdC52Y3B1X2xvYWQgPSByZWFsbV92Y3B1X2xvYWQsXG4mIzQzO1x0LnZjcHVfcHV0ID0gcmVhbG1fdmNwdV9wdXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqYXJtNjRfdmNwdV9vcHNbXSA9IHtcbiYjNDM7XHRbVk1fVkhFXSA9IFx1MDAyNnZoZV92Y3B1X29wcyxcbiYjNDM7XHRbVk1fTlZIRV0gPSBcdTAwMjZudmhlX3ZjcHVfb3BzLFxuJiM0MztcdFtWTV9QS1ZNXSA9IFx1MDAyNnBrdm1fdmNwdV9vcHMsXG4mIzQzO1x0W1ZNX1BST1RFQ1RFRF9QS1ZNXSA9IFx1MDAyNnBrdm1fdmNwdV9vcHMsXG4mIzQzO1x0W1ZNX1JFQUxNXSA9IFx1MDAyNnJlYWxtX3ZjcHVfb3BzLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBudmhlX3BlcmNwdV9zaXplKHZvaWQpXG4ge1xuIFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUNIT09TRV9OVkhFX1NZTShfX3Blcl9jcHVfZW5kKSAtXG5AQCAtMzA1MCw2ICYjNDM7MzIxOCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGt2bV9hcm1faW5pdCh2b2lkKVxuIFxuIFx0aW5faHlwX21vZGUgPSBpc19rZXJuZWxfaW5faHlwX21vZGUoKTtcbiBcbiYjNDM7XHRrdm1faW5pdF9ybWkoKTtcbiYjNDM7XG4gXHRpZiAoY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9XT1JLQVJPVU5EX0RFVklDRV9MT0FEX0FDUVVJUkUpIHx8XG4gXHQgICAgY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9XT1JLQVJPVU5EXzE1MDg0MTIpKVxuIFx0XHRrdm1faW5mbyhcJiMzNDtHdWVzdHMgd2l0aG91dCByZXF1aXJlZCBDUFUgZXJyYXR1bSB3b3JrYXJvdW5kcyBjYW4gZGVhZGxvY2sgc3lzdGVtIVxcblwmIzM0OyBcXFxuQEAgLTMxNTUsNiAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfa3ZtX21vZGVfY2ZnKGNoYXIgKmFyZylcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHN0cmNtcChhcmcsIFwmIzM0O3JtbVwmIzM0OykgPT0gMCBcdTAwMjZcdTAwMjYgIVdBUk5fT04oIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKSkge1xuJiM0MztcdFx0a3ZtX21vZGUgPSBLVk1fTU9ERV9STU07XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIGVhcmx5X3BhcmFtKFwmIzM0O2t2bS1hcm0ubW9kZVwmIzM0OywgZWFybHlfa3ZtX21vZGVfY2ZnKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ndWVzdC5jIGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xuaW5kZXggYjAxZDY2MjJiODcyMC4uNmJlYzczZDFlZTA1MCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmNcbkBAIC01OTgsOCAmIzQzOzU5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fc3ZlX3JlZ3MoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCF2Y3B1X2hhc19zdmUodmNwdSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogUG9saWNlZCBieSBLVk1fR0VUX1JFR19MSVNUOiAqL1xuLVx0V0FSTl9PTigha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpO1xuJiM0MztcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXG4mIzQzO1xuJiM0MztcdGlmIChrdm1fdm1faXNfcmVhbG0odmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqL1xuIFxuIFx0cmV0dXJuIHNsaWNlcyAqIChTVkVfTlVNX1BSRUdTICYjNDM7IFNWRV9OVU1fWlJFR1MgJiM0MzsgMSAvKiBGRlIgKi8pXG4gXHRcdCYjNDM7IDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqL1xuQEAgLTYxNiw5ICYjNDM7NjE5LDYgQEAgc3RhdGljIGludCBjb3B5X3N2ZV9yZWdfaW5kaWNlcyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpZiAoIXZjcHVfaGFzX3N2ZSh2Y3B1KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBQb2xpY2VkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6ICovXG4tXHRXQVJOX09OKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSk7XG4tXG4gXHQvKlxuIFx0ICogRW51bWVyYXRlIHRoaXMgZmlyc3QsIHNvIHRoYXQgdXNlcnNwYWNlIGNhbiBzYXZlL3Jlc3RvcmUgaW5cbiBcdCAqIHRoZSBvcmRlciByZXBvcnRlZCBieSBLVk1fR0VUX1JFR19MSVNUOlxuQEAgLTYyOCw2ICYjNDM7NjI4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdCYjNDM7JiM0MztudW1fcmVncztcbiBcbiYjNDM7XHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKVxuJiM0MztcdFx0cmV0dXJuIG51bV9yZWdzO1xuJiM0MztcbiYjNDM7XHRpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtXHUwMDNla3ZtKSlcbiYjNDM7XHRcdHJldHVybiBudW1fcmVncztcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzbGljZXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGZvciAobiA9IDA7IG4gXHUwMDNjIFNWRV9OVU1fWlJFR1M7IG4mIzQzOyYjNDM7KSB7XG4gXHRcdFx0cmVnID0gS1ZNX1JFR19BUk02NF9TVkVfWlJFRyhuLCBpKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbmluZGV4IDQ1OWJkOWViN2U0YmMuLjA5OTYxYzAwNTZmMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uY1xuQEAgLTQzMiw3ICYjNDM7NDMyLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wa3ZtX2h5cF92bShzdHJ1Y3Qga3ZtICpob3N0X2t2bSwgc3RydWN0IHBrdm1faHlwX3ZtICpoeXBfdm0sXG4gXG4gXHRoeXBfdm0tXHUwMDNlaG9zdF9rdm0gPSBob3N0X2t2bTtcbiBcdGh5cF92bS1cdTAwM2Vrdm0uY3JlYXRlZF92Y3B1cyA9IG5yX3ZjcHVzO1xuLVx0aHlwX3ZtLVx1MDAzZWt2bS5hcmNoLnBrdm0uaXNfcHJvdGVjdGVkID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLVx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQpO1xuJiM0MztcdGh5cF92bS1cdTAwM2Vrdm0uYXJjaC52bV9mbGF2b3IgPSBSRUFEX09OQ0UoaG9zdF9rdm0tXHUwMDNlYXJjaC52bV9mbGF2b3IpO1xuIFx0aHlwX3ZtLVx1MDAzZWt2bS5hcmNoLmZsYWdzID0gMDtcbiBcdHBrdm1faW5pdF9mZWF0dXJlc19mcm9tX2hvc3QoaHlwX3ZtLCBob3N0X2t2bSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcbmluZGV4IGI3NGRkNWNlMWVmZDMuLmY0ODI1M2I5ZDg4YjUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhZ2UyX3BndGFibGUuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuY1xuaW5kZXggYjExYjg4MjFjOWZiYy4uMmIxZTZmZGViNGQ1YyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXG5AQCAtNDE0LDE0ICYjNDM7NDE0LDE0IEBAIHZvaWQga3ZtX2FybV90ZWFyZG93bl9oeXBlcmNhbGxzKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBpbnQga3ZtX2FybV9nZXRfZndfbnVtX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBBUlJBWV9TSVpFKGt2bV9hcm1fZndfcmVnX2lkcyk7XG4mIzQzO1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTtcbiB9XG4gXG4gaW50IGt2bV9hcm1fY29weV9md19yZWdfaW5kaWNlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAocHV0X3VzZXIoa3ZtX2FybV9md19yZWdfaWRzW2ldLCB1aW5kaWNlcyYjNDM7JiM0MzspKVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcbmluZGV4IGQ2YzRmYzE2Zjg3OTUuLmQ2MWEzZmYwNGZhYmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcbkBAIC0zMTcsNiAmIzQzOzMxNyw3IEBAIHZvaWQga3ZtX2luamVjdF9zaXplX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgKi9cbiB2b2lkIGt2bV9pbmplY3RfdW5kZWZpbmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4mIzQzO1x0S1ZNX0JVRyh2Y3B1X2lzX3JlYyh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0sIFwmIzM0O1VuZXhwZWN0ZWQgdW5kZWZpbmVkIGV4Y2VwdGlvbiBpbmplY3Rpb24gdG8gUkVDXCYjMzQ7KTtcbiBcdGlmICh2Y3B1X2VsMV9pc18zMmJpdCh2Y3B1KSlcbiBcdFx0aW5qZWN0X3VuZGVmMzIodmNwdSk7XG4gXHRlbHNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW1pby5jIGIvYXJjaC9hcm02NC9rdm0vbW1pby5jXG5pbmRleCBkMWMzYTM1MmQ1YTIyLi5iYmNmNTJmMDFlOTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbW1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbWlvLmNcbkBAIC0xNjgsMTQgJiM0MzsxNjgsMTQgQEAgaW50IGlvX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGZhdWx0X2lwYSlcbiBcdCAqIE5vIHZhbGlkIHN5bmRyb21lPyBBc2sgdXNlcnNwYWNlIGZvciBoZWxwIGlmIGl0IGhhc1xuIFx0ICogdm9sdW50ZWVyZWQgdG8gZG8gc28sIGFuZCBiYWlsIG91dCBvdGhlcndpc2UuXG4gXHQgKlxuLVx0ICogSW4gdGhlIHByb3RlY3RlZCBWTSBjYXNlLCB0aGVyZSBpc24mIzM5O3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvXG4mIzQzO1x0ICogSW4gdGhlIHByb3RlY3RlZC9SZWFsbSBWTSBjYXNlLCB0aGVyZSBpc24mIzM5O3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvXG4gXHQgKiB0aG91Z2gsIHNvIGRpcmVjdGx5IGRlbGl2ZXIgYW4gZXhjZXB0aW9uIHRvIHRoZSBndWVzdC5cbiBcdCAqL1xuIFx0aWYgKCFrdm1fdmNwdV9kYWJ0X2lzdmFsaWQodmNwdSkpIHtcbiBcdFx0dHJhY2Vfa3ZtX21taW9fbmlzdigqdmNwdV9wYyh2Y3B1KSwgZXNyLFxuIFx0XHRcdFx0ICAgIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpLCBmYXVsdF9pcGEpO1xuIFxuLVx0XHRpZiAodmNwdV9pc19wcm90ZWN0ZWQodmNwdSkpXG4mIzQzO1x0XHRpZiAodmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkpXG4gXHRcdFx0cmV0dXJuIGt2bV9pbmplY3Rfc2VhX2RhYnQodmNwdSwga3ZtX3ZjcHVfZ2V0X2hmYXIodmNwdSkpO1xuIFxuIFx0XHRpZiAodGVzdF9iaXQoS1ZNX0FSQ0hfRkxBR19SRVRVUk5fTklTVl9JT19BQk9SVF9UT19VU0VSLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDliYTg2NDUwZmU0YWYuLjVlN2NkYmUzMTBmYzggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0zNyw2ICYjNDM7MzcsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGlvX21hcF9iYXNlO1xuIFxuICNkZWZpbmUgS1ZNX1BHVF9GTihmbilcdFx0KCFpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSA/IGZuIDogcCAjIyBmbilcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIHByb3RlY3RlZF9wa3ZtX3MyX29wcztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIHVucHJvdGVjdGVkX3Brdm1fczJfb3BzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMga3ZtX2RlZmF1bHRfdm1fczJfb3BzO1xuJiM0MztcbiBzdGF0aWMgcGh5c19hZGRyX3QgX19zdGFnZTJfcmFuZ2VfYWRkcl9lbmQocGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kLFxuIFx0XHRcdFx0XHQgICBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbkBAIC0xNjYsNiAmIzQzOzE3MCwxOCBAQCBzdGF0aWMgYm9vbCBtZW1zbG90X2lzX2xvZ2dpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiBcdHJldHVybiBtZW1zbG90LVx1MDAzZWRpcnR5X2JpdG1hcCBcdTAwMjZcdTAwMjYgIShtZW1zbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGt2bV9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX2NhbGxfaHlwKF9fa3ZtX3RsYl9mbHVzaF92bWlkLCBcdTAwMjZrdm0tXHUwMDNlYXJjaC5tbXUpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzKCkgLSBmbHVzaCBhbGwgVk0gVExCIGVudHJpZXMgZm9yIHY3LzhcbiAgKiBAa3ZtOlx0cG9pbnRlciB0byBrdm0gc3RydWN0dXJlLlxuQEAgLTE3NCwyNiAmIzQzOzE5MCwzNiBAQCBzdGF0aWMgYm9vbCBtZW1zbG90X2lzX2xvZ2dpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbiAgKi9cbiBpbnQga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbi1cdFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3RsYl9mbHVzaF92bWlkLCBrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSk7XG4tXHRlbHNlXG4tXHRcdGt2bV9jYWxsX2h5cChfX2t2bV90bGJfZmx1c2hfdm1pZCwgXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KTtcbi1cdHJldHVybiAwO1xuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xuIH1cbiBcbi1pbnQga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuLVx0XHRcdFx0ICAgICAgZ2ZuX3QgZ2ZuLCB1NjQgbnJfcGFnZXMpXG4mIzQzO3N0YXRpYyBpbnQgcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCBnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcbiB7XG4gXHR1NjQgc2l6ZSA9IG5yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFx0dTY0IGFkZHIgPSBnZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUpO1xuLVx0ZWxzZVxuLVx0XHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCBhZGRyLCBzaXplKTtcbiYjNDM7XHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCBhZGRyLCBzaXplKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHQgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGdmbiwgbnJfcGFnZXMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkICpzdGFnZTJfbWVtY2FjaGVfemFsbG9jX3BhZ2Uodm9pZCAqYXJnKVxuIHtcbiBcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqbWMgPSBhcmc7XG5AQCAtMzM3LDEzICYjNDM7MzYzLDIwIEBAIHN0YXRpYyB2b2lkIF9fdW5tYXBfc3RhZ2UyX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjRcbiBcdFx0XHRcdCAgIG1heV9ibG9jaykpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3ZtX3N0YWdlMl91bm1hcF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuJiM0MztcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdCAgICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaylcbiYjNDM7e1xuJiM0MztcdF9fdW5tYXBfc3RhZ2UyX3JhbmdlKG1tdSwgc3RhcnQsIHNpemUsIG1heV9ibG9jayk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LFxuIFx0XHRcdCAgICB1NjQgc2l6ZSwgYm9vbCBtYXlfYmxvY2spXG4ge1xuLVx0aWYgKGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtX3MyX21tdV90b19rdm0obW11KSkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fczJfbW11X3RvX2t2bShtbXUpO1xuIFxuLVx0X191bm1hcF9zdGFnZTJfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcbiYjNDM7XHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3N0YWdlMl91bm1hcF9yYW5nZSlcbiYjNDM7XHRcdGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9zdGFnZTJfdW5tYXBfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcbiB9XG4gXG4gdm9pZCBrdm1fc3RhZ2UyX2ZsdXNoX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZClcbkBAIC05NjMsNiAmIzQzOzk5NiwxOCBAQCBzdGF0aWMgdm9pZCBrdm1fc3RhZ2UyX2Rlc3Ryb3koc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QpXG4gXHRLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl9kZXN0cm95X3BnZCkocGd0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyAqYXJtNjRfdm1fczJfb3BzW1ZNX0ZMQVZPUl9NQVhdID0ge1xuJiM0MztcdFtWTV9WSEVdID0gXHUwMDI2a3ZtX2RlZmF1bHRfdm1fczJfb3BzLFxuJiM0MztcdFtWTV9OVkhFXSA9IFx1MDAyNmt2bV9kZWZhdWx0X3ZtX3MyX29wcyxcbiYjNDM7XHRbVk1fUEtWTV0gPSBcdTAwMjZ1bnByb3RlY3RlZF9wa3ZtX3MyX29wcyxcbiYjNDM7XHRbVk1fUFJPVEVDVEVEX1BLVk1dID0gXHUwMDI2cHJvdGVjdGVkX3Brdm1fczJfb3BzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3ZtX2luaXRfdm1fczJfb3BzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzID0gYXJtNjRfdm1fczJfb3BzW2t2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvcl07XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICoga3ZtX2luaXRfc3RhZ2UyX21tdSAtIEluaXRpYWxpc2UgYSBTMiBNTVUgc3RydWN0dXJlXG4gICogQGt2bTpcdFRoZSBwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0dXJlXG5AQCAtOTgzLDYgJiM0MzsxMDI4LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcbiBcdGludCBjcHUsIGVycjtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0O1xuIFxuJiM0MztcdC8qIEluaXRpYWxpemUgdGhlIFZNIG9wcyBmb3IgdGhlIFZNIGluc3RhbmNlIGZvciB0aGUgZmlyc3QgdGltZSAqL1xuJiM0MztcdGlmIChtbXUgPT0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KVxuJiM0MztcdFx0a3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7XG4gXHQvKlxuIFx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIG91ciBwYWdlIHRhYmxlcyBpbiBwbGFjZSwgYW5kIHRoYXQgdGhlXG4gXHQgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsXG5AQCAtMTcwNSw3ICYjNDM7MTc1Myw3IEBAIHN0cnVjdCBrdm1fczJfZmF1bHRfdm1hX2luZm8ge1xuIFx0Ym9vbFx0XHRtYXBfbm9uX2NhY2hlYWJsZTtcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGt2bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuJiM0MztzdGF0aWMgaW50IHByb3RlY3RlZF92bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIHtcbiBcdHVuc2lnbmVkIGludCBmbGFncyA9IEZPTExfSFdQT0lTT04gfCBGT0xMX0xPTkdURVJNIHwgRk9MTF9XUklURTtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHMyZmQtXHUwMDNldmNwdTtcbkBAIC0yMTQzLDYgJiM0MzsyMTkxLDIyIEBAIHN0YXRpYyBpbnQgdXNlcl9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0cmV0dXJuIGt2bV9zMl9mYXVsdF9tYXAoczJmZCwgXHUwMDI2czJ2aSwgcHJvdCwgbWVtY2FjaGUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gczJmZC1cdTAwM2V2Y3B1O1xuJiM0MztcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQha3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9zbG90X2hhc19nbWVtKHMyZmQtXHUwMDNlbWVtc2xvdCkpXG4mIzQzO1x0XHRyZXQgPSBnbWVtX2Fib3J0KHMyZmQpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IHVzZXJfbWVtX2Fib3J0KHMyZmQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyogUmVzb2x2ZSB0aGUgYWNjZXNzIGZhdWx0IGJ5IG1ha2luZyB0aGUgcGFnZSB5b3VuZyBhZ2Fpbi4gKi9cbiBzdGF0aWMgdm9pZCBoYW5kbGVfYWNjZXNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZmF1bHRfaXBhKVxuIHtcbkBAIC0yMjUwLDYgJiM0MzsyMzE0LDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV9zMl90cmFucyBuZXN0ZWRfdHJhbnMsICpuZXN0ZWQgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBlc3I7XG4gXHRwaHlzX2FkZHJfdCBmYXVsdF9pcGE7IC8qIFRoZSBhZGRyZXNzIHdlIGZhdWx0ZWQgb24gKi9cbiBcdHBoeXNfYWRkcl90IGlwYTsgLyogQWx3YXlzIHRoZSBJUEEgaW4gdGhlIEwxIGd1ZXN0IHBoeXMgc3BhY2UgKi9cbkBAIC0yNDExLDE5ICYjNDM7MjQ3Niw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0Lmh2YVx0XHQ9IGh2YSxcbiBcdH07XG4gXG4tXHRpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbi1cdFx0cmV0ID0gcGt2bV9tZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0IXdyaXRlX2ZhdWx0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdFx0IWt2bV92Y3B1X3RyYXBfaXNfZXhlY19mYXVsdCh2Y3B1KSk7XG4tXG4tXHRcdGlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSlcbi1cdFx0XHRyZXQgPSBnbWVtX2Fib3J0KFx1MDAyNnMyZmQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gdXNlcl9tZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4tXHR9XG4tXG4mIzQzO1x0cmV0ID0ga3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX21lbV9hYm9ydChcdTAwMjZzMmZkKTtcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0ID0gMTtcbiBvdXQ6XG5AQCAtMjQzNiwzOCAmIzQzOzI0ODksNDMgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxuJiM0MztcdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0X191bm1hcF9zdGFnZTJfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCByYW5nZS1cdTAwM2VzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbi1cdFx0XHQgICAgIChyYW5nZS1cdTAwM2VlbmQgLSByYW5nZS1cdTAwM2VzdGFydCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0ICAgICByYW5nZS1cdTAwM2VtYXlfYmxvY2spO1xuJiM0MztcdGt2bV9zdGFnZTJfdW5tYXBfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCByYW5nZS1cdTAwM2VzdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHQocmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuJiM0MztcdFx0XHRcdHJhbmdlLVx1MDAzZW1heV9ibG9jayk7XG4gXG4gXHRrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgcmFuZ2UtXHUwMDNlbWF5X2Jsb2NrKTtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tYm9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiYjNDM7c3RhdGljIGJvb2wga3ZtX3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4ge1xuIFx0dTY0IHNpemUgPSAocmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFxuLVx0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0IHx8IGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuIFx0cmV0dXJuIEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX3Rlc3RfY2xlYXJfeW91bmcpKGt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QsXG4gXHRcdFx0XHRcdFx0ICAgcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gXHRcdFx0XHRcdFx0ICAgc2l6ZSwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wga3ZtX2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwgIWt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9hZ2VfZ2ZuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2FnZV9nZm4oa3ZtLCByYW5nZSk7XG4gXHQvKlxuIFx0ICogVE9ETzogSGFuZGxlIG5lc3RlZF9tbXUgc3RydWN0dXJlcyBoZXJlIHVzaW5nIHRoZSByZXZlcnNlIG1hcHBpbmcgaW5cbiBcdCAqIGEgbGF0ZXIgdmVyc2lvbiBvZiBwYXRjaCBzZXJpZXMuXG4gXHQgKi9cbiB9XG4gXG4tYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuJiM0MztzdGF0aWMgYm9vbCBrdm1fdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIHtcbiBcdHU2NCBzaXplID0gKHJhbmdlLVx1MDAzZWVuZCAtIHJhbmdlLVx1MDAzZXN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRyZXR1cm4gS1ZNX1BHVF9GTihrdm1fcGd0YWJsZV9zdGFnZTJfdGVzdF9jbGVhcl95b3VuZykoa3ZtLVx1MDAzZWFyY2gubW11LnBndCxcbkBAIC0yNDc1LDYgJiM0MzsyNTMzLDE1IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRcdFx0XHQgICBzaXplLCBmYWxzZSk7XG4gfVxuIFxuJiM0Mztib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XG4mIzQzO1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0IHx8ICFrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fdGVzdF9hZ2VfZ2ZuKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3Rlc3RfYWdlX2dmbihrdm0sIHJhbmdlKTtcbiYjNDM7fVxuJiM0MztcbiBwaHlzX2FkZHJfdCBrdm1fbW11X2dldF9odHRicih2b2lkKVxuIHtcbiBcdHJldHVybiBfX3BhKGh5cF9wZ3RhYmxlLVx1MDAzZXBnZCk7XG5AQCAtMjc5NiwzICYjNDM7Mjg2MywzMyBAQCB2b2lkIGt2bV90b2dnbGVfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhc19lbmFibGVkKVxuIFxuIFx0dHJhY2Vfa3ZtX3RvZ2dsZV9jYWNoZSgqdmNwdV9wYyh2Y3B1KSwgd2FzX2VuYWJsZWQsIG5vd19lbmFibGVkKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcHJvdGVjdGVkX3ZtX3MyX29wcyA9IHtcbiYjNDM7XHQudm1fZmx1c2hfcmVtb3RlX3RsYnNcdFx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxuJiM0MztcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlLFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTm90IHN1cHBvcnRlZCBmb3IgUHJvdGVjdGVkIFZNcyB1bmRlciBwS1ZNXG4mIzQzO1x0ICogLnZtX2FnZV9nZm5cbiYjNDM7XHQgKiAudm1fdGVzdF9hZ2VfZ2ZuXG4mIzQzO1x0ICogLnZtX3N0YWdlMl91bm1hcF9yYW5nZVxuJiM0MztcdCAqL1xuJiM0MztcdC52bV9tZW1fYWJvcnRcdFx0XHQ9IHByb3RlY3RlZF92bV9tZW1fYWJvcnQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcGt2bV92bV9zMl9vcHMgPSB7XG4mIzQzO1x0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXHRcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxicyxcbiYjNDM7XHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcbiYjNDM7XHQudm1fYWdlX2dmblx0XHRcdD0ga3ZtX3ZtX2FnZV9nZm4sXG4mIzQzO1x0LnZtX3Rlc3RfYWdlX2dmblx0XHQ9IGt2bV92bV90ZXN0X2FnZV9nZm4sXG4mIzQzO1x0LnZtX3N0YWdlMl91bm1hcF9yYW5nZVx0XHQ9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsXG4mIzQzO1x0LnZtX21lbV9hYm9ydFx0XHRcdD0ga3ZtX3ZtX21lbV9hYm9ydCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBrdm1fZGVmYXVsdF92bV9zMl9vcHMgPSB7XG4mIzQzO1x0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXHRcdD0ga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxuJiM0MztcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsXG4mIzQzO1x0LnZtX2FnZV9nZm5cdFx0XHQ9IGt2bV92bV9hZ2VfZ2ZuLFxuJiM0MztcdC52bV90ZXN0X2FnZV9nZm5cdFx0PSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLFxuJiM0MztcdC52bV9zdGFnZTJfdW5tYXBfcmFuZ2VcdFx0PSBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlLFxuJiM0MztcdC52bV9tZW1fYWJvcnRcdFx0XHQ9IGt2bV92bV9tZW1fYWJvcnQsXG4mIzQzO307XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcGt2bS5jIGIvYXJjaC9hcm02NC9rdm0vcGt2bS5jXG5pbmRleCA4ZTRjNmU0YmVjMTIzLi4zOTQ4ZmE0NmY0ZDc1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcGt2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9wa3ZtLmNcbkBAIC0yNDAsNyAmIzQzOzI0MCw2IEBAIGludCBwa3ZtX2luaXRfaG9zdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlID0gcmV0O1xuLVx0a3ZtLVx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7XG4gXHRpZiAocHJvdGVjdGVkKSB7XG4gXHRcdHByX3dhcm5fb25jZShcJiMzNDtrdm06IHByb3RlY3RlZCBWTXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgZm9yIGRldmVsb3BtZW50IG9ubHksIHRhaW50aW5nIGtlcm5lbFxcblwmIzM0Oyk7XG4gXHRcdGFkZF90YWludChUQUlOVF9VU0VSLCBMT0NLREVQX1NUSUxMX09LKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG5pbmRleCA0Y2VhYmFhNGMzMGJkLi40MWZiZmQ5MmNkMjkyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG5AQCAtNjcsOSAmIzQzOzY3LDkgQEAgZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGJhc2U7XG4gfVxuIFxuLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4mIzQzO2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRyZXR1cm4gISFzY2hlZF9pbmZvX29uKCk7XG4mIzQzO1x0cmV0dXJuICEhc2NoZWRfaW5mb19vbigpIFx1MDAyNlx1MDAyNiAoIWt2bSB8fCAha3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKTtcbiB9XG4gXG4gaW50IGt2bV9hcm1fcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbkBAIC04MSw3ICYjNDM7ODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aW50IHJldCA9IDA7XG4gXHRpbnQgaWR4O1xuIFxuLVx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSB8fFxuJiM0MztcdGlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSkgfHxcbiBcdCAgICBhdHRyLVx1MDAzZWF0dHIgIT0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEpXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXG5AQCAtMTEwLDcgJiM0MzsxMTAsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0dTY0IF9fdXNlciAqdXNlciA9ICh1NjQgX191c2VyICopYXR0ci1cdTAwM2VhZGRyO1xuIFx0dTY0IGlwYTtcbiBcbi1cdGlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkgfHxcbiYjNDM7XHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVx1MDAzZWt2bSkgfHxcbiBcdCAgICBhdHRyLVx1MDAzZWF0dHIgIT0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEpXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXG5AQCAtMTI2LDcgJiM0MzsxMjYsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfaGFzX2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIHtcbiBcdHN3aXRjaCAoYXR0ci1cdTAwM2VhdHRyKSB7XG4gXHRjYXNlIEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBOlxuLVx0XHRpZiAoa3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkpXG4mIzQzO1x0XHRpZiAoa3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAtRU5YSU87XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcm1pLmMgYi9hcmNoL2FybTY0L2t2bS9ybWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVlY2M4YjM0OTg2OThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS92aXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3ZvaWQga3ZtX2luaXRfcm1pKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoa3ZtX2dldF9tb2RlKCkgIT0gS1ZNX01PREVfUk1NKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBDaGVjayBpZiB0aGUgUk1JIGlzIGF2YWlsYWJsZSAqL1xuJiM0MztcbiYjNDM7XHQvKiBGdXR1cmUgcGF0Y2ggd2lsbCBlbmFibGUgc3RhdGljIGJyYW5jaCBrdm1fcm1pX2lzX2F2YWlsYWJsZSAqL1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1OGMxZmMxM2VhMTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5AQCAtNTYzOCwxOCAmIzQzOzU2MzgsMTggQEAgaW50IGt2bV9hcm1fc3lzX3JlZ19zZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWdcbiBcdFx0XHRcdCAgICBzeXNfcmVnX2Rlc2NzLCBBUlJBWV9TSVpFKHN5c19yZWdfZGVzY3MpKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyh2b2lkKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIENTU0VMUl9NQVg7XG4mIzQzO1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IENTU0VMUl9NQVg7XG4gfVxuIFxuLXN0YXRpYyBpbnQgd3JpdGVfZGVtdXhfcmVnaWRzKHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuJiM0MztzdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuIHtcbiBcdHU2NCB2YWwgPSBLVk1fUkVHX0FSTTY0IHwgS1ZNX1JFR19TSVpFX1UzMiB8IEtWTV9SRUdfQVJNX0RFTVVYO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHR2YWwgfD0gS1ZNX1JFR19BUk1fREVNVVhfSURfQ0NTSURSO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1NTRUxSX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZGVtdXhfcmVncyh2Y3B1KTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHB1dF91c2VyKHZhbCB8IGksIHVpbmRpY2VzKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0dWluZGljZXMmIzQzOyYjNDM7O1xuQEAgLTU2OTMsMTEgJiM0Mzs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9zeXNfcmVnX2hpZGRlbl91c2VyKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjNDM7XHRcdFx0XHRcdFx0IHU2NCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHJlZykge1xuJiM0MztcdGNhc2UgU1lTX0lEX0FBNjRERlIwX0VMMTpcbiYjNDM7XHRjYXNlIFNZU19QTUNSX0VMMDpcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB3YWxrX29uZV9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsXG4gXHRcdFx0ICAgIHU2NCBfX3VzZXIgKip1aW5kLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgKnRvdGFsKVxuIHtcbiYjNDM7XHRpZiAodmNwdV9pc19yZWModmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGt2bV9yZWFsbV9zeXNfcmVnX2hpZGRlbl91c2VyKHZjcHUsIHJlZ190b19lbmNvZGluZyhyZCkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElnbm9yZSByZWdpc3RlcnMgd2UgdHJhcCBidXQgZG9uJiMzOTt0IHNhdmUsXG4gXHQgKiBhbmQgZm9yIHdoaWNoIG5vIGN1c3RvbSB1c2VyIGFjY2Vzc29yIGlzIHByb3ZpZGVkLlxuQEAgLTU3MzUsNyAmIzQzOzU3NTAsNyBAQCBzdGF0aWMgaW50IHdhbGtfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kKVxuIFxuIHVuc2lnbmVkIGxvbmcga3ZtX2FybV9udW1fc3lzX3JlZ19kZXNjcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIG51bV9kZW11eF9yZWdzKClcbiYjNDM7XHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSlcbiBcdFx0JiM0Mzsgd2Fsa19zeXNfcmVncyh2Y3B1LCAodTY0IF9fdXNlciAqKU5VTEwpO1xuIH1cbiBcbkBAIC01NzQ4LDcgJiM0Mzs1NzYzLDcgQEAgaW50IGt2bV9hcm1fY29weV9zeXNfcmVnX2luZGljZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kaWNlcylcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHVpbmRpY2VzICYjNDM7PSBlcnI7XG4gXG4tXHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHVpbmRpY2VzKTtcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHZjcHUsIHVpbmRpY2VzKTtcbiB9XG4gXG4gI2RlZmluZSBLVk1fQVJNX0ZFQVRVUkVfSURfUkFOR0VfSU5ERVgocilcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmggYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXG5pbmRleCBmODZhMDA2ZDY3MTM2Li4wNmMyMDYxMmU5ZTdkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaFxuQEAgLTEwLDYgJiM0MzsxMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHNjaS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4mIzQzO1xuICNkZWZpbmUgS1ZNX0FSTV9QU0NJXzBfMVx0UFNDSV9WRVJTSU9OKDAsIDEpXG4gI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yXHRQU0NJX1ZFUlNJT04oMCwgMilcbiAjZGVmaW5lIEtWTV9BUk1fUFNDSV8xXzBcdFBTQ0lfVkVSU0lPTigxLCAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBBUk02NCBLVk0gYW5kIEFybSBDb25maWRlbnRpYWwgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSAvIFJlYWxtIE1hbmFnZW1lbnQgRXh0ZW5zaW9uKSBjb2RlIGV4Y2x1c2l2ZWx5LCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbGwgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZXhjbHVzaXZlIHRvIGFybTY0IGFuZCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZjk1ZGU5NTRkNDEzZGY2MWY4MzgyNzU4OWRlMGIyZGNkNWVhZGY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAyMDoxMjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNjg2NDdmZjRiZGQyNC4uMWFmZTNkZjNiOTIzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTMyNTYsNiAmIzQzOzMyNTYsOSBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJbmVzdGVkOiBWSEUtYmFzZWQgbW9kZSB3aXRoIHN1cHBvcnQgZm9yIG5lc3RlZAogCQkJCXZpcnR1YWxpemF0aW9uLiBSZXF1aXJlcyBhdCBsZWFzdCBBUk12OC40CiAJCQkJaGFyZHdhcmUgKHdpdGggRkVBVF9OVjIpLgomIzQzOwkJCXJtbTogU3VwcG9ydCBmb3IgcnVubmluZyBjb25maWRlbnRpYWwgZ3Vlc3RzIGluIFJlYWxtCiYjNDM7CQkJICAgICB3b3JsZCB1c2luZyBSTU0sIGFzIGRlZmluZWQgYnkgQXJtIENvbmZpZGVudGlhbAomIzQzOwkJCSAgICAgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSkKIAogCQkJRGVmYXVsdHMgdG8gVkhFL25WSEUgYmFzZWQgb24gaGFyZHdhcmUgc3VwcG9ydC4gU2V0dGluZwogCQkJbW9kZSB0byAmIzM0O3Byb3RlY3RlZCYjMzQ7IHdpbGwgZGlzYWJsZSBrZXhlYyBhbmQgaGliZXJuYXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCBhM2MxOTI4YmRmNzQzLi5kMzYwYThiMDViOGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC03OTMsNCAmIzQzOzc5MywyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3Jlc2V0X3ZjcHVfcHNjaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJdmNwdV9zZXRfcmVnKHZjcHUsIDAsIHJlc2V0X3N0YXRlLSZndDtyMCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGVudW0gcmVhbG1fc3RhdGUga3ZtX3JlYWxtX3N0YXRlKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoa3ZtLSZndDthcmNoLnJlYWxtLnN0YXRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9zZXRfcmVhbG1fc3RhdGUoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkgICAgICAgZW51bSByZWFsbV9zdGF0ZSBuZXdfc3RhdGUpCiYjNDM7ewomIzQzOwlXUklURV9PTkNFKGt2bS0mZ3Q7YXJjaC5yZWFsbS5zdGF0ZSwgbmV3X3N0YXRlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9pc19jcmVhdGVkKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiBrdm1fdm1faXNfcmVhbG0oa3ZtKSAmYW1wOyZhbXA7IGt2bV9yZWFsbV9zdGF0ZShrdm0pICE9IFJFQUxNX1NUQVRFX05PTkU7CiYjNDM7fQomIzQzOwogI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMjdmZTBjZDViMmQ3YS4uZmJmZDg1ZGM5OTllZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICNpbmNsdWRlICZsdDthc20vZnBzaW1kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fYXNtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcm1pLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3ZuY3JfbWFwcGluZy5oJmd0OwogCiAjZGVmaW5lIF9fS1ZNX0hBVkVfQVJDSF9JTlRDX0lOSVRJQUxJWkVECkBAIC02OSw2ICYjNDM7NzAsNyBAQCBlbnVtIGt2bV9tb2RlIHsKIAlLVk1fTU9ERV9ERUZBVUxULAogCUtWTV9NT0RFX1BST1RFQ1RFRCwKIAlLVk1fTU9ERV9OViwKJiM0MzsJS1ZNX01PREVfUk1NLAogCUtWTV9NT0RFX05PTkUsCiB9OwogI2lmZGVmIENPTkZJR19LVk0KQEAgLTE1MCw2ICYjNDM7MTUyLDI2IEBAIHN0cnVjdCBrdm1fdm1pZCB7CiAJYXRvbWljNjRfdCBpZDsKIH07CiAKJiM0MztzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHsKJiM0MzsJdm9pZCAoKnZjcHVfbG9hZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKJiM0MzsJdm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGt2bV9nZm5fcmFuZ2U7CiYjNDM7c3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjOwomIzQzOwomIzQzO3N0cnVjdCBrdm1fdm1fczJfb3BzIHsKJiM0MzsJYm9vbCAoKnZtX2FnZV9nZm4pKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKTsKJiM0MzsJYm9vbCAoKnZtX3Rlc3RfYWdlX2dmbikoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpOwomIzQzOwlpbnQgKCp2bV9mbHVzaF9yZW1vdGVfdGxicykoc3RydWN0IGt2bSAqa3ZtKTsKJiM0MzsJaW50ICgqdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAomIzQzOwkJCQkJICB1NjQgbnJfcGFnZXMpOwomIzQzOwl2b2lkICgqdm1fc3RhZ2UyX3VubWFwX3JhbmdlKShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LAomIzQzOwkJCQkgICAgICBwaHlzX2FkZHJfdCBzdGFydCwgdTY0IHNpemUsCiYjNDM7CQkJCSAgICAgIGJvb2wgbWF5X2Jsb2NrKTsKJiM0MzsJaW50ICgqdm1fbWVtX2Fib3J0KShjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpOwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qga3ZtX3MyX21tdSB7CiAJc3RydWN0IGt2bV92bWlkIHZtaWQ7CiAKQEAgLTI1Nyw3ICYjNDM7Mjc5LDYgQEAgc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gewogCXBrdm1faGFuZGxlX3QgaGFuZGxlOwogCXN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHRlYXJkb3duX21jOwogCXN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHN0YWdlMl90ZWFyZG93bl9tYzsKLQlib29sIGlzX3Byb3RlY3RlZDsKIAlib29sIGlzX2NyZWF0ZWQ7CiAKIAkvKgpAQCAtMzA2LDkgJiM0MzszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQgewogCV9fTlJfRkdUX0dST1VQX0lEU19fCiB9OwogCiYjNDM7ZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB7CiYjNDM7CVZNX05WSEUsCiYjNDM7CVZNX1ZIRSwKJiM0MzsJVk1fUEtWTSwJCS8qIE5vcm1hbCBndWVzdHMgb24gUEtWTSAqLwomIzQzOwlNQVJLRVIoX19WTV9DT05GSURFTlRJQUwpLAomIzQzOwlWTV9QUk9URUNURURfUEtWTSwJLyogUHJvdGVjdGVkIFZNICovCiYjNDM7CVZNX1JFQUxNLAkJLyogQ0NBICovCiYjNDM7CVZNX0ZMQVZPUl9NQVgsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBrdm1fYXJjaCB7CiAJc3RydWN0IGt2bV9zMl9tbXUgbW11OwogCiYjNDM7CWVudW0ga3ZtX2FybV92bV9mbGF2b3Igdm1fZmxhdm9yOwogCS8qCiAJICogRmluZS1HcmFpbmVkIFVOREVGLCBtaW1pY2tpbmcgdGhlIEZHVCBsYXlvdXQgZGVmaW5lZCBieSB0aGUKIAkgKiBhcmNoaXRlY3R1cmUuIFdlIHRyYWNrIHRoZW0gZ2xvYmFsbHksIGFzIHdlIHByZXNlbnQgdGhlCkBAIC0zMTgsNiAmIzQzOzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJICovCiAJdTY0IGZndVtfX05SX0ZHVF9HUk9VUF9JRFNfX107CiAKJiM0MzsJY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgKnZtX3MyX29wczsKJiM0MzsKIAkvKgogCSAqIFN0YWdlIDIgcGFnaW5nIHN0YXRlIGZvciBWTXMgd2l0aCBuZXN0ZWQgUzIgdXNpbmcgYSB2aXJ0dWFsCiAJICogVk1JRC4KQEAgLTQxNywxMSAmIzQzOzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCS8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgVExCcyAqLwogCWF0b21pY190IHZuY3JfdGxiX2NvdW50OwogCi0JLyoKLQkgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICYjMzk7cGt2bS5oYW5kbGUmIzM5OyBpcyB1c2VkIHRvIGxvb2t1cAotCSAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuCi0JICovCi0Jc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTsKJiM0MzsJdW5pb24gewomIzQzOwkJLyoKJiM0MzsJCSAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJiMzOTtwa3ZtLmhhbmRsZSYjMzk7IGlzIHVzZWQgdG8gbG9va3VwCiYjNDM7CQkgKiB0aGUgYXNzb2NpYXRlZCBwS1ZNIGluc3RhbmNlIGluIHRoZSBoeXBlcnZpc29yLgomIzQzOwkJICovCiYjNDM7CQlzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSBwa3ZtOwomIzQzOwkJc3RydWN0IHJlYWxtIHJlYWxtOwomIzQzOwl9OwogCiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUwogCS8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovCkBAIC04NDYsNiAmIzQzOzg4Myw3IEBAIHN0cnVjdCB2bmNyX3RsYjsKIAogc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCXN0cnVjdCBrdm1fY3B1X2NvbnRleHQgY3R4dDsKJiM0MzsJY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqdmNwdV9vcHM7CiAKIAkvKgogCSAqIEd1ZXN0IGZsb2F0aW5nIHBvaW50IHN0YXRlCkBAIC0xMzQ2LDcgJiM0MzsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fdXBkYXRlX3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpOwomIzQzO2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpOwogaW50IGt2bV9hcm1fcHZ0aW1lX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTE1MDQsOSAmIzQzOzE1NDIsMTMgQEAgc3RydWN0IGt2bSAqa3ZtX2FyY2hfYWxsb2Nfdm0odm9pZCk7CiAKICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX0ZMVVNIX1JFTU9URV9UTEJTX1JBTkdFCiAKLSNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pCShpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSAmYW1wOyZhbXA7IChrdm0pLSZndDthcmNoLnBrdm0uaXNfcHJvdGVjdGVkKQomIzQzOyNkZWZpbmUga3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pCSgoa3ZtKS0mZ3Q7YXJjaC52bV9mbGF2b3IgJmd0Oz0gX19WTV9DT05GSURFTlRJQUwpCiYjNDM7I2RlZmluZSBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkJKChrdm0pLSZndDthcmNoLnZtX2ZsYXZvciA9PSBWTV9QUk9URUNURURfUEtWTSkKJiM0MzsjZGVmaW5lIGt2bV92bV9pc19yZWFsbShrdm0pCQkoKGt2bSktJmd0O2FyY2gudm1fZmxhdm9yID09IFZNX1JFQUxNKQogCiYjNDM7I2RlZmluZSB2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KQlrdm1fdm1faXNfY29uZmlkZW50aWFsKCh2Y3B1KS0mZ3Q7a3ZtKQogI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KQkJa3ZtX3ZtX2lzX3Byb3RlY3RlZCgodmNwdSktJmd0O2t2bSkKJiM0MzsjZGVmaW5lIHZjcHVfaXNfcmVjKHZjcHUpCQlrdm1fdm1faXNfcmVhbG0oKHZjcHUpLSZndDtrdm0pCiAKIGludCBrdm1fYXJtX3ZjcHVfZmluYWxpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZmVhdHVyZSk7CiBib29sIGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaAppbmRleCA0MWE4Njg3OTM4ZWI2Li5jMmU0YjI5ZTYwNWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oCkBAIC04LDkgJiM0Mzs4LDEzIEBACiAjZGVmaW5lIF9fQVJNNjRfS1ZNX1BHVEFCTEVfSF9fCiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3ZtX3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JidHJlZV90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKJiM0MztzdHJ1Y3Qga3ZtX3MyX21tdTsKJiM0MzsKICNkZWZpbmUgS1ZNX1BHVEFCTEVfRklSU1RfTEVWRUwJCS0xCiAjZGVmaW5lIEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwJCTMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oCmluZGV4IGJlZWEwMGU2OTNhMGEuLjU0YTYxOGQ4ODdmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3Brdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmgKQEAgLTcsOSAmIzQzOzcsOSBAQAogI2RlZmluZSBfX0FSTTY0X0tWTV9QS1ZNX0hfXwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYXJtX2ZmYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NhdHRlcmxpc3QuaCZndDsKLSNpbmNsdWRlICZsdDthc20va3ZtX2hvc3QuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKIAogLyogTWF4aW11bSBudW1iZXIgb2YgVk1zIHRoYXQgY2FuIGNvLWV4aXN0IHVuZGVyIHBLVk0uICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3JtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0ZjVjNzVhMjdiNWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaApAQCAtMCwwICYjNDM7MSw2MSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19BU01fS1ZNX1JNSV9ICiYjNDM7I2RlZmluZSBfX0FTTV9LVk1fUk1JX0gKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHJlYWxtX3N0YXRlIC0gU3RhdGUgb2YgYSBSZWFsbQomIzQzOyAqCiYjNDM7ICogTWlycm9ycyB0aGUgUk1NJiMzOTtzIFJlYWxtIGxpZmVjeWNsZSBzdGF0ZXMgd2hlcmUgdGhleSBhcmUgbWVhbmluZ2Z1bCB0byBLVk0sCiYjNDM7ICogd2l0aCBSRUFMTV9TVEFURV9EWUlORyBiZWluZyBhIEtWTS1pbnRlcm5hbCBzdGF0ZSB1c2VkIHRvIHByZXZlbnQgZnVydGhlcgomIzQzOyAqIHJlcXVlc3RzIHdoaWxlIHRlYXJkb3duIGlzIGluIHByb2dyZXNzLiBLVk0gZG9lcyBub3QgdHJhY2sgUkVBTE1fU1lTVEVNX09GRgomIzQzOyAqIG9yIFJFQUxNX1pPTUJJRSBzZXBhcmF0ZWx5IGFzIHRoZXkgbmF0dXJhbGx5IGxlYWQgdG8gdGVhcmRvd24uCiYjNDM7ICovCiYjNDM7ZW51bSByZWFsbV9zdGF0ZSB7CiYjNDM7CS8qKgomIzQzOwkgKiBAUkVBTE1fU1RBVEVfTk9ORToKJiM0MzsJICogICAgICBSZWFsbSBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQuIHJtaV9yZWFsbV9jcmVhdGUoKSBoYXMgbm90CiYjNDM7CSAqICAgICAgeWV0IGJlZW4gY2FsbGVkLgomIzQzOwkgKi8KJiM0MzsJUkVBTE1fU1RBVEVfTk9ORSwKJiM0MzsJLyoqCiYjNDM7CSAqIEBSRUFMTV9TVEFURV9ORVc6CiYjNDM7CSAqICAgICAgUmVhbG0gaXMgdW5kZXIgY29uc3RydWN0aW9uLCBybWlfcmVhbG1fY3JlYXRlKCkgaGFzIGJlZW4KJiM0MzsJICogICAgICBjYWxsZWQsIGJ1dCBpdCBpcyBub3QgeWV0IGFjdGl2YXRlZC4gUGFnZXMgbWF5IGJlIHBvcHVsYXRlZC4KJiM0MzsJICovCiYjNDM7CVJFQUxNX1NUQVRFX05FVywKJiM0MzsJLyoqCiYjNDM7CSAqIEBSRUFMTV9TVEFURV9BQ1RJVkU6CiYjNDM7CSAqICAgICAgUmVhbG0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgaXMgZWxpZ2libGUgZm9yIGV4ZWN1dGlvbiB3aXRoCiYjNDM7CSAqICAgICAgcm1pX3JlY19lbnRlcigpLiBQYWdlcyBtYXkgbm8gbG9uZ2VyIGJlIHBvcHVsYXRlZCB3aXRoCiYjNDM7CSAqICAgICAgcm1pX2RhdGFfY3JlYXRlKCkuCiYjNDM7CSAqLwomIzQzOwlSRUFMTV9TVEFURV9BQ1RJVkUsCiYjNDM7CS8qKgomIzQzOwkgKiBAUkVBTE1fU1RBVEVfRFlJTkc6CiYjNDM7CSAqICAgICAgUmVhbG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkIG9yIGhhcyBhbHJlYWR5IGJlZW4KJiM0MzsJICogICAgICBkZXN0cm95ZWQuCiYjNDM7CSAqLwomIzQzOwlSRUFMTV9TVEFURV9EWUlORywKJiM0MzsJLyoqCiYjNDM7CSAqIEBSRUFMTV9TVEFURV9ERUFEOgomIzQzOwkgKiAgICAgIFJlYWxtIGhhcyBiZWVuIGRlc3Ryb3llZC4KJiM0MzsJICovCiYjNDM7CVJFQUxNX1NUQVRFX0RFQUQKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByZWFsbSAtIEFkZGl0aW9uYWwgcGVyIFZNIGRhdGEgZm9yIGEgUmVhbG0KJiM0MzsgKgomIzQzOyAqIEBzdGF0ZTogVGhlIGxpZmV0aW1lIHN0YXRlIG1hY2hpbmUgZm9yIHRoZSByZWFsbQomIzQzOyAqLwomIzQzO3N0cnVjdCByZWFsbSB7CiYjNDM7CWVudW0gcmVhbG1fc3RhdGUgc3RhdGU7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIGt2bV9pbml0X3JtaSh2b2lkKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19BU01fS1ZNX1JNSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZpcnQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oCmluZGV4IGI1NDY3MDNjM2FiOWEuLjkyY2VjNDI5NTJmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oCkBAIC04Nyw2ICYjNDM7ODcsNyBAQCB2b2lkIF9faHlwX3Jlc2V0X3ZlY3RvcnModm9pZCk7CiBib29sIGlzX2t2bV9hcm1faW5pdGlhbGlzZWQodm9pZCk7CiAKIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcHJvdGVjdGVkX21vZGVfaW5pdGlhbGl6ZWQpOwomIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wa3ZtX2luaXRpYWxpemVkKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCmluZGV4IDU5NjEyZDJmMjc3YzEuLmVkM2NmMzBlYjA2ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBDRkxBR1NfaGFuZGxlX2V4aXQubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0CiBrdm0teSAmIzQzOz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXAogCSBpbmplY3RfZmF1bHQubyB2YV9sYXlvdXQubyBoYW5kbGVfZXhpdC5vIGNvbmZpZy5vIFwKIAkgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXAotCSB2Z2ljLXN5cy1yZWctdjMubyBmcHNpbWQubyBwa3ZtLm8gXAomIzQzOwkgdmdpYy1zeXMtcmVnLXYzLm8gZnBzaW1kLm8gcGt2bS5vIHJtaS5vIFwKIAkgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFwKIAkgdmdpYy92Z2ljLm8gdmdpYy92Z2ljLWluaXQubyBcCiAJIHZnaWMvdmdpYy1pcnFmZC5vIHZnaWMvdmdpYy12Mi5vIFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYwppbmRleCA2YWMzMzIxZjRjNTc1Li4zZWRkZjQ0ZjdiMWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9hcmNoX3RpbWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jCkBAIC01NiwxMSAmIzQzOzU2LDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3Modm9pZCkKIAlyZXR1cm4ga3ZtX3ZnaWNfZ2xvYmFsX3N0YXRlLm5vX2h3X2RlYWN0aXZhdGlvbiA/IFZHSUNfSVJRX1NXX1JFU0FNUExFIDogMDsKIH0KIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9yZWFsbV90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBSTUlfUkVDX0VOVEVSIHJlamVjdHMgTFJzIHdpdGggdGhlIEhXIGJpdCBzZXQsIHNvIHVzZSB0aGUgZXhpc3RpbmcKJiM0MzsJICogc29mdHdhcmUgcmVzYW1wbGluZyBtZWNoYW5pc20gZm9yIFJlYWxtIHRpbWVyIGludGVycnVwdHMuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gVkdJQ19JUlFfU1dfUkVTQU1QTEU7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wcyA9IHsKIAkuZ2V0X2ZsYWdzCSA9IGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3MsCiAJLmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9vcHMgcmVhbG1fdGltZXJfaXJxX29wcyA9IHsKJiM0MzsJLmdldF9mbGFncwkgPSBrdm1fcmVhbG1fdGltZXJfZ2V0X2lycV9mbGFncywKJiM0MzsJLmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0gewogCS5nZXRfaW5wdXRfbGV2ZWwgPSBrdm1fYXJjaF90aW1lcl9nZXRfaW5wdXRfbGV2ZWwsCiAJLnF1ZXVlX2lycV91bmxvY2sgPSB2Z2ljX3Y1X3BwaV9xdWV1ZV9pcnFfdW5sb2NrLApAQCAtMTA3OSw3ICYjNDM7MTA5Myw3IEBAIHN0YXRpYyB2b2lkIHRpbWVyX2NvbnRleHRfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0aW1lcmlkKQogCiAJY3R4dC0mZ3Q7dGltZXJfaWQgPSB0aW1lcmlkOwogCi0JaWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtJmd0O2t2bSkpIHsKJiM0MzsJaWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSkgewogCQlpZiAodGltZXJpZCA9PSBUSU1FUl9WVElNRVIpCiAJCQljdHh0LSZndDtvZmZzZXQudm1fb2Zmc2V0ID0gJmFtcDtrdm0tJmd0O2FyY2gudGltZXJfZGF0YS52b2Zmc2V0OwogCQllbHNlCkBAIC0xMTEwLDcgJiM0MzsxMTI0LDcgQEAgdm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdGltZXJfY29udGV4dF9pbml0KHZjcHUsIGkpOwogCiAJLyogU3luY2hyb25pemUgb2Zmc2V0cyBhY3Jvc3MgdGltZXJzIG9mIGEgVk0gaWYgbm90IGFscmVhZHkgcHJvdmlkZWQgKi8KLQlpZiAoIXZjcHVfaXNfcHJvdGVjdGVkKHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJaWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSAmYW1wOyZhbXA7CiAJICAgICF0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZNX0NPVU5URVJfT0ZGU0VULCAmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5mbGFncykpIHsKIAkJdGltZXJfc2V0X29mZnNldCh2Y3B1X3Z0aW1lcih2Y3B1KSwga3ZtX3BoeXNfdGltZXJfcmVhZCgpKTsKIAkJdGltZXJfc2V0X29mZnNldCh2Y3B1X3B0aW1lcih2Y3B1KSwgMCk7CkBAIC0xNjA5LDggJiM0MzsxNjIzLDEyIEBAIGludCBrdm1fdGltZXJfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCWdldF90aW1lcl9tYXAodmNwdSwgJmFtcDttYXApOwogCi0Jb3BzID0gdmdpY19pc192NSh2Y3B1LSZndDtrdm0pID8gJmFtcDthcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NSA6Ci0JCQkJICAgICAgJmFtcDthcmNoX3RpbWVyX2lycV9vcHM7CiYjNDM7CWlmICh2Y3B1X2lzX3JlYyh2Y3B1KSkKJiM0MzsJCW9wcyA9ICZhbXA7cmVhbG1fdGltZXJfaXJxX29wczsKJiM0MzsJZWxzZSBpZiAodmdpY19pc192NSh2Y3B1LSZndDtrdm0pKQomIzQzOwkJb3BzID0gJmFtcDthcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NTsKJiM0MzsJZWxzZQomIzQzOwkJb3BzID0gJmFtcDthcmNoX3RpbWVyX2lycV9vcHM7CiAKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IG5yX3RpbWVycyh2Y3B1KTsgaSYjNDM7JiM0MzspCiAJCWt2bV92Z2ljX3NldF9pcnFfb3BzKHZjcHUsIHRpbWVyX2lycSh2Y3B1X2dldF90aW1lcih2Y3B1LCBpKSksIG9wcyk7CkBAIC0xNzM2LDcgJiM0MzsxNzU0LDcgQEAgaW50IGt2bV92bV9pb2N0bF9zZXRfY291bnRlcl9vZmZzZXQoc3RydWN0IGt2bSAqa3ZtLAogCWlmIChvZmZzZXQtJmd0O3Jlc2VydmVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpCiYjNDM7CWlmIChrdm1fdm1faXNfY29uZmlkZW50aWFsKGt2bSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmYW1wO2t2bS0mZ3Q7bG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCmluZGV4IDhiMDgwODA0YmM5MGIuLjNmZTVhNGY3NzczOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCkBAIC00Miw2ICYjNDM7NDIsNyBAQAogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbmVzdGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9wa3ZtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9wdHJhdXRoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fcm1pLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NlY3Rpb25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3N0YWNrdHJhY2UvbnZoZS5oJmd0OwogCkBAIC03NCw2ICYjNDM7NzUsOCBAQCBzdHJ1Y3Qga3ZtX2lvY3RsX2NhcF9tYXAgewogCWxvbmcgZXh0OwogfTsKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tWTV9GTEFWT1JfTUFYXTsKJiM0MzsKIC8qIE1ha2UgS1ZNX0NBUF9OUl9WQ1BVUyB0aGUgcmVmZXJlbmNlIGZvciBmZWF0dXJlcyB3ZSBhbHdheXMgc3VwcG9ydGVkICovCiAjZGVmaW5lIEtWTV9DQVBfQVJNX0JBU0lDCUtWTV9DQVBfTlJfVkNQVVMKIApAQCAtMTExLDYgJiM0MzsxMTQsOCBAQCBsb25nIGt2bV9nZXRfY2FwX2Zvcl9rdm1faW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCBsb25nICpleHQpCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKJiM0MztERUZJTkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7CiYjNDM7CiBERUNMQVJFX0tWTV9IWVBfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1faHlwX3ZlY3Rvcik7CiAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGt2bV9hcm1faHlwX3N0YWNrX2Jhc2UpOwpAQCAtMTMyLDYgJiM0MzsxMzcsMjUgQEAgaW50IGt2bV9hcmNoX3ZjcHVfc2hvdWxkX2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUodmNwdSkgPT0gSU5fR1VFU1RfTU9ERTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGt2bV9yZWFsbV9leHRfYWxsb3dlZChsb25nIGV4dCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZXh0KSB7CiYjNDM7CWNhc2UgS1ZNX0NBUF9JUlFDSElQOgomIzQzOwljYXNlIEtWTV9DQVBfQVJNX1BTQ0k6CiYjNDM7CWNhc2UgS1ZNX0NBUF9BUk1fUFNDSV8wXzI6CiYjNDM7CWNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzoKJiM0MzsJY2FzZSBLVk1fQ0FQX01BWF9WQ1BVUzoKJiM0MzsJY2FzZSBLVk1fQ0FQX01BWF9WQ1BVX0lEOgomIzQzOwljYXNlIEtWTV9DQVBfTVNJX0RFVklEOgomIzQzOwljYXNlIEtWTV9DQVBfQVJNX1ZNX0lQQV9TSVpFOgomIzQzOwljYXNlIEtWTV9DQVBfQVJNX1BUUkFVVEhfQUREUkVTUzoKJiM0MzsJY2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0dFTkVSSUM6CiYjNDM7CWNhc2UgS1ZNX0NBUF9TWU5DX01NVToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCQkJICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKQogewpAQCAtMTQzLDYgJiM0MzsxNjcsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLAogCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSAmYW1wOyZhbXA7ICFrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIGNhcC0mZ3Q7Y2FwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGt2bSAmYW1wOyZhbXA7IGt2bV92bV9pc19yZWFsbShrdm0pICZhbXA7JmFtcDsgIWt2bV9yZWFsbV9leHRfYWxsb3dlZChjYXAtJmd0O2NhcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlzd2l0Y2ggKGNhcC0mZ3Q7Y2FwKSB7CiAJY2FzZSBLVk1fQ0FQX0FSTV9OSVNWX1RPX1VTRVI6CiAJCXIgPSAwOwpAQCAtMjE0LDYgJiM0MzsyNDEsMjYgQEAgc3RhdGljIGludCBrdm1fYXJtX2RlZmF1bHRfbWF4X3ZjcHVzKHZvaWQpCiAJcmV0dXJuIHZnaWNfcHJlc2VudCA/IGt2bV92Z2ljX2dldF9tYXhfdmNwdXMoKSA6IEtWTV9NQVhfVkNQVVM7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bV9pbml0X3ZtX2ZsYXZvcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSkKJiM0Mzt7CiYjNDM7CWJvb2wgcHJvdGVjdGVkID0gdHlwZSAmYW1wOyBLVk1fVk1fVFlQRV9BUk1fUFJPVEVDVEVEOwomIzQzOwomIzQzOwlpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHsKJiM0MzsJCWlmIChwcm90ZWN0ZWQpCiYjNDM7CQkJa3ZtLSZndDthcmNoLnZtX2ZsYXZvciA9IFZNX1BST1RFQ1RFRF9QS1ZNOwomIzQzOwkJZWxzZQomIzQzOwkJCWt2bS0mZ3Q7YXJjaC52bV9mbGF2b3IgPSBWTV9QS1ZNOwomIzQzOwl9IGVsc2UgaWYgKHByb3RlY3RlZCkgewomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0gZWxzZSBpZiAoaGFzX3ZoZSgpKSB7CiYjNDM7CQlrdm0tJmd0O2FyY2gudm1fZmxhdm9yID0gVk1fVkhFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJa3ZtLSZndDthcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBrdm1fYXJjaF9pbml0X3ZtIC0gaW5pdGlhbGl6ZXMgYSBWTSBkYXRhIHN0cnVjdHVyZQogICogQGt2bToJcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdApAQCAtMjM2LDYgJiM0MzsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7a3ZtLSZndDtsb2NrKTsKICNlbmRpZgogCiYjNDM7CXJldCA9IGt2bV9pbml0X3ZtX2ZsYXZvcihrdm0sIHR5cGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlrdm1faW5pdF9uZXN0ZWQoa3ZtKTsKIAogCXJldCA9IGt2bV9zaGFyZV9oeXAoa3ZtLCBrdm0gJiM0MzsgMSk7CkBAIC0yNjAsOSAmIzQzOzMxMSw2IEBAIGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKQogCQlyZXQgPSBwa3ZtX2luaXRfaG9zdF92bShrdm0sIHR5cGUpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfdW5pbml0X21tdTsKLQl9IGVsc2UgaWYgKHR5cGUgJmFtcDsgS1ZNX1ZNX1RZUEVfQVJNX1BST1RFQ1RFRCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl91bmluaXRfbW11OwogCX0KIAogCWt2bV92Z2ljX2Vhcmx5X2luaXQoa3ZtKTsKQEAgLTM4MSw2ICYjNDM7NDI5LDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAlpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgJmFtcDsmYW1wOyAha3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBleHQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoa3ZtICZhbXA7JmFtcDsga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgJmFtcDsmYW1wOyAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGV4dCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlzd2l0Y2ggKGV4dCkgewogCWNhc2UgS1ZNX0NBUF9JUlFDSElQOgogCQlyID0gdmdpY19wcmVzZW50OwpAQCAtNDQ3LDcgJiM0Mzs0OTgsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCQlyID0gc3lzdGVtX3N1cHBvcnRzX210ZSgpOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfU1RFQUxfVElNRToKLQkJciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpOwomIzQzOwkJciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZChrdm0pOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQVJNX0VMMV8zMkJJVDoKIAkJciA9IGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTXzMyQklUX0VMMSk7CkBAIC01NDgsNiAmIzQzOzU5OSw4IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7dmNwdS0mZ3Q7bXV0ZXgpOwogI2VuZGlmCiAKJiM0MzsJdmNwdS0mZ3Q7YXJjaC52Y3B1X29wcyA9IGFybTY0X3ZjcHVfb3BzW3ZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC52bV9mbGF2b3JdOwomIzQzOwogCS8qIEZvcmNlIHVzZXJzIHRvIGNhbGwgS1ZNX0FSTV9WQ1BVX0lOSVQgKi8KIAl2Y3B1X2NsZWFyX2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7CiAKQEAgLTY2MiwxNCAmIzQzOzcxNSwxMSBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gc2luZ2xlX3Rhc2tfcnVubmluZygpOwogfQogCi12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiYjNDM7c3RhdGljIHZvaWQgdmNwdV9wcmVwYXJlX21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9zMl9tbXUgKm1tdTsKIAlpbnQgKmxhc3RfcmFuOwogCi0JaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQotCQlnb3RvIG5vbW11OwotCiAJaWYgKHZjcHVfaGFzX252KHZjcHUpKQogCQlrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTsKIApAQCAtNjk5LDEwICYjNDM7NzQ5LDMwIEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIAkJa3ZtX2NhbGxfaHlwKF9fa3ZtX2ZsdXNoX2NwdV9jb250ZXh0LCBtbXUpOwogCQkqbGFzdF9yYW4gPSB2Y3B1LSZndDt2Y3B1X2lkeDsKIAl9CiYjNDM7fQogCi1ub21tdToKLQl2Y3B1LSZndDtjcHUgPSBjcHU7CiYjNDM7c3RhdGljIHZvaWQgdmNwdV9zZXRfd2Z4X3RyYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CWlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHZjcHUpKQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyICZhbXA7PSB+SENSX1RXRTsKJiM0MzsJZWxzZQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyIHw9IEhDUl9UV0U7CiYjNDM7CiYjNDM7CWlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdpKHZjcHUpKQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyICZhbXA7PSB+SENSX1RXSTsKJiM0MzsJZWxzZQomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZjcHVfbG9hZF9wdnRpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoJmFtcDt2Y3B1LSZndDthcmNoKSkKJiM0MzsJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwomIzQzO30KIAomIzQzO3N0YXRpYyB2b2lkIHZoZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJdmNwdV9wcmVwYXJlX21tdSh2Y3B1KTsKIAkvKgogCSAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbAogCSAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuCkBAIC03MTEsMzIgJiM0Mzs3ODEsNjggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogCWt2bV92Z2ljX2xvYWQodmNwdSk7CiAJa3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTsKIAlrdm1fdmNwdV9sb2FkX2ZndCh2Y3B1KTsKLQlpZiAoaGFzX3ZoZSgpKQotCQlrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7CiAJa3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpOwogCWt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpOwotCWlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCi0JCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpOwogCi0JaWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2UodmNwdSkpCi0JCXZjcHUtJmd0O2FyY2guaGNyX2VsMiAmYW1wOz0gfkhDUl9UV0U7Ci0JZWxzZQotCQl2Y3B1LSZndDthcmNoLmhjcl9lbDIgfD0gSENSX1RXRTsKJiM0MzsJdmNwdV9sb2FkX3B2dGltZSh2Y3B1KTsKJiM0MzsJdmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpOwomIzQzOwl2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTsKJiM0Mzt9CiAKLQlpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3aSh2Y3B1KSkKLQkJdmNwdS0mZ3Q7YXJjaC5oY3JfZWwyICZhbXA7PSB+SENSX1RXSTsKLQllbHNlCi0JCXZjcHUtJmd0O2FyY2guaGNyX2VsMiB8PSBIQ1JfVFdJOwomIzQzO3N0YXRpYyB2b2lkIG52aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXZjcHVfcHJlcGFyZV9tbXUodmNwdSk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbAomIzQzOwkgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLgomIzQzOwkgKi8KJiM0MzsJa3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTsKJiM0MzsJa3ZtX3ZnaWNfbG9hZCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7CiYjNDM7CWt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7CiAKJiM0MzsJdmNwdV9sb2FkX3B2dGltZSh2Y3B1KTsKJiM0MzsJdmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpOwogCXZjcHVfc2V0X3BhdXRoX3RyYXBzKHZjcHUpOwomIzQzO30KIAotCWlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkgewotCQlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLAotCQkJCSAgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnBrdm0uaGFuZGxlLAotCQkJCSAgdmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2FyY2guaGNyX2VsMik7Ci0JCWt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsCi0JCQkgICAgICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS52Z2ljX3YzKTsKLQl9CiYjNDM7c3RhdGljIHZvaWQgcGt2bV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGhlIHRpbWVyIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB0aGUgdmdpYyB0byBjb3JyZWN0bHkgc2V0IHVwIHBoeXNpY2FsCiYjNDM7CSAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuCiYjNDM7CSAqLwomIzQzOwlrdm1fdGltZXJfdmNwdV9sb2FkKHZjcHUpOwomIzQzOwlrdm1fdmdpY19sb2FkKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9sb2FkX2ZndCh2Y3B1KTsKJiM0MzsJa3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTsKJiM0MzsKJiM0MzsJdmNwdV9sb2FkX3B2dGltZSh2Y3B1KTsKJiM0MzsJdmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpOwomIzQzOwomIzQzOwlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLAomIzQzOwkJCSAgdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnBrdm0uaGFuZGxlLAomIzQzOwkJCSAgdmNwdS0mZ3Q7dmNwdV9pZHgsIHZjcHUtJmd0O2FyY2guaGNyX2VsMik7CiYjNDM7CWt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsCiYjNDM7CQkgICAgICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS52Z2ljX3YzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVhbG1fdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7CiYjNDM7CWt2bV92Z2ljX2xvYWQodmNwdSk7CiYjNDM7CXZjcHVfc2V0X3dmeF90cmFwcyh2Y3B1KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJdmNwdS0mZ3Q7Y3B1ID0gY3B1OwomIzQzOwl2Y3B1LSZndDthcmNoLnZjcHVfb3BzLSZndDt2Y3B1X2xvYWQodmNwdSwgY3B1KTsKIAogCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5zdXBwb3J0ZWRfY3B1cykpCiAJCXZjcHVfc2V0X29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKQEAgLTc0NCwyOCAmIzQzOzg1MCw1MCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJdmNwdS0mZ3Q7YXJjaC5waWQgPSBwaWRfbnIodmNwdS0mZ3Q7cGlkKTsKIH0KIAotdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7c3RhdGljIHZvaWQgdmhlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHsKLQkJa3ZtX2NhbGxfaHlwKF9fdmdpY192M19zYXZlX2FwcnMsICZhbXA7dmNwdS0mZ3Q7YXJjaC52Z2ljX2NwdS52Z2ljX3YzKTsKLQkJa3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfcHV0KTsKLQotCQkvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovCi0JCWlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LSZndDtrdm0pKQotCQkJdmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpOwotCX0KLQogCWt2bV92Y3B1X3B1dF9kZWJ1Zyh2Y3B1KTsKIAlrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTsKLQlpZiAoaGFzX3ZoZSgpKQotCQlrdm1fdmNwdV9wdXRfdmhlKHZjcHUpOwomIzQzOwlrdm1fdmNwdV9wdXRfdmhlKHZjcHUpOwogCWt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTsKIAlrdm1fdmdpY19wdXQodmNwdSk7CiAJa3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdCh2Y3B1KTsKIAlpZiAodmNwdV9oYXNfbnYodmNwdSkpCiAJCWt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7CiAJa3ZtX2FybV92bWlkX2NsZWFyX2FjdGl2ZSgpOwomIzQzO30KIAomIzQzO3N0YXRpYyB2b2lkIG52aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJa3ZtX3ZjcHVfcHV0X2RlYnVnKHZjcHUpOwomIzQzOwlrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTsKJiM0MzsJa3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpOwomIzQzOwlrdm1fdmdpY19wdXQodmNwdSk7CiYjNDM7CWt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7CiYjNDM7CWt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgJmFtcDt2Y3B1LSZndDthcmNoLnZnaWNfY3B1LnZnaWNfdjMpOwomIzQzOwlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9wdXQpOwomIzQzOwomIzQzOwkvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovCiYjNDM7CWlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LSZndDtrdm0pKQomIzQzOwkJdmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpOwomIzQzOwomIzQzOwludmhlX3ZjcHVfcHV0KHZjcHUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWFsbV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlrdm1fdGltZXJfdmNwdV9wdXQodmNwdSk7CiYjNDM7CWt2bV92Z2ljX3B1dCh2Y3B1KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwl2Y3B1LSZndDthcmNoLnZjcHVfb3BzLSZndDt2Y3B1X3B1dCh2Y3B1KTsKIAl2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTsKIAl2Y3B1LSZndDtjcHUgPSAtMTsKIH0KQEAgLTE4NTIsNiAmIzQzOzE5ODAsMTggQEAgc3RhdGljIGludCBrdm1fYXJtX3ZjcHVfc2V0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJcmV0dXJuIF9fa3ZtX2FybV92Y3B1X3NldF9ldmVudHModmNwdSwgZXZlbnRzKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmVhbG0gVkNQVXMgY2FuIGJlIGZpbmFsaXplZCBhZnRlciB0aGUgUmVhbG0gZGVzY3JpcHRvciBpcyBjcmVhdGVkLgomIzQzOyAqIEFsbG93IHRoZSByZWdpc3RlciBsaXN0IGZvciBSRUNzIGJlZm9yZSB0aGUgVkNQVXMgYXJlIGZpbmFsaXplZCwgYnV0CiYjNDM7ICogYWZ0ZXIgdGhlIFNWRSBpcyBmaW5hbGl6ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wga3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJaWYgKGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQodmNwdSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpOwomIzQzO30KJiM0MzsKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMTkwNyw3ICYjNDM7MjA0Nyw3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCWJyZWFrOwogCiAJCXIgPSAtRVBFUk07Ci0JCWlmICgha3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZCh2Y3B1KSkKJiM0MzsJCWlmICgha3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQodmNwdSkpCiAJCQlicmVhazsKIAogCQlyID0gLUVGQVVMVDsKQEAgLTIxMDUsNiAmIzQzOzIyNDUsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCX0KIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHZoZV92Y3B1X29wcyA9IHsKJiM0MzsJLnZjcHVfbG9hZCA9IHZoZV92Y3B1X2xvYWQsCiYjNDM7CS52Y3B1X3B1dCA9IHZoZV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIG52aGVfdmNwdV9vcHMgPSB7CiYjNDM7CS52Y3B1X2xvYWQgPSBudmhlX3ZjcHVfbG9hZCwKJiM0MzsJLnZjcHVfcHV0ID0gbnZoZV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHBrdm1fdmNwdV9vcHMgPSB7CiYjNDM7CS52Y3B1X2xvYWQgPSBwa3ZtX3ZjcHVfbG9hZCwKJiM0MzsJLnZjcHVfcHV0ID0gcGt2bV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHJlYWxtX3ZjcHVfb3BzID0gewomIzQzOwkudmNwdV9sb2FkID0gcmVhbG1fdmNwdV9sb2FkLAomIzQzOwkudmNwdV9wdXQgPSByZWFsbV92Y3B1X3B1dCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tdID0gewomIzQzOwlbVk1fVkhFXSA9ICZhbXA7dmhlX3ZjcHVfb3BzLAomIzQzOwlbVk1fTlZIRV0gPSAmYW1wO252aGVfdmNwdV9vcHMsCiYjNDM7CVtWTV9QS1ZNXSA9ICZhbXA7cGt2bV92Y3B1X29wcywKJiM0MzsJW1ZNX1BST1RFQ1RFRF9QS1ZNXSA9ICZhbXA7cGt2bV92Y3B1X29wcywKJiM0MzsJW1ZNX1JFQUxNXSA9ICZhbXA7cmVhbG1fdmNwdV9vcHMsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG52aGVfcGVyY3B1X3NpemUodm9pZCkKIHsKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpQ0hPT1NFX05WSEVfU1lNKF9fcGVyX2NwdV9lbmQpIC0KQEAgLTMwNTAsNiAmIzQzOzMyMTgsOCBAQCBzdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZCkKIAogCWluX2h5cF9tb2RlID0gaXNfa2VybmVsX2luX2h5cF9tb2RlKCk7CiAKJiM0MzsJa3ZtX2luaXRfcm1pKCk7CiYjNDM7CiAJaWYgKGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfV09SS0FST1VORF9ERVZJQ0VfTE9BRF9BQ1FVSVJFKSB8fAogCSAgICBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfMTUwODQxMikpCiAJCWt2bV9pbmZvKCYjMzQ7R3Vlc3RzIHdpdGhvdXQgcmVxdWlyZWQgQ1BVIGVycmF0dW0gd29ya2Fyb3VuZHMgY2FuIGRlYWRsb2NrIHN5c3RlbSFcbiYjMzQ7IFwKQEAgLTMxNTUsNiAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfa3ZtX21vZGVfY2ZnKGNoYXIgKmFyZykKIAkJcmV0dXJuIDA7CiAJfQogCiYjNDM7CWlmIChzdHJjbXAoYXJnLCAmIzM0O3JtbSYjMzQ7KSA9PSAwICZhbXA7JmFtcDsgIVdBUk5fT04oIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKSkgewomIzQzOwkJa3ZtX21vZGUgPSBLVk1fTU9ERV9STU07CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCXJldHVybiAtRUlOVkFMOwogfQogZWFybHlfcGFyYW0oJiMzNDtrdm0tYXJtLm1vZGUmIzM0OywgZWFybHlfa3ZtX21vZGVfY2ZnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMgYi9hcmNoL2FybTY0L2t2bS9ndWVzdC5jCmluZGV4IGIwMWQ2NjIyYjg3MjAuLjZiZWM3M2QxZWUwNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuYwpAQCAtNTk4LDggJiM0Mzs1OTgsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtX3N2ZV9yZWdzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIXZjcHVfaGFzX3N2ZSh2Y3B1KSkKIAkJcmV0dXJuIDA7CiAKLQkvKiBQb2xpY2VkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6ICovCi0JV0FSTl9PTigha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpOwomIzQzOwlpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKQomIzQzOwkJcmV0dXJuIDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqLwomIzQzOwomIzQzOwlpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtJmd0O2t2bSkpCiYjNDM7CQlyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovCiAKIAlyZXR1cm4gc2xpY2VzICogKFNWRV9OVU1fUFJFR1MgJiM0MzsgU1ZFX05VTV9aUkVHUyAmIzQzOyAxIC8qIEZGUiAqLykKIAkJJiM0MzsgMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovCkBAIC02MTYsOSAmIzQzOzYxOSw2IEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWlmICghdmNwdV9oYXNfc3ZlKHZjcHUpKQogCQlyZXR1cm4gMDsKIAotCS8qIFBvbGljZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDogKi8KLQlXQVJOX09OKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSk7Ci0KIAkvKgogCSAqIEVudW1lcmF0ZSB0aGlzIGZpcnN0LCBzbyB0aGF0IHVzZXJzcGFjZSBjYW4gc2F2ZS9yZXN0b3JlIGluCiAJICogdGhlIG9yZGVyIHJlcG9ydGVkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6CkBAIC02MjgsNiAmIzQzOzYyOCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfc3ZlX3JlZ19pbmRpY2VzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJJiM0MzsmIzQzO251bV9yZWdzOwogCiYjNDM7CWlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpCiYjNDM7CQlyZXR1cm4gbnVtX3JlZ3M7CiYjNDM7CiYjNDM7CWlmIChrdm1fdm1faXNfcmVhbG0odmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiBudW1fcmVnczsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2xpY2VzOyBpJiM0MzsmIzQzOykgewogCQlmb3IgKG4gPSAwOyBuICZsdDsgU1ZFX05VTV9aUkVHUzsgbiYjNDM7JiM0MzspIHsKIAkJCXJlZyA9IEtWTV9SRUdfQVJNNjRfU1ZFX1pSRUcobiwgaSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMKaW5kZXggNDU5YmQ5ZWI3ZTRiYy4uMDk5NjFjMDA1NmYyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYwpAQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3Brdm1faHlwX3ZtKHN0cnVjdCBrdm0gKmhvc3Rfa3ZtLCBzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSwKIAogCWh5cF92bS0mZ3Q7aG9zdF9rdm0gPSBob3N0X2t2bTsKIAloeXBfdm0tJmd0O2t2bS5jcmVhdGVkX3ZjcHVzID0gbnJfdmNwdXM7Ci0JaHlwX3ZtLSZndDtrdm0uYXJjaC5wa3ZtLmlzX3Byb3RlY3RlZCA9IFJFQURfT05DRShob3N0X2t2bS0mZ3Q7YXJjaC5wa3ZtLmlzX3Byb3RlY3RlZCk7CiYjNDM7CWh5cF92bS0mZ3Q7a3ZtLmFyY2gudm1fZmxhdm9yID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLSZndDthcmNoLnZtX2ZsYXZvcik7CiAJaHlwX3ZtLSZndDtrdm0uYXJjaC5mbGFncyA9IDA7CiAJcGt2bV9pbml0X2ZlYXR1cmVzX2Zyb21faG9zdChoeXBfdm0sIGhvc3Rfa3ZtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMKaW5kZXggYjc0ZGQ1Y2UxZWZkMy4uZjQ4MjUzYjlkODhiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2hvc3QuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKICNpbmNsdWRlICZsdDthc20vc3RhZ2UyX3BndGFibGUuaCZndDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jIGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jCmluZGV4IGIxMWI4ODIxYzlmYmMuLjJiMWU2ZmRlYjRkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmMKQEAgLTQxNCwxNCAmIzQzOzQxNCwxNCBAQCB2b2lkIGt2bV9hcm1fdGVhcmRvd25faHlwZXJjYWxscyhzdHJ1Y3Qga3ZtICprdm0pCiAKIGludCBrdm1fYXJtX2dldF9md19udW1fcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTsKJiM0MzsJcmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTsKIH0KIAogaW50IGt2bV9hcm1fY29weV9md19yZWdfaW5kaWNlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpJiM0MzsmIzQzOykgewogCQlpZiAocHV0X3VzZXIoa3ZtX2FybV9md19yZWdfaWRzW2ldLCB1aW5kaWNlcyYjNDM7JiM0MzspKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwppbmRleCBkNmM0ZmMxNmY4Nzk1Li5kNjFhM2ZmMDRmYWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwpAQCAtMzE3LDYgJiM0MzszMTcsNyBAQCB2b2lkIGt2bV9pbmplY3Rfc2l6ZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAgKi8KIHZvaWQga3ZtX2luamVjdF91bmRlZmluZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewomIzQzOwlLVk1fQlVHKHZjcHVfaXNfcmVjKHZjcHUpLCB2Y3B1LSZndDtrdm0sICYjMzQ7VW5leHBlY3RlZCB1bmRlZmluZWQgZXhjZXB0aW9uIGluamVjdGlvbiB0byBSRUMmIzM0Oyk7CiAJaWYgKHZjcHVfZWwxX2lzXzMyYml0KHZjcHUpKQogCQlpbmplY3RfdW5kZWYzMih2Y3B1KTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbWlvLmMgYi9hcmNoL2FybTY0L2t2bS9tbWlvLmMKaW5kZXggZDFjM2EzNTJkNWEyMi4uYmJjZjUyZjAxZTkxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL21taW8uYwpAQCAtMTY4LDE0ICYjNDM7MTY4LDE0IEBAIGludCBpb19tZW1fYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBmYXVsdF9pcGEpCiAJICogTm8gdmFsaWQgc3luZHJvbWU/IEFzayB1c2Vyc3BhY2UgZm9yIGhlbHAgaWYgaXQgaGFzCiAJICogdm9sdW50ZWVyZWQgdG8gZG8gc28sIGFuZCBiYWlsIG91dCBvdGhlcndpc2UuCiAJICoKLQkgKiBJbiB0aGUgcHJvdGVjdGVkIFZNIGNhc2UsIHRoZXJlIGlzbiYjMzk7dCBtdWNoIHVzZXJzcGFjZSBjYW4gZG8KJiM0MzsJICogSW4gdGhlIHByb3RlY3RlZC9SZWFsbSBWTSBjYXNlLCB0aGVyZSBpc24mIzM5O3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvCiAJICogdGhvdWdoLCBzbyBkaXJlY3RseSBkZWxpdmVyIGFuIGV4Y2VwdGlvbiB0byB0aGUgZ3Vlc3QuCiAJICovCiAJaWYgKCFrdm1fdmNwdV9kYWJ0X2lzdmFsaWQodmNwdSkpIHsKIAkJdHJhY2Vfa3ZtX21taW9fbmlzdigqdmNwdV9wYyh2Y3B1KSwgZXNyLAogCQkJCSAgICBrdm1fdmNwdV9nZXRfaGZhcih2Y3B1KSwgZmF1bHRfaXBhKTsKIAotCQlpZiAodmNwdV9pc19wcm90ZWN0ZWQodmNwdSkpCiYjNDM7CQlpZiAodmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkpCiAJCQlyZXR1cm4ga3ZtX2luamVjdF9zZWFfZGFidCh2Y3B1LCBrdm1fdmNwdV9nZXRfaGZhcih2Y3B1KSk7CiAKIAkJaWYgKHRlc3RfYml0KEtWTV9BUkNIX0ZMQUdfUkVUVVJOX05JU1ZfSU9fQUJPUlRfVE9fVVNFUiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggOWJhODY0NTBmZTRhZi4uNWU3Y2RiZTMxMGZjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbW11LmMKQEAgLTM3LDYgJiM0MzszNywxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3JvX2FmdGVyX2luaXQgaW9fbWFwX2Jhc2U7CiAKICNkZWZpbmUgS1ZNX1BHVF9GTihmbikJCSghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgPyBmbiA6IHAgIyMgZm4pCiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcHJvdGVjdGVkX3Brdm1fczJfb3BzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyB1bnByb3RlY3RlZF9wa3ZtX3MyX29wczsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMga3ZtX2RlZmF1bHRfdm1fczJfb3BzOwomIzQzOwogc3RhdGljIHBoeXNfYWRkcl90IF9fc3RhZ2UyX3JhbmdlX2FkZHJfZW5kKHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZCwKIAkJCQkJICAgcGh5c19hZGRyX3Qgc2l6ZSkKIHsKQEAgLTE2Niw2ICYjNDM7MTcwLDE4IEBAIHN0YXRpYyBib29sIG1lbXNsb3RfaXNfbG9nZ2luZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KQogCXJldHVybiBtZW1zbG90LSZndDtkaXJ0eV9iaXRtYXAgJmFtcDsmYW1wOyAhKG1lbXNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1fUkVBRE9OTFkpOwogfQogCiYjNDM7c3RhdGljIGludCBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CWt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLSZndDthcmNoLnBrdm0uaGFuZGxlKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CWt2bV9jYWxsX2h5cChfX2t2bV90bGJfZmx1c2hfdm1pZCwgJmFtcDtrdm0tJmd0O2FyY2gubW11KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicygpIC0gZmx1c2ggYWxsIFZNIFRMQiBlbnRyaWVzIGZvciB2Ny84CiAgKiBAa3ZtOglwb2ludGVyIHRvIGt2bSBzdHJ1Y3R1cmUuCkBAIC0xNzQsMjYgJiM0MzsxOTAsMzYgQEAgc3RhdGljIGJvb2wgbWVtc2xvdF9pc19sb2dnaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpCiAgKi8KIGludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQotCQlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS0mZ3Q7YXJjaC5wa3ZtLmhhbmRsZSk7Ci0JZWxzZQotCQlrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsICZhbXA7a3ZtLSZndDthcmNoLm1tdSk7Ci0JcmV0dXJuIDA7CiYjNDM7CWlmICgha3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fZmx1c2hfcmVtb3RlX3RsYnMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiB9CiAKLWludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sCi0JCQkJICAgICAgZ2ZuX3QgZ2ZuLCB1NjQgbnJfcGFnZXMpCiYjNDM7c3RhdGljIGludCBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCWdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkJIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKQogewogCXU2NCBzaXplID0gbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAl1NjQgYWRkciA9IGdmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogCi0JaWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKQotCQlrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS0mZ3Q7YXJjaC5wa3ZtLmhhbmRsZSk7Ci0JZWxzZQotCQlrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoJmFtcDtrdm0tJmd0O2FyY2gubW11LCBhZGRyLCBzaXplKTsKJiM0MzsJa3ZtX3RsYl9mbHVzaF92bWlkX3JhbmdlKCZhbXA7a3ZtLSZndDthcmNoLm1tdSwgYWRkciwgc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztpbnQga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCQkgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2gudm1fczJfb3BzLSZndDt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4ga3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBnZm4sIG5yX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCAqc3RhZ2UyX21lbWNhY2hlX3phbGxvY19wYWdlKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jID0gYXJnOwpAQCAtMzM3LDEzICYjNDM7MzYzLDIwIEBAIHN0YXRpYyB2b2lkIF9fdW5tYXBfc3RhZ2UyX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjQKIAkJCQkgICBtYXlfYmxvY2spKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwKJiM0MzsJCQkJICAgICAgcGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCSAgICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaykKJiM0Mzt7CiYjNDM7CV9fdW5tYXBfc3RhZ2UyX3JhbmdlKG1tdSwgc3RhcnQsIHNpemUsIG1heV9ibG9jayk7CiYjNDM7fQomIzQzOwogdm9pZCBrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LAogCQkJICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaykKIHsKLQlpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm1fczJfbW11X3RvX2t2bShtbXUpKSkKLQkJcmV0dXJuOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSBrdm1fczJfbW11X3RvX2t2bShtbXUpOwogCi0JX191bm1hcF9zdGFnZTJfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTsKJiM0MzsJaWYgKGt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX3N0YWdlMl91bm1hcF9yYW5nZSkKJiM0MzsJCWt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX3N0YWdlMl91bm1hcF9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spOwogfQogCiB2b2lkIGt2bV9zdGFnZTJfZmx1c2hfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgcGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kKQpAQCAtOTYzLDYgJiM0Mzs5OTYsMTggQEAgc3RhdGljIHZvaWQga3ZtX3N0YWdlMl9kZXN0cm95KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0KQogCUtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX2Rlc3Ryb3lfcGdkKShwZ3QpOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzICphcm02NF92bV9zMl9vcHNbVk1fRkxBVk9SX01BWF0gPSB7CiYjNDM7CVtWTV9WSEVdID0gJmFtcDtrdm1fZGVmYXVsdF92bV9zMl9vcHMsCiYjNDM7CVtWTV9OVkhFXSA9ICZhbXA7a3ZtX2RlZmF1bHRfdm1fczJfb3BzLAomIzQzOwlbVk1fUEtWTV0gPSAmYW1wO3VucHJvdGVjdGVkX3Brdm1fczJfb3BzLAomIzQzOwlbVk1fUFJPVEVDVEVEX1BLVk1dID0gJmFtcDtwcm90ZWN0ZWRfcGt2bV9zMl9vcHMsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fdm1faW5pdF92bV9zMl9vcHMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpCiYjNDM7ewomIzQzOwlrdm0tJmd0O2FyY2gudm1fczJfb3BzID0gYXJtNjRfdm1fczJfb3BzW2t2bS0mZ3Q7YXJjaC52bV9mbGF2b3JdOwomIzQzO30KJiM0MzsKIC8qKgogICoga3ZtX2luaXRfc3RhZ2UyX21tdSAtIEluaXRpYWxpc2UgYSBTMiBNTVUgc3RydWN0dXJlCiAgKiBAa3ZtOglUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdHVyZQpAQCAtOTgzLDYgJiM0MzsxMDI4LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHQKIAlpbnQgY3B1LCBlcnI7CiAJc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7CiAKJiM0MzsJLyogSW5pdGlhbGl6ZSB0aGUgVk0gb3BzIGZvciB0aGUgVk0gaW5zdGFuY2UgZm9yIHRoZSBmaXJzdCB0aW1lICovCiYjNDM7CWlmIChtbXUgPT0gJmFtcDtrdm0tJmd0O2FyY2gubW11KQomIzQzOwkJa3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7CiAJLyoKIAkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgb3VyIHBhZ2UgdGFibGVzIGluIHBsYWNlLCBhbmQgdGhhdCB0aGUKIAkgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsCkBAIC0xNzA1LDcgJiM0MzsxNzUzLDcgQEAgc3RydWN0IGt2bV9zMl9mYXVsdF92bWFfaW5mbyB7CiAJYm9vbAkJbWFwX25vbl9jYWNoZWFibGU7CiB9OwogCi1zdGF0aWMgaW50IHBrdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKJiM0MztzdGF0aWMgaW50IHByb3RlY3RlZF92bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKQogewogCXVuc2lnbmVkIGludCBmbGFncyA9IEZPTExfSFdQT0lTT04gfCBGT0xMX0xPTkdURVJNIHwgRk9MTF9XUklURTsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLSZndDt2Y3B1OwpAQCAtMjE0Myw2ICYjNDM7MjE5MSwyMiBAQCBzdGF0aWMgaW50IHVzZXJfbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZCkKIAlyZXR1cm4ga3ZtX3MyX2ZhdWx0X21hcChzMmZkLCAmYW1wO3MydmksIHByb3QsIG1lbWNhY2hlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLSZndDt2Y3B1OwomIzQzOwomIzQzOwlWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCQkha3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJCQkha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTsKJiM0MzsKJiM0MzsJaWYgKGt2bV9zbG90X2hhc19nbWVtKHMyZmQtJmd0O21lbXNsb3QpKQomIzQzOwkJcmV0ID0gZ21lbV9hYm9ydChzMmZkKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0ID0gdXNlcl9tZW1fYWJvcnQoczJmZCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyogUmVzb2x2ZSB0aGUgYWNjZXNzIGZhdWx0IGJ5IG1ha2luZyB0aGUgcGFnZSB5b3VuZyBhZ2Fpbi4gKi8KIHN0YXRpYyB2b2lkIGhhbmRsZV9hY2Nlc3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBmYXVsdF9pcGEpCiB7CkBAIC0yMjUwLDYgJiM0MzsyMzE0LDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3Rfc2VhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MyX3RyYW5zIG5lc3RlZF90cmFucywgKm5lc3RlZCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtJmd0O2t2bTsKIAl1bnNpZ25lZCBsb25nIGVzcjsKIAlwaHlzX2FkZHJfdCBmYXVsdF9pcGE7IC8qIFRoZSBhZGRyZXNzIHdlIGZhdWx0ZWQgb24gKi8KIAlwaHlzX2FkZHJfdCBpcGE7IC8qIEFsd2F5cyB0aGUgSVBBIGluIHRoZSBMMSBndWVzdCBwaHlzIHNwYWNlICovCkBAIC0yNDExLDE5ICYjNDM7MjQ3Niw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJLmh2YQkJPSBodmEsCiAJfTsKIAotCWlmIChrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtJmd0O2t2bSkpIHsKLQkJcmV0ID0gcGt2bV9tZW1fYWJvcnQoJmFtcDtzMmZkKTsKLQl9IGVsc2UgewotCQlWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpICZhbXA7JmFtcDsKLQkJCQkhd3JpdGVfZmF1bHQgJmFtcDsmYW1wOwotCQkJCSFrdm1fdmNwdV90cmFwX2lzX2V4ZWNfZmF1bHQodmNwdSkpOwotCi0JCWlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSkKLQkJCXJldCA9IGdtZW1fYWJvcnQoJmFtcDtzMmZkKTsKLQkJZWxzZQotCQkJcmV0ID0gdXNlcl9tZW1fYWJvcnQoJmFtcDtzMmZkKTsKLQl9Ci0KJiM0MzsJcmV0ID0ga3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fbWVtX2Fib3J0KCZhbXA7czJmZCk7CiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSAxOwogb3V0OgpAQCAtMjQzNiwzOCAmIzQzOzI0ODksNDMgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiBib29sIGt2bV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiB7Ci0JaWYgKCFrdm0tJmd0O2FyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpCiYjNDM7CWlmICgha3ZtLSZndDthcmNoLm1tdS5wZ3QpCiAJCXJldHVybiBmYWxzZTsKIAotCV9fdW5tYXBfc3RhZ2UyX3JhbmdlKCZhbXA7a3ZtLSZndDthcmNoLm1tdSwgcmFuZ2UtJmd0O3N0YXJ0ICZsdDsmbHQ7IFBBR0VfU0hJRlQsCi0JCQkgICAgIChyYW5nZS0mZ3Q7ZW5kIC0gcmFuZ2UtJmd0O3N0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZULAotCQkJICAgICByYW5nZS0mZ3Q7bWF5X2Jsb2NrKTsKJiM0MzsJa3ZtX3N0YWdlMl91bm1hcF9yYW5nZSgmYW1wO2t2bS0mZ3Q7YXJjaC5tbXUsIHJhbmdlLSZndDtzdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkJCQkocmFuZ2UtJmd0O2VuZCAtIHJhbmdlLSZndDtzdGFydCkgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJcmFuZ2UtJmd0O21heV9ibG9jayk7CiAKIAlrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgcmFuZ2UtJmd0O21heV9ibG9jayk7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQomIzQzO3N0YXRpYyBib29sIGt2bV92bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogewogCXU2NCBzaXplID0gKHJhbmdlLSZndDtlbmQgLSByYW5nZS0mZ3Q7c3RhcnQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7CiAKLQlpZiAoIWt2bS0mZ3Q7YXJjaC5tbXUucGd0IHx8IGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSkKLQkJcmV0dXJuIGZhbHNlOwotCiAJcmV0dXJuIEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX3Rlc3RfY2xlYXJfeW91bmcpKGt2bS0mZ3Q7YXJjaC5tbXUucGd0LAogCQkJCQkJICAgcmFuZ2UtJmd0O3N0YXJ0ICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiAJCQkJCQkgICBzaXplLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBrdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKJiM0Mzt7CiYjNDM7CWlmICgha3ZtLSZndDthcmNoLm1tdS5wZ3QgfHwgIWt2bS0mZ3Q7YXJjaC52bV9zMl9vcHMtJmd0O3ZtX2FnZV9nZm4pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiBrdm0tJmd0O2FyY2gudm1fczJfb3BzLSZndDt2bV9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpOwogCS8qCiAJICogVE9ETzogSGFuZGxlIG5lc3RlZF9tbXUgc3RydWN0dXJlcyBoZXJlIHVzaW5nIHRoZSByZXZlcnNlIG1hcHBpbmcgaW4KIAkgKiBhIGxhdGVyIHZlcnNpb24gb2YgcGF0Y2ggc2VyaWVzLgogCSAqLwogfQogCi1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpCiYjNDM7c3RhdGljIGJvb2wga3ZtX3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKIHsKIAl1NjQgc2l6ZSA9IChyYW5nZS0mZ3Q7ZW5kIC0gcmFuZ2UtJmd0O3N0YXJ0KSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogCi0JaWYgKCFrdm0tJmd0O2FyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpCiYjNDM7CWlmICgha3ZtLSZndDthcmNoLm1tdS5wZ3QpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiBLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKShrdm0tJmd0O2FyY2gubW11LnBndCwKQEAgLTI0NzUsNiAmIzQzOzI1MzMsMTUgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQogCQkJCQkJICAgc2l6ZSwgZmFsc2UpOwogfQogCiYjNDM7Ym9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsKJiM0MzsJaWYgKCFrdm0tJmd0O2FyY2gubW11LnBndCB8fCAha3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fdGVzdF9hZ2VfZ2ZuKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4ga3ZtLSZndDthcmNoLnZtX3MyX29wcy0mZ3Q7dm1fdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpOwomIzQzO30KJiM0MzsKIHBoeXNfYWRkcl90IGt2bV9tbXVfZ2V0X2h0dGJyKHZvaWQpCiB7CiAJcmV0dXJuIF9fcGEoaHlwX3BndGFibGUtJmd0O3BnZCk7CkBAIC0yNzk2LDMgJiM0MzsyODYzLDMzIEBAIHZvaWQga3ZtX3RvZ2dsZV9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FzX2VuYWJsZWQpCiAKIAl0cmFjZV9rdm1fdG9nZ2xlX2NhY2hlKCp2Y3B1X3BjKHZjcHUpLCB3YXNfZW5hYmxlZCwgbm93X2VuYWJsZWQpOwogfQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwcm90ZWN0ZWRfdm1fczJfb3BzID0gewomIzQzOwkudm1fZmx1c2hfcmVtb3RlX3RsYnMJCT0gcGt2bV9mbHVzaF9yZW1vdGVfdGxicywKJiM0MzsJLnZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlCT0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSwKJiM0MzsJLyoKJiM0MzsJICogTm90IHN1cHBvcnRlZCBmb3IgUHJvdGVjdGVkIFZNcyB1bmRlciBwS1ZNCiYjNDM7CSAqIC52bV9hZ2VfZ2ZuCiYjNDM7CSAqIC52bV90ZXN0X2FnZV9nZm4KJiM0MzsJICogLnZtX3N0YWdlMl91bm1hcF9yYW5nZQomIzQzOwkgKi8KJiM0MzsJLnZtX21lbV9hYm9ydAkJCT0gcHJvdGVjdGVkX3ZtX21lbV9hYm9ydCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwa3ZtX3ZtX3MyX29wcyA9IHsKJiM0MzsJLnZtX2ZsdXNoX3JlbW90ZV90bGJzCQk9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMsCiYjNDM7CS52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZQk9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsCiYjNDM7CS52bV9hZ2VfZ2ZuCQkJPSBrdm1fdm1fYWdlX2dmbiwKJiM0MzsJLnZtX3Rlc3RfYWdlX2dmbgkJPSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLAomIzQzOwkudm1fc3RhZ2UyX3VubWFwX3JhbmdlCQk9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsCiYjNDM7CS52bV9tZW1fYWJvcnQJCQk9IGt2bV92bV9tZW1fYWJvcnQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMga3ZtX2RlZmF1bHRfdm1fczJfb3BzID0gewomIzQzOwkudm1fZmx1c2hfcmVtb3RlX3RsYnMJCT0ga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzLAomIzQzOwkudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UJPSBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsCiYjNDM7CS52bV9hZ2VfZ2ZuCQkJPSBrdm1fdm1fYWdlX2dmbiwKJiM0MzsJLnZtX3Rlc3RfYWdlX2dmbgkJPSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLAomIzQzOwkudm1fc3RhZ2UyX3VubWFwX3JhbmdlCQk9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsCiYjNDM7CS52bV9tZW1fYWJvcnQJCQk9IGt2bV92bV9tZW1fYWJvcnQsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uYyBiL2FyY2gvYXJtNjQva3ZtL3Brdm0uYwppbmRleCA4ZTRjNmU0YmVjMTIzLi4zOTQ4ZmE0NmY0ZDc1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9wa3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vcGt2bS5jCkBAIC0yNDAsNyAmIzQzOzI0MCw2IEBAIGludCBwa3ZtX2luaXRfaG9zdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSkKIAkJcmV0dXJuIHJldDsKIAogCWt2bS0mZ3Q7YXJjaC5wa3ZtLmhhbmRsZSA9IHJldDsKLQlrdm0tJmd0O2FyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7CiAJaWYgKHByb3RlY3RlZCkgewogCQlwcl93YXJuX29uY2UoJiMzNDtrdm06IHByb3RlY3RlZCBWTXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgZm9yIGRldmVsb3BtZW50IG9ubHksIHRhaW50aW5nIGtlcm5lbFxuJiMzNDspOwogCQlhZGRfdGFpbnQoVEFJTlRfVVNFUiwgTE9DS0RFUF9TVElMTF9PSyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wdnRpbWUuYyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCmluZGV4IDRjZWFiYWE0YzMwYmQuLjQxZmJmZDkyY2QyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jCkBAIC02Nyw5ICYjNDM7NjcsOSBAQCBncGFfdCBrdm1faW5pdF9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIGJhc2U7CiB9CiAKLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpCiYjNDM7Ym9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bSAqa3ZtKQogewotCXJldHVybiAhIXNjaGVkX2luZm9fb24oKTsKJiM0MzsJcmV0dXJuICEhc2NoZWRfaW5mb19vbigpICZhbXA7JmFtcDsgKCFrdm0gfHwgIWt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKSk7CiB9CiAKIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC04MSw3ICYjNDM7ODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWludCByZXQgPSAwOwogCWludCBpZHg7CiAKLQlpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpIHx8CiYjNDM7CWlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSkgfHwKIAkgICAgYXR0ci0mZ3Q7YXR0ciAhPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSkKIAkJcmV0dXJuIC1FTlhJTzsKIApAQCAtMTEwLDcgJiM0MzsxMTAsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXU2NCBfX3VzZXIgKnVzZXIgPSAodTY0IF9fdXNlciAqKWF0dHItJmd0O2FkZHI7CiAJdTY0IGlwYTsKIAotCWlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkgfHwKJiM0MzsJaWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQodmNwdS0mZ3Q7a3ZtKSB8fAogCSAgICBhdHRyLSZndDthdHRyICE9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBKQogCQlyZXR1cm4gLUVOWElPOwogCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIGludCBrdm1fYXJtX3B2dGltZV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiB7CiAJc3dpdGNoIChhdHRyLSZndDthdHRyKSB7CiAJY2FzZSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQToKLQkJaWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpKQomIzQzOwkJaWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LSZndDtrdm0pKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ybWkuYyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjVlY2M4YjM0OTg2OTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9ybWkuYwpAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20vdmlydC5oJmd0OwomIzQzOwomIzQzO3ZvaWQga3ZtX2luaXRfcm1pKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoa3ZtX2dldF9tb2RlKCkgIT0gS1ZNX01PREVfUk1NKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBUT0RPOiBDaGVjayBpZiB0aGUgUk1JIGlzIGF2YWlsYWJsZSAqLwomIzQzOwomIzQzOwkvKiBGdXR1cmUgcGF0Y2ggd2lsbCBlbmFibGUgc3RhdGljIGJyYW5jaCBrdm1fcm1pX2lzX2F2YWlsYWJsZSAqLwomIzQzO30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1OGMxZmMxM2VhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwpAQCAtNTYzOCwxOCAmIzQzOzU2MzgsMTggQEAgaW50IGt2bV9hcm1fc3lzX3JlZ19zZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3Qgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcKIAkJCQkgICAgc3lzX3JlZ19kZXNjcywgQVJSQVlfU0laRShzeXNfcmVnX2Rlc2NzKSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2RlbXV4X3JlZ3Modm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIENTU0VMUl9NQVg7CiYjNDM7CXJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KSA/IDAgOiBDU1NFTFJfTUFYOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyh1NjQgX191c2VyICp1aW5kaWNlcykKJiM0MztzdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKQogewogCXU2NCB2YWwgPSBLVk1fUkVHX0FSTTY0IHwgS1ZNX1JFR19TSVpFX1UzMiB8IEtWTV9SRUdfQVJNX0RFTVVYOwogCXVuc2lnbmVkIGludCBpOwogCiAJdmFsIHw9IEtWTV9SRUdfQVJNX0RFTVVYX0lEX0NDU0lEUjsKLQlmb3IgKGkgPSAwOyBpICZsdDsgQ1NTRUxSX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9kZW11eF9yZWdzKHZjcHUpOyBpJiM0MzsmIzQzOykgewogCQlpZiAocHV0X3VzZXIodmFsIHwgaSwgdWluZGljZXMpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXVpbmRpY2VzJiM0MzsmIzQzOzsKQEAgLTU2OTMsMTEgJiM0Mzs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcmVhbG1fc3lzX3JlZ19oaWRkZW5fdXNlcihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCQkJIHU2NCByZWcpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHJlZykgewomIzQzOwljYXNlIFNZU19JRF9BQTY0REZSMF9FTDE6CiYjNDM7CWNhc2UgU1lTX1BNQ1JfRUwwOgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgd2Fsa19vbmVfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQsCiAJCQkgICAgdTY0IF9fdXNlciAqKnVpbmQsCiAJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbCkKIHsKJiM0MzsJaWYgKHZjcHVfaXNfcmVjKHZjcHUpICZhbXA7JmFtcDsKJiM0MzsJICAgIGt2bV9yZWFsbV9zeXNfcmVnX2hpZGRlbl91c2VyKHZjcHUsIHJlZ190b19lbmNvZGluZyhyZCkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJLyoKIAkgKiBJZ25vcmUgcmVnaXN0ZXJzIHdlIHRyYXAgYnV0IGRvbiYjMzk7dCBzYXZlLAogCSAqIGFuZCBmb3Igd2hpY2ggbm8gY3VzdG9tIHVzZXIgYWNjZXNzb3IgaXMgcHJvdmlkZWQuCkBAIC01NzM1LDcgJiM0Mzs1NzUwLDcgQEAgc3RhdGljIGludCB3YWxrX3N5c19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZCkKIAogdW5zaWduZWQgbG9uZyBrdm1fYXJtX251bV9zeXNfcmVnX2Rlc2NzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gbnVtX2RlbXV4X3JlZ3MoKQomIzQzOwlyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSkKIAkJJiM0Mzsgd2Fsa19zeXNfcmVncyh2Y3B1LCAodTY0IF9fdXNlciAqKU5VTEwpOwogfQogCkBAIC01NzQ4LDcgJiM0Mzs1NzYzLDcgQEAgaW50IGt2bV9hcm1fY29weV9zeXNfcmVnX2luZGljZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kaWNlcykKIAkJcmV0dXJuIGVycjsKIAl1aW5kaWNlcyAmIzQzOz0gZXJyOwogCi0JcmV0dXJuIHdyaXRlX2RlbXV4X3JlZ2lkcyh1aW5kaWNlcyk7CiYjNDM7CXJldHVybiB3cml0ZV9kZW11eF9yZWdpZHModmNwdSwgdWluZGljZXMpOwogfQogCiAjZGVmaW5lIEtWTV9BUk1fRkVBVFVSRV9JRF9SQU5HRV9JTkRFWChyKQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmggYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oCmluZGV4IGY4NmEwMDZkNjcxMzYuLjA2YzIwNjEyZTllN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaApAQCAtMTAsNiAmIzQzOzEwLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvcHNjaS5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZW11bGF0ZS5oJmd0OwomIzQzOwogI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8xCVBTQ0lfVkVSU0lPTigwLCAxKQogI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yCVBTQ0lfVkVSU0lPTigwLCAyKQogI2RlZmluZSBLVk1fQVJNX1BTQ0lfMV8wCVBTQ0lfVkVSU0lPTigxLCAwKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaDogQVJNNjQgS1ZNIEZvY3VzKioKCk9rYXksIHNvIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgZGVmaW5pdGVseSBhbWQ2NCwgd2hpY2ggaXMgbXkgYnJlYWQgYW5kIGJ1dHRlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgcGF0Y2ggYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKVGhlIHBhdGNoIGxpc3QgdGVsbHMgbWUgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgYnVuY2ggb2YgZmlsZXMuIFByaW1hcmlseSwgaXQmIzM5O3MgaGl0dGluZyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gdGhlIGBhcmNoL2FybTY0L2AgZGlyZWN0b3J5LiBJIHNlZSBhIGxvdCBvZiBLVk0tcmVsYXRlZCBmaWxlcyBpbiB0aGVyZSwgdGhpbmdzIGxpa2UgYGt2bV9lbXVsYXRlLmhgLCBga3ZtX2hvc3QuaGAsIGBrdm1fcGd0YWJsZS5oYCwgYW5kIGEgZ29vZCBjaHVuayBvZiBDIGZpbGVzOiBgYXJjaF90aW1lci5jYCwgYGFybS5jYCwgYGd1ZXN0LmNgLCBldGMuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgQVJNNjQgS1ZNIGltcGxlbWVudGF0aW9uOiBIWVAsIE1NSU8sIE1NVSwgUk1JLCB0aGUgd29ya3MuIFRoZSBmYWN0IHRoYXQgYGFyY2gvYXJtNjQva3ZtL3Brdm0uY2AgaXMgYmVpbmcgdG91Y2hlZCBpcyBpbnRlcmVzdGluZywgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoYXQgYXJlYS4KCkJ1dCwgaG9sZCBvbi4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBBUk02NC1zcGVjaWZpYyBjb2RlLCBJIG5vdGljZSB0d28gdGhpbmdzOiBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRgIGFuZCBgaW5jbHVkZS9rdm0vYXJtX3BzY2kuaGAgYXJlIGFsc28gb24gdGhlIGxpc3QuIFRoaXMgdGhyb3dzIGEgc2xpZ2h0IGN1cnZlYmFsbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlc2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSBhZmZlY3QgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdW51c3VhbCB0byBoYXZlIEFSTTY0IGNoYW5nZXMgYmxlZWQgaW50byBvdGhlciBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgZ29vZCByZWFzb24uCgpTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbmNsdWRlL2t2bS9hcm1fcHNjaS5oYCBhbmQgYW55IG9mIHRoZSBvdGhlciBtb2RpZmllZCBjb2RlIGFyZSBub3QgdXNlZCBvbiBhbWQ2NCBvciBjb21waWxlZCBvbiB4ODYvYW1kNjQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCBgaW5jbHVkZS9rdm0vYXJtX3BzY2kuaGAgZmlyc3QgYW5kIHRoZW4gc2VlIGlmIGFueXRoaW5nIGluIHRoZSBvdGhlciBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHg4Ni02NCBidWlsZC4gVGhpcyBtYXkgYmUgZmluZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTtsbCBhbHNvIGhhdmUgYSBsb29rIGFyb3VuZCBhbmQgc2VlIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBnYXRlZCBiZWhpbmQgY29uZGl0aW9uYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FybV9wc2NpLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vYXJtLmMtNTAtI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wbXUuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vYXJtLmM6NTE6I2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wc2NpLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTUyLSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fdmdpYy5oXHUwMDNlXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTE4LVxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oOjE5OiNpbmNsdWRlIFx1MDAzY2t2bS9hcm1fcHNjaS5oXHUwMDNlXG5hcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9oeXAvc3dpdGNoLmgtMjAtXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQtXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYzoxNTojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BzY2kuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTYtXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYy0xNS1cbmFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmM6MTY6I2luY2x1ZGUgXHUwMDNja3ZtL2FybV9wc2NpLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMtMTctXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTktI2luY2x1ZGUgXHUwMDNja3ZtL2FybV9oeXBlcmNhbGxzLmhcdTAwM2VcbmFyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYzoxMDojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BzY2kuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTExLVxuLS1cbmFyY2gvYXJtNjQva3ZtL3BzY2kuYy0xNS1cbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzoxNjojaW5jbHVkZSBcdTAwM2Nrdm0vYXJtX3BzY2kuaFx1MDAzZVxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTE3LSNpbmNsdWRlIFx1MDAzY2t2bS9hcm1faHlwZXJjYWxscy5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNDgKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiA3MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGRldGVybWluaW5nIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBhbWQ2NC4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBpbmNsdWRlL2t2bS9hcm1fcHNjaS5oYCBpcyBvbmx5IHVzZWQgYnkgYGFyY2gvYXJtNjQva3ZtLypgLiBBbmQgdGhlIGNoYW5nZSBpcyBzaW1wbHkgYWRkaW5nIGFuIGluY2x1ZGUgZm9yIGBhc20va3ZtX2VtdWxhdGUuaGAuIFN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgbGV0JiMzOTtzIGhpdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZnJvbSBTZWN0aW9uIDIuIFRoZSBrZXkgaGVyZSBpcyAmIzM0O1VucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczogLSBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDsgVGhlIHRhcmdldCBpcyBhbWQ2NC4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgKmNvbXBsZXRlbHkqIGFib3V0IGBhcmNoL2FybTY0YCDigJMgQVJNNjQgS1ZNIFJlYWxtL0NDQS9STU0gc3VwcG9ydCBhbmQgcmVmYWN0b3JpbmcsIHBsdXMgc29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuIE5vIGNvZGUgdG91Y2hlZCBnZXRzIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIG9uIGFtZDY0LiBCb29tLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmaWxlcyBjaGFuZ2VkOiBldmVyeXRoaW5nIGxpc3RlZCwgZnJvbSBgRG9jdW1lbnRhdGlvbi9gIHRvIGBhcmNoL2FybTY0L2AgaW5jbHVkZSBmaWxlcyBhbmQgc291cmNlIGZpbGVzLCB0aGV5IGFyZSBhbGwgY2xlYXJseSBBUk02NC1zcGVjaWZpYy4gTm8gZXhjZXB0aW9ucy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBObyBvdGhlciBmYWN0b3JzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZSBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgbm90IGFwcGxpY2FibGUgdG8gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFNvLCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBudWxsLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZSBjcnlzdGFsIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGFsbCBBUk02NC1zcGVjaWZpYyBLVk0vUk1JL1JlYWxtIGNvZGUgYW5kIERvY3VtZW50YXRpb24sIHdoaWNoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIEFSTTY0IEtWTSBhbmQgQXJtIENvbmZpZGVudGlhbCBDb21wdXRlIEFyY2hpdGVjdHVyZSAoQ0NBIC8gUmVhbG0gTWFuYWdlbWVudCBFeHRlbnNpb24pIGNvZGUgZXhjbHVzaXZlbHksIGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQgYW5kIHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIEFSTTY0IEtWTSBhbmQgQXJtIENvbmZpZGVudGlhbCBDb21wdXRlIEFyY2hpdGVjdHVyZSAoQ0NBIC8gUmVhbG0gTWFuYWdlbWVudCBFeHRlbnNpb24pIGNvZGUgZXhjbHVzaXZlbHksIGFzIHdlbGwgYXMgZG9jdW1lbnRhdGlvbi4gU2luY2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFsbCBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQgYW5kIHVucmVhY2hhYmxlIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMDoxMzwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6MTI6NTEuNjQ4NTE5MjE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzgyNTUzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgQVJNNjQgS1ZNIGFuZCBBcm0gQ29uZmlkZW50aWFsIENvbXB1dGUgQXJjaGl0ZWN0dXJlIChDQ0EgLyBSZWFsbSBNYW5hZ2VtZW50IEV4dGVuc2lvbikgY29kZSBleGNsdXNpdmVseSwgYXMgd2VsbCBhcyBkb2N1bWVudGF0aW9uLiBTaW5jZSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgYWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGV4Y2x1c2l2ZSB0byBhcm02NCBhbmQgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMjo1MS42NDg1MjQ3ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzQyNTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFmOTVkZTk1NGQ0MTNkZjYxZjgzODI3NTg5ZGUwYjJkY2Q1ZWFkZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMDoxMjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggNjg2NDdmZjRiZGQyNC4uMWFmZTNkZjNiOTIzZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTMyNTYsNiArMzI1Niw5IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXFxuIFxcdFxcdFxcdG5lc3RlZDogVkhFLWJhc2VkIG1vZGUgd2l0aCBzdXBwb3J0IGZvciBuZXN0ZWRcXG4gXFx0XFx0XFx0XFx0dmlydHVhbGl6YXRpb24uIFJlcXVpcmVzIGF0IGxlYXN0IEFSTXY4LjRcXG4gXFx0XFx0XFx0XFx0aGFyZHdhcmUgKHdpdGggRkVBVF9OVjIpLlxcbitcXHRcXHRcXHRybW06IFN1cHBvcnQgZm9yIHJ1bm5pbmcgY29uZmlkZW50aWFsIGd1ZXN0cyBpbiBSZWFsbVxcbitcXHRcXHRcXHQgICAgIHdvcmxkIHVzaW5nIFJNTSwgYXMgZGVmaW5lZCBieSBBcm0gQ29uZmlkZW50aWFsXFxuK1xcdFxcdFxcdCAgICAgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSlcXG4gXFxuIFxcdFxcdFxcdERlZmF1bHRzIHRvIFZIRS9uVkhFIGJhc2VkIG9uIGhhcmR3YXJlIHN1cHBvcnQuIFNldHRpbmdcXG4gXFx0XFx0XFx0bW9kZSB0byBcXFwicHJvdGVjdGVkXFxcIiB3aWxsIGRpc2FibGUga2V4ZWMgYW5kIGhpYmVybmF0aW9uXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaFxcbmluZGV4IGEzYzE5MjhiZGY3NDMuLmQzNjBhOGIwNWI4YmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXFxuQEAgLTc5Myw0ICs3OTMsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV9yZXNldF92Y3B1X3BzY2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR2Y3B1X3NldF9yZWcodmNwdSwgMCwgcmVzZXRfc3RhdGUtXFx1MDAzZXIwKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBlbnVtIHJlYWxtX3N0YXRlIGt2bV9yZWFsbV9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRShrdm0tXFx1MDAzZWFyY2gucmVhbG0uc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NldF9yZWFsbV9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIHJlYWxtX3N0YXRlIG5ld19zdGF0ZSlcXG4re1xcbitcXHRXUklURV9PTkNFKGt2bS1cXHUwMDNlYXJjaC5yZWFsbS5zdGF0ZSwgbmV3X3N0YXRlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9pc19jcmVhdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRyZXR1cm4ga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXFx1MDAyNlxcdTAwMjYga3ZtX3JlYWxtX3N0YXRlKGt2bSkgIT0gUkVBTE1fU1RBVEVfTk9ORTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0VNVUxBVEVfSF9fICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDI3ZmUwY2Q1YjJkN2EuLmZiZmQ4NWRjOTk5ZWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTI3LDYgKzI3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9mcHNpbWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fYXNtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3JtaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3ZuY3JfbWFwcGluZy5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfSU5UQ19JTklUSUFMSVpFRFxcbkBAIC02OSw2ICs3MCw3IEBAIGVudW0ga3ZtX21vZGUge1xcbiBcXHRLVk1fTU9ERV9ERUZBVUxULFxcbiBcXHRLVk1fTU9ERV9QUk9URUNURUQsXFxuIFxcdEtWTV9NT0RFX05WLFxcbitcXHRLVk1fTU9ERV9STU0sXFxuIFxcdEtWTV9NT0RFX05PTkUsXFxuIH07XFxuICNpZmRlZiBDT05GSUdfS1ZNXFxuQEAgLTE1MCw2ICsxNTIsMjYgQEAgc3RydWN0IGt2bV92bWlkIHtcXG4gXFx0YXRvbWljNjRfdCBpZDtcXG4gfTtcXG4gXFxuK3N0cnVjdCBrdm1fdmNwdV9vcHMge1xcbitcXHR2b2lkICgqdmNwdV9sb2FkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbitcXHR2b2lkICgqdmNwdV9wdXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK307XFxuK1xcbitzdHJ1Y3Qga3ZtX2dmbl9yYW5nZTtcXG4rc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjO1xcbitcXG4rc3RydWN0IGt2bV92bV9zMl9vcHMge1xcbitcXHRib29sICgqdm1fYWdlX2dmbikoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpO1xcbitcXHRib29sICgqdm1fdGVzdF9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XFxuK1xcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzKShzdHJ1Y3Qga3ZtICprdm0pO1xcbitcXHRpbnQgKCp2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSkoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTY0IG5yX3BhZ2VzKTtcXG4rXFx0dm9pZCAoKnZtX3N0YWdlMl91bm1hcF9yYW5nZSkoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGh5c19hZGRyX3Qgc3RhcnQsIHU2NCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIG1heV9ibG9jayk7XFxuK1xcdGludCAoKnZtX21lbV9hYm9ydCkoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBrdm1fczJfbW11IHtcXG4gXFx0c3RydWN0IGt2bV92bWlkIHZtaWQ7XFxuIFxcbkBAIC0yNTcsNyArMjc5LDYgQEAgc3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0ge1xcbiBcXHRwa3ZtX2hhbmRsZV90IGhhbmRsZTtcXG4gXFx0c3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgdGVhcmRvd25fbWM7XFxuIFxcdHN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHN0YWdlMl90ZWFyZG93bl9tYztcXG4tXFx0Ym9vbCBpc19wcm90ZWN0ZWQ7XFxuIFxcdGJvb2wgaXNfY3JlYXRlZDtcXG4gXFxuIFxcdC8qXFxuQEAgLTMwNiw5ICszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQge1xcbiBcXHRfX05SX0ZHVF9HUk9VUF9JRFNfX1xcbiB9O1xcbiBcXG4rZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB7XFxuK1xcdFZNX05WSEUsXFxuK1xcdFZNX1ZIRSxcXG4rXFx0Vk1fUEtWTSxcXHRcXHQvKiBOb3JtYWwgZ3Vlc3RzIG9uIFBLVk0gKi9cXG4rXFx0TUFSS0VSKF9fVk1fQ09ORklERU5USUFMKSxcXG4rXFx0Vk1fUFJPVEVDVEVEX1BLVk0sXFx0LyogUHJvdGVjdGVkIFZNICovXFxuK1xcdFZNX1JFQUxNLFxcdFxcdC8qIENDQSAqL1xcbitcXHRWTV9GTEFWT1JfTUFYLFxcbit9O1xcbitcXG4gc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0c3RydWN0IGt2bV9zMl9tbXUgbW11O1xcbiBcXG4rXFx0ZW51bSBrdm1fYXJtX3ZtX2ZsYXZvciB2bV9mbGF2b3I7XFxuIFxcdC8qXFxuIFxcdCAqIEZpbmUtR3JhaW5lZCBVTkRFRiwgbWltaWNraW5nIHRoZSBGR1QgbGF5b3V0IGRlZmluZWQgYnkgdGhlXFxuIFxcdCAqIGFyY2hpdGVjdHVyZS4gV2UgdHJhY2sgdGhlbSBnbG9iYWxseSwgYXMgd2UgcHJlc2VudCB0aGVcXG5AQCAtMzE4LDYgKzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuIFxcdCAqL1xcbiBcXHR1NjQgZmd1W19fTlJfRkdUX0dST1VQX0lEU19fXTtcXG4gXFxuK1xcdGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzICp2bV9zMl9vcHM7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBTdGFnZSAyIHBhZ2luZyBzdGF0ZSBmb3IgVk1zIHdpdGggbmVzdGVkIFMyIHVzaW5nIGEgdmlydHVhbFxcbiBcXHQgKiBWTUlELlxcbkBAIC00MTcsMTEgKzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xcbiBcXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIFRMQnMgKi9cXG4gXFx0YXRvbWljX3Qgdm5jcl90bGJfY291bnQ7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcXG4tXFx0ICogdGhlIGFzc29jaWF0ZWQgcEtWTSBpbnN0YW5jZSBpbiB0aGUgaHlwZXJ2aXNvci5cXG4tXFx0ICovXFxuLVxcdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAncGt2bS5oYW5kbGUnIGlzIHVzZWQgdG8gbG9va3VwXFxuK1xcdFxcdCAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSBwa3ZtO1xcbitcXHRcXHRzdHJ1Y3QgcmVhbG0gcmVhbG07XFxuK1xcdH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xcbiBcXHQvKiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gaW5mbyAqL1xcbkBAIC04NDYsNiArODgzLDcgQEAgc3RydWN0IHZuY3JfdGxiO1xcbiBcXG4gc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHRzdHJ1Y3Qga3ZtX2NwdV9jb250ZXh0IGN0eHQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgKnZjcHVfb3BzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogR3Vlc3QgZmxvYXRpbmcgcG9pbnQgc3RhdGVcXG5AQCAtMTM0Niw3ICsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX3VwZGF0ZV9zdG9sZW5fdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBcXG4tYm9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQodm9pZCk7XFxuK2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSk7XFxuIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyICphdHRyKTtcXG4gaW50IGt2bV9hcm1fcHZ0aW1lX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtMTUwNCw5ICsxNTQyLDEzIEBAIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpO1xcbiBcXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfRkxVU0hfUkVNT1RFX1RMQlNfUkFOR0VcXG4gXFxuLSNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pXFx0KGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IChrdm0pLVxcdTAwM2VhcmNoLnBrdm0uaXNfcHJvdGVjdGVkKVxcbisjZGVmaW5lIGt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKVxcdCgoa3ZtKS1cXHUwMDNlYXJjaC52bV9mbGF2b3IgXFx1MDAzZT0gX19WTV9DT05GSURFTlRJQUwpXFxuKyNkZWZpbmUga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pXFx0KChrdm0pLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9PSBWTV9QUk9URUNURURfUEtWTSlcXG4rI2RlZmluZSBrdm1fdm1faXNfcmVhbG0oa3ZtKVxcdFxcdCgoa3ZtKS1cXHUwMDNlYXJjaC52bV9mbGF2b3IgPT0gVk1fUkVBTE0pXFxuIFxcbisjZGVmaW5lIHZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpXFx0a3ZtX3ZtX2lzX2NvbmZpZGVudGlhbCgodmNwdSktXFx1MDAzZWt2bSlcXG4gI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KVxcdFxcdGt2bV92bV9pc19wcm90ZWN0ZWQoKHZjcHUpLVxcdTAwM2Vrdm0pXFxuKyNkZWZpbmUgdmNwdV9pc19yZWModmNwdSlcXHRcXHRrdm1fdm1faXNfcmVhbG0oKHZjcHUpLVxcdTAwM2Vrdm0pXFxuIFxcbiBpbnQga3ZtX2FybV92Y3B1X2ZpbmFsaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGZlYXR1cmUpO1xcbiBib29sIGt2bV9hcm1fdmNwdV9pc19maW5hbGl6ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuaW5kZXggNDFhODY4NzkzOGViNi4uYzJlNGIyOWU2MDVmYyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG5AQCAtOCw5ICs4LDEzIEBAXFxuICNkZWZpbmUgX19BUk02NF9LVk1fUEdUQUJMRV9IX19cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYnRyZWVfdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4rc3RydWN0IGt2bV9zMl9tbXU7XFxuK1xcbiAjZGVmaW5lIEtWTV9QR1RBQkxFX0ZJUlNUX0xFVkVMXFx0XFx0LTFcXG4gI2RlZmluZSBLVk1fUEdUQUJMRV9MQVNUX0xFVkVMXFx0XFx0M1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGt2bS5oXFxuaW5kZXggYmVlYTAwZTY5M2EwYS4uNTRhNjE4ZDg4N2ZhNCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcXG5AQCAtNyw5ICs3LDkgQEBcXG4gI2RlZmluZSBfX0FSTTY0X0tWTV9QS1ZNX0hfX1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FybV9mZmEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1faG9zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcXHUwMDNlXFxuIFxcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBWTXMgdGhhdCBjYW4gY28tZXhpc3QgdW5kZXIgcEtWTS4gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcm1pLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRmNWM3NWEyN2I1Ylxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaFxcbkBAIC0wLDAgKzEsNjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDIzLTIwMjYgQVJNIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fQVNNX0tWTV9STUlfSFxcbisjZGVmaW5lIF9fQVNNX0tWTV9STUlfSFxcbitcXG4rLyoqXFxuKyAqIGVudW0gcmVhbG1fc3RhdGUgLSBTdGF0ZSBvZiBhIFJlYWxtXFxuKyAqXFxuKyAqIE1pcnJvcnMgdGhlIFJNTSdzIFJlYWxtIGxpZmVjeWNsZSBzdGF0ZXMgd2hlcmUgdGhleSBhcmUgbWVhbmluZ2Z1bCB0byBLVk0sXFxuKyAqIHdpdGggUkVBTE1fU1RBVEVfRFlJTkcgYmVpbmcgYSBLVk0taW50ZXJuYWwgc3RhdGUgdXNlZCB0byBwcmV2ZW50IGZ1cnRoZXJcXG4rICogcmVxdWVzdHMgd2hpbGUgdGVhcmRvd24gaXMgaW4gcHJvZ3Jlc3MuIEtWTSBkb2VzIG5vdCB0cmFjayBSRUFMTV9TWVNURU1fT0ZGXFxuKyAqIG9yIFJFQUxNX1pPTUJJRSBzZXBhcmF0ZWx5IGFzIHRoZXkgbmF0dXJhbGx5IGxlYWQgdG8gdGVhcmRvd24uXFxuKyAqL1xcbitlbnVtIHJlYWxtX3N0YXRlIHtcXG4rXFx0LyoqXFxuK1xcdCAqIEBSRUFMTV9TVEFURV9OT05FOlxcbitcXHQgKiAgICAgIFJlYWxtIGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZC4gcm1pX3JlYWxtX2NyZWF0ZSgpIGhhcyBub3RcXG4rXFx0ICogICAgICB5ZXQgYmVlbiBjYWxsZWQuXFxuK1xcdCAqL1xcbitcXHRSRUFMTV9TVEFURV9OT05FLFxcbitcXHQvKipcXG4rXFx0ICogQFJFQUxNX1NUQVRFX05FVzpcXG4rXFx0ICogICAgICBSZWFsbSBpcyB1bmRlciBjb25zdHJ1Y3Rpb24sIHJtaV9yZWFsbV9jcmVhdGUoKSBoYXMgYmVlblxcbitcXHQgKiAgICAgIGNhbGxlZCwgYnV0IGl0IGlzIG5vdCB5ZXQgYWN0aXZhdGVkLiBQYWdlcyBtYXkgYmUgcG9wdWxhdGVkLlxcbitcXHQgKi9cXG4rXFx0UkVBTE1fU1RBVEVfTkVXLFxcbitcXHQvKipcXG4rXFx0ICogQFJFQUxNX1NUQVRFX0FDVElWRTpcXG4rXFx0ICogICAgICBSZWFsbSBoYXMgYmVlbiBjcmVhdGVkIGFuZCBpcyBlbGlnaWJsZSBmb3IgZXhlY3V0aW9uIHdpdGhcXG4rXFx0ICogICAgICBybWlfcmVjX2VudGVyKCkuIFBhZ2VzIG1heSBubyBsb25nZXIgYmUgcG9wdWxhdGVkIHdpdGhcXG4rXFx0ICogICAgICBybWlfZGF0YV9jcmVhdGUoKS5cXG4rXFx0ICovXFxuK1xcdFJFQUxNX1NUQVRFX0FDVElWRSxcXG4rXFx0LyoqXFxuK1xcdCAqIEBSRUFMTV9TVEFURV9EWUlORzpcXG4rXFx0ICogICAgICBSZWFsbSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQgb3IgaGFzIGFscmVhZHkgYmVlblxcbitcXHQgKiAgICAgIGRlc3Ryb3llZC5cXG4rXFx0ICovXFxuK1xcdFJFQUxNX1NUQVRFX0RZSU5HLFxcbitcXHQvKipcXG4rXFx0ICogQFJFQUxNX1NUQVRFX0RFQUQ6XFxuK1xcdCAqICAgICAgUmVhbG0gaGFzIGJlZW4gZGVzdHJveWVkLlxcbitcXHQgKi9cXG4rXFx0UkVBTE1fU1RBVEVfREVBRFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByZWFsbSAtIEFkZGl0aW9uYWwgcGVyIFZNIGRhdGEgZm9yIGEgUmVhbG1cXG4rICpcXG4rICogQHN0YXRlOiBUaGUgbGlmZXRpbWUgc3RhdGUgbWFjaGluZSBmb3IgdGhlIHJlYWxtXFxuKyAqL1xcbitzdHJ1Y3QgcmVhbG0ge1xcbitcXHRlbnVtIHJlYWxtX3N0YXRlIHN0YXRlO1xcbit9O1xcbitcXG4rdm9pZCBrdm1faW5pdF9ybWkodm9pZCk7XFxuK1xcbisjZW5kaWYgLyogX19BU01fS1ZNX1JNSV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcXG5pbmRleCBiNTQ2NzAzYzNhYjlhLi45MmNlYzQyOTUyZjQyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcXG5AQCAtODcsNiArODcsNyBAQCB2b2lkIF9faHlwX3Jlc2V0X3ZlY3RvcnModm9pZCk7XFxuIGJvb2wgaXNfa3ZtX2FybV9pbml0aWFsaXNlZCh2b2lkKTtcXG4gXFxuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcHJvdGVjdGVkX21vZGVfaW5pdGlhbGl6ZWQpO1xcbitERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0Uoa3ZtX3JtaV9pc19hdmFpbGFibGUpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3Brdm1faW5pdGlhbGl6ZWQodm9pZClcXG4ge1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXFxuaW5kZXggNTk2MTJkMmYyNzdjMS4uZWQzY2YzMGViMDZlNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXFxuQEAgLTE2LDcgKzE2LDcgQEAgQ0ZMQUdTX2hhbmRsZV9leGl0Lm8gKz0gLVduby1vdmVycmlkZS1pbml0XFxuIGt2bS15ICs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXFxcXG4gXFx0IGluamVjdF9mYXVsdC5vIHZhX2xheW91dC5vIGhhbmRsZV9leGl0Lm8gY29uZmlnLm8gXFxcXFxcbiBcXHQgZ3Vlc3QubyBkZWJ1Zy5vIHJlc2V0Lm8gc3lzX3JlZ3MubyBzdGFja3RyYWNlLm8gXFxcXFxcbi1cXHQgdmdpYy1zeXMtcmVnLXYzLm8gZnBzaW1kLm8gcGt2bS5vIFxcXFxcXG4rXFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBybWkubyBcXFxcXFxuIFxcdCBhcmNoX3RpbWVyLm8gdHJuZy5vIHZtaWQubyBlbXVsYXRlLW5lc3RlZC5vIG5lc3RlZC5vIGF0Lm8gXFxcXFxcbiBcXHQgdmdpYy92Z2ljLm8gdmdpYy92Z2ljLWluaXQubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xcbmluZGV4IDZhYzMzMjFmNGM1NzUuLjNlZGRmNDRmN2IxZGQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXFxuQEAgLTU2LDExICs1NiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fYXJjaF90aW1lcl9nZXRfaXJxX2ZsYWdzKHZvaWQpXFxuIFxcdHJldHVybiBrdm1fdmdpY19nbG9iYWxfc3RhdGUubm9faHdfZGVhY3RpdmF0aW9uID8gVkdJQ19JUlFfU1dfUkVTQU1QTEUgOiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcmVhbG1fdGltZXJfZ2V0X2lycV9mbGFncyh2b2lkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFJNSV9SRUNfRU5URVIgcmVqZWN0cyBMUnMgd2l0aCB0aGUgSFcgYml0IHNldCwgc28gdXNlIHRoZSBleGlzdGluZ1xcbitcXHQgKiBzb2Z0d2FyZSByZXNhbXBsaW5nIG1lY2hhbmlzbSBmb3IgUmVhbG0gdGltZXIgaW50ZXJydXB0cy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBWR0lDX0lSUV9TV19SRVNBTVBMRTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wcyA9IHtcXG4gXFx0LmdldF9mbGFnc1xcdCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3MsXFxuIFxcdC5nZXRfaW5wdXRfbGV2ZWwgPSBrdm1fYXJjaF90aW1lcl9nZXRfaW5wdXRfbGV2ZWwsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9vcHMgcmVhbG1fdGltZXJfaXJxX29wcyA9IHtcXG4rXFx0LmdldF9mbGFnc1xcdCA9IGt2bV9yZWFsbV90aW1lcl9nZXRfaXJxX2ZsYWdzLFxcbitcXHQuZ2V0X2lucHV0X2xldmVsID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lucHV0X2xldmVsLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0ge1xcbiBcXHQuZ2V0X2lucHV0X2xldmVsID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lucHV0X2xldmVsLFxcbiBcXHQucXVldWVfaXJxX3VubG9jayA9IHZnaWNfdjVfcHBpX3F1ZXVlX2lycV91bmxvY2ssXFxuQEAgLTEwNzksNyArMTA5Myw3IEBAIHN0YXRpYyB2b2lkIHRpbWVyX2NvbnRleHRfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0aW1lcmlkKVxcbiBcXG4gXFx0Y3R4dC1cXHUwMDNldGltZXJfaWQgPSB0aW1lcmlkO1xcbiBcXG4tXFx0aWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4rXFx0aWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSkge1xcbiBcXHRcXHRpZiAodGltZXJpZCA9PSBUSU1FUl9WVElNRVIpXFxuIFxcdFxcdFxcdGN0eHQtXFx1MDAzZW9mZnNldC52bV9vZmZzZXQgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnRpbWVyX2RhdGEudm9mZnNldDtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xMTEwLDcgKzExMjQsNyBAQCB2b2lkIGt2bV90aW1lcl92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR0aW1lcl9jb250ZXh0X2luaXQodmNwdSwgaSk7XFxuIFxcbiBcXHQvKiBTeW5jaHJvbml6ZSBvZmZzZXRzIGFjcm9zcyB0aW1lcnMgb2YgYSBWTSBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCAqL1xcbi1cXHRpZiAoIXZjcHVfaXNfcHJvdGVjdGVkKHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICghdmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICF0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZNX0NPVU5URVJfT0ZGU0VULCBcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmZsYWdzKSkge1xcbiBcXHRcXHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfdnRpbWVyKHZjcHUpLCBrdm1fcGh5c190aW1lcl9yZWFkKCkpO1xcbiBcXHRcXHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfcHRpbWVyKHZjcHUpLCAwKTtcXG5AQCAtMTYwOSw4ICsxNjIzLDEyIEBAIGludCBrdm1fdGltZXJfZW5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGdldF90aW1lcl9tYXAodmNwdSwgXFx1MDAyNm1hcCk7XFxuIFxcbi1cXHRvcHMgPSB2Z2ljX2lzX3Y1KHZjcHUtXFx1MDAzZWt2bSkgPyBcXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzX3ZnaWNfdjUgOlxcbi1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzO1xcbitcXHRpZiAodmNwdV9pc19yZWModmNwdSkpXFxuK1xcdFxcdG9wcyA9IFxcdTAwMjZyZWFsbV90aW1lcl9pcnFfb3BzO1xcbitcXHRlbHNlIGlmICh2Z2ljX2lzX3Y1KHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdG9wcyA9IFxcdTAwMjZhcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvcHMgPSBcXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzO1xcbiBcXG4gXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBucl90aW1lcnModmNwdSk7IGkrKylcXG4gXFx0XFx0a3ZtX3ZnaWNfc2V0X2lycV9vcHModmNwdSwgdGltZXJfaXJxKHZjcHVfZ2V0X3RpbWVyKHZjcHUsIGkpKSwgb3BzKTtcXG5AQCAtMTczNiw3ICsxNzU0LDcgQEAgaW50IGt2bV92bV9pb2N0bF9zZXRfY291bnRlcl9vZmZzZXQoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRpZiAob2Zmc2V0LVxcdTAwM2VyZXNlcnZlZClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxcbitcXHRpZiAoa3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA4YjA4MDgwNGJjOTBiLi4zZmU1YTRmNzc3MzhlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5AQCAtNDIsNiArNDIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fcGt2bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3JtaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NlY3Rpb25zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc3RhY2t0cmFjZS9udmhlLmhcXHUwMDNlXFxuIFxcbkBAIC03NCw2ICs3NSw4IEBAIHN0cnVjdCBrdm1faW9jdGxfY2FwX21hcCB7XFxuIFxcdGxvbmcgZXh0O1xcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgKmFybTY0X3ZjcHVfb3BzW1ZNX0ZMQVZPUl9NQVhdO1xcbitcXG4gLyogTWFrZSBLVk1fQ0FQX05SX1ZDUFVTIHRoZSByZWZlcmVuY2UgZm9yIGZlYXR1cmVzIHdlIGFsd2F5cyBzdXBwb3J0ZWQgKi9cXG4gI2RlZmluZSBLVk1fQ0FQX0FSTV9CQVNJQ1xcdEtWTV9DQVBfTlJfVkNQVVNcXG4gXFxuQEAgLTExMSw2ICsxMTQsOCBAQCBsb25nIGt2bV9nZXRfY2FwX2Zvcl9rdm1faW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCBsb25nICpleHQpXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbitERUZJTkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcm1pX2lzX2F2YWlsYWJsZSk7XFxuK1xcbiBERUNMQVJFX0tWTV9IWVBfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1faHlwX3ZlY3Rvcik7XFxuIFxcbiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1fYXJtX2h5cF9zdGFja19iYXNlKTtcXG5AQCAtMTMyLDYgKzEzNywyNSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHJldHVybiBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUodmNwdSkgPT0gSU5fR1VFU1RfTU9ERTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wga3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGxvbmcgZXh0KVxcbit7XFxuK1xcdHN3aXRjaCAoZXh0KSB7XFxuK1xcdGNhc2UgS1ZNX0NBUF9JUlFDSElQOlxcbitcXHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0k6XFxuK1xcdGNhc2UgS1ZNX0NBUF9BUk1fUFNDSV8wXzI6XFxuK1xcdGNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX01BWF9WQ1BVUzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX01BWF9WQ1BVX0lEOlxcbitcXHRjYXNlIEtWTV9DQVBfTVNJX0RFVklEOlxcbitcXHRjYXNlIEtWTV9DQVBfQVJNX1ZNX0lQQV9TSVpFOlxcbitcXHRjYXNlIEtWTV9DQVBfQVJNX1BUUkFVVEhfQUREUkVTUzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0dFTkVSSUM6XFxuK1xcdGNhc2UgS1ZNX0NBUF9TWU5DX01NVTpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBpbnQga3ZtX3ZtX2lvY3RsX2VuYWJsZV9jYXAoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9lbmFibGVfY2FwICpjYXApXFxuIHtcXG5AQCAtMTQzLDYgKzE2Nyw5IEBAIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3Brdm1fZXh0X2FsbG93ZWQoa3ZtLCBjYXAtXFx1MDAzZWNhcCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0aWYgKGt2bSBcXHUwMDI2XFx1MDAyNiBrdm1fdm1faXNfcmVhbG0oa3ZtKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGNhcC1cXHUwMDNlY2FwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRzd2l0Y2ggKGNhcC1cXHUwMDNlY2FwKSB7XFxuIFxcdGNhc2UgS1ZNX0NBUF9BUk1fTklTVl9UT19VU0VSOlxcbiBcXHRcXHRyID0gMDtcXG5AQCAtMjE0LDYgKzI0MSwyNiBAQCBzdGF0aWMgaW50IGt2bV9hcm1fZGVmYXVsdF9tYXhfdmNwdXModm9pZClcXG4gXFx0cmV0dXJuIHZnaWNfcHJlc2VudCA/IGt2bV92Z2ljX2dldF9tYXhfdmNwdXMoKSA6IEtWTV9NQVhfVkNQVVM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3ZtX2luaXRfdm1fZmxhdm9yKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbit7XFxuK1xcdGJvb2wgcHJvdGVjdGVkID0gdHlwZSBcXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQ7XFxuK1xcbitcXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcXG4rXFx0XFx0aWYgKHByb3RlY3RlZClcXG4rXFx0XFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1BST1RFQ1RFRF9QS1ZNO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGt2bS1cXHUwMDNlYXJjaC52bV9mbGF2b3IgPSBWTV9QS1ZNO1xcbitcXHR9IGVsc2UgaWYgKHByb3RlY3RlZCkge1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fSBlbHNlIGlmIChoYXNfdmhlKCkpIHtcXG4rXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1ZIRTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICoga3ZtX2FyY2hfaW5pdF92bSAtIGluaXRpYWxpemVzIGEgVk0gZGF0YSBzdHJ1Y3R1cmVcXG4gICogQGt2bTpcXHRwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0XFxuQEAgLTIzNiw2ICsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4gI2VuZGlmXFxuIFxcbitcXHRyZXQgPSBrdm1faW5pdF92bV9mbGF2b3Ioa3ZtLCB0eXBlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGt2bV9pbml0X25lc3RlZChrdm0pO1xcbiBcXG4gXFx0cmV0ID0ga3ZtX3NoYXJlX2h5cChrdm0sIGt2bSArIDEpO1xcbkBAIC0yNjAsOSArMzExLDYgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuIFxcdFxcdHJldCA9IHBrdm1faW5pdF9ob3N0X3ZtKGt2bSwgdHlwZSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX3VuaW5pdF9tbXU7XFxuLVxcdH0gZWxzZSBpZiAodHlwZSBcXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBlcnJfdW5pbml0X21tdTtcXG4gXFx0fVxcbiBcXG4gXFx0a3ZtX3ZnaWNfZWFybHlfaW5pdChrdm0pO1xcbkBAIC0zODEsNiArNDI5LDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFrdm1fcGt2bV9leHRfYWxsb3dlZChrdm0sIGV4dCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKGt2bSBcXHUwMDI2XFx1MDAyNiBrdm1fdm1faXNfcmVhbG0oa3ZtKSBcXHUwMDI2XFx1MDAyNiAha3ZtX3JlYWxtX2V4dF9hbGxvd2VkKGV4dCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0c3dpdGNoIChleHQpIHtcXG4gXFx0Y2FzZSBLVk1fQ0FQX0lSUUNISVA6XFxuIFxcdFxcdHIgPSB2Z2ljX3ByZXNlbnQ7XFxuQEAgLTQ0Nyw3ICs0OTgsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRcXHRyID0gc3lzdGVtX3N1cHBvcnRzX210ZSgpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX1NURUFMX1RJTUU6XFxuLVxcdFxcdHIgPSBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKTtcXG4rXFx0XFx0ciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZChrdm0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDFfMzJCSVQ6XFxuIFxcdFxcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpO1xcbkBAIC01NDgsNiArNTk5LDggQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VtdXRleCk7XFxuICNlbmRpZlxcbiBcXG4rXFx0dmNwdS1cXHUwMDNlYXJjaC52Y3B1X29wcyA9IGFybTY0X3ZjcHVfb3BzW3ZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV9mbGF2b3JdO1xcbitcXG4gXFx0LyogRm9yY2UgdXNlcnMgdG8gY2FsbCBLVk1fQVJNX1ZDUFVfSU5JVCAqL1xcbiBcXHR2Y3B1X2NsZWFyX2ZsYWcodmNwdSwgVkNQVV9JTklUSUFMSVpFRCk7XFxuIFxcbkBAIC02NjIsMTQgKzcxNSwxMSBAQCBzdGF0aWMgYm9vbCBrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIHNpbmdsZV90YXNrX3J1bm5pbmcoKTtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbitzdGF0aWMgdm9pZCB2Y3B1X3ByZXBhcmVfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11O1xcbiBcXHRpbnQgKmxhc3RfcmFuO1xcbiBcXG4tXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbi1cXHRcXHRnb3RvIG5vbW11O1xcbi1cXG4gXFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxcbiBcXHRcXHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcXG4gXFxuQEAgLTY5OSwxMCArNzQ5LDMwIEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFx0XFx0a3ZtX2NhbGxfaHlwKF9fa3ZtX2ZsdXNoX2NwdV9jb250ZXh0LCBtbXUpO1xcbiBcXHRcXHQqbGFzdF9yYW4gPSB2Y3B1LVxcdTAwM2V2Y3B1X2lkeDtcXG4gXFx0fVxcbit9XFxuIFxcbi1ub21tdTpcXG4tXFx0dmNwdS1cXHUwMDNlY3B1ID0gY3B1O1xcbitzdGF0aWMgdm9pZCB2Y3B1X3NldF93ZnhfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHZjcHUpKVxcbitcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhjcl9lbDIgXFx1MDAyNj0gfkhDUl9UV0U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0U7XFxuK1xcbitcXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3aSh2Y3B1KSlcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5oY3JfZWwyIFxcdTAwMjY9IH5IQ1JfVFdJO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMiB8PSBIQ1JfVFdJO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2Y3B1X2xvYWRfcHZ0aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuK1xcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbit9XFxuIFxcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4re1xcbitcXHR2Y3B1X3ByZXBhcmVfbW11KHZjcHUpO1xcbiBcXHQvKlxcbiBcXHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcXG4gXFx0ICogaW50ZXJydXB0IGRlYWN0aXZhdGlvbiBpbiBuZXN0ZWQgc3RhdGUgKGUuZy4gdGltZXIgaW50ZXJydXB0KS5cXG5AQCAtNzExLDMyICs3ODEsNjggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbiBcXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xcbiBcXHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xcbiBcXHRrdm1fdmNwdV9sb2FkX2ZndCh2Y3B1KTtcXG4tXFx0aWYgKGhhc192aGUoKSlcXG4tXFx0XFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XFxuK1xcdGt2bV92Y3B1X2xvYWRfdmhlKHZjcHUpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XFxuIFxcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xcbi1cXHRpZiAoa3ZtX2FybV9pc19wdnRpbWVfZW5hYmxlZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuLVxcdFxcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xcbiBcXG4tXFx0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2UodmNwdSkpXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMiBcXHUwMDI2PSB+SENSX1RXRTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcXG4rXFx0dmNwdV9sb2FkX3B2dGltZSh2Y3B1KTtcXG4rXFx0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xcbitcXHR2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTtcXG4rfVxcbiBcXG4tXFx0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXFxuLVxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMiBcXHUwMDI2PSB+SENSX1RXSTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXSTtcXG4rc3RhdGljIHZvaWQgbnZoZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbit7XFxuK1xcdHZjcHVfcHJlcGFyZV9tbXUodmNwdSk7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxcbitcXHQgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLlxcbitcXHQgKi9cXG4rXFx0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZnaWNfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XFxuK1xcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XFxuIFxcbitcXHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xcbitcXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XFxuIFxcdHZjcHVfc2V0X3BhdXRoX3RyYXBzKHZjcHUpO1xcbit9XFxuIFxcbi1cXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcXG4tXFx0XFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3ZjcHVfbG9hZCxcXG4tXFx0XFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gucGt2bS5oYW5kbGUsXFxuLVxcdFxcdFxcdFxcdCAgdmNwdS1cXHUwMDNldmNwdV9pZHgsIHZjcHUtXFx1MDAzZWFyY2guaGNyX2VsMik7XFxuLVxcdFxcdGt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsXFxuLVxcdFxcdFxcdCAgICAgXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XFxuLVxcdH1cXG4rc3RhdGljIHZvaWQgcGt2bV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxcbitcXHQgKiBpbnRlcnJ1cHQgZGVhY3RpdmF0aW9uIGluIG5lc3RlZCBzdGF0ZSAoZS5nLiB0aW1lciBpbnRlcnJ1cHQpLlxcbitcXHQgKi9cXG4rXFx0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZnaWNfbG9hZCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XFxuK1xcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XFxuK1xcbitcXHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xcbitcXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XFxuK1xcbitcXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLFxcbitcXHRcXHRcXHQgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSxcXG4rXFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCwgdmNwdS1cXHUwMDNlYXJjaC5oY3JfZWwyKTtcXG4rXFx0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19yZXN0b3JlX3ZtY3JfYXBycyxcXG4rXFx0XFx0ICAgICBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52Z2ljX2NwdS52Z2ljX3YzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVhbG1fdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4re1xcbitcXHRrdm1fdGltZXJfdmNwdV9sb2FkKHZjcHUpO1xcbitcXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xcbitcXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4re1xcbitcXHR2Y3B1LVxcdTAwM2VjcHUgPSBjcHU7XFxuK1xcdHZjcHUtXFx1MDAzZWFyY2gudmNwdV9vcHMtXFx1MDAzZXZjcHVfbG9hZCh2Y3B1LCBjcHUpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzKSlcXG4gXFx0XFx0dmNwdV9zZXRfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xcbkBAIC03NDQsMjggKzg1MCw1MCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuIFxcdHZjcHUtXFx1MDAzZWFyY2gucGlkID0gcGlkX25yKHZjcHUtXFx1MDAzZXBpZCk7XFxuIH1cXG4gXFxuLXZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkge1xcbi1cXHRcXHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gudmdpY19jcHUudmdpY192Myk7XFxuLVxcdFxcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XFxuLVxcbi1cXHRcXHQvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovXFxuLVxcdFxcdGlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbi1cXHRcXHRcXHR2Y3B1X3NldF9mbGFnKHZjcHUsIFBLVk1fSE9TVF9TVEFURV9ESVJUWSk7XFxuLVxcdH1cXG4tXFxuIFxcdGt2bV92Y3B1X3B1dF9kZWJ1Zyh2Y3B1KTtcXG4gXFx0a3ZtX2FyY2hfdmNwdV9wdXRfZnAodmNwdSk7XFxuLVxcdGlmIChoYXNfdmhlKCkpXFxuLVxcdFxcdGt2bV92Y3B1X3B1dF92aGUodmNwdSk7XFxuK1xcdGt2bV92Y3B1X3B1dF92aGUodmNwdSk7XFxuIFxcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcXG4gXFx0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xcbiBcXHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ob3N0KHZjcHUpO1xcbiBcXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXFxuIFxcdFxcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XFxuIFxcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcXG4rfVxcbiBcXG4rc3RhdGljIHZvaWQgbnZoZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0a3ZtX3ZjcHVfcHV0X2RlYnVnKHZjcHUpO1xcbitcXHRrdm1fYXJjaF92Y3B1X3B1dF9mcCh2Y3B1KTtcXG4rXFx0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xcbitcXHRrdm1fdmdpY19wdXQodmNwdSk7XFxuK1xcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7XFxuK1xcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19zYXZlX2FwcnMsIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xcbitcXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9wdXQpO1xcbitcXG4rXFx0LyogX19wa3ZtX3ZjcHVfcHV0IGltcGxpZXMgYSBzeW5jIG9mIHRoZSBzdGF0ZSAqL1xcbitcXHRpZiAoIWt2bV92bV9pc19wcm90ZWN0ZWQodmNwdS1cXHUwMDNla3ZtKSlcXG4rXFx0XFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpO1xcbitcXG4rXFx0bnZoZV92Y3B1X3B1dCh2Y3B1KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVhbG1fdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcXG4rXFx0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHR2Y3B1LVxcdTAwM2VhcmNoLnZjcHVfb3BzLVxcdTAwM2V2Y3B1X3B1dCh2Y3B1KTtcXG4gXFx0dmNwdV9jbGVhcl9vbl91bnN1cHBvcnRlZF9jcHUodmNwdSk7XFxuIFxcdHZjcHUtXFx1MDAzZWNwdSA9IC0xO1xcbiB9XFxuQEAgLTE4NTIsNiArMTk4MCwxOCBAQCBzdGF0aWMgaW50IGt2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0cmV0dXJuIF9fa3ZtX2FybV92Y3B1X3NldF9ldmVudHModmNwdSwgZXZlbnRzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmVhbG0gVkNQVXMgY2FuIGJlIGZpbmFsaXplZCBhZnRlciB0aGUgUmVhbG0gZGVzY3JpcHRvciBpcyBjcmVhdGVkLlxcbisgKiBBbGxvdyB0aGUgcmVnaXN0ZXIgbGlzdCBmb3IgUkVDcyBiZWZvcmUgdGhlIFZDUFVzIGFyZSBmaW5hbGl6ZWQsIGJ1dFxcbisgKiBhZnRlciB0aGUgU1ZFIGlzIGZpbmFsaXplZC5cXG4rICovXFxuK3N0YXRpYyBib29sIGt2bV9hcm1fdmNwdV9yZWdfbGlzdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpZiAoa3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZCh2Y3B1KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KTtcXG4rfVxcbitcXG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbkBAIC0xOTA3LDcgKzIwNDcsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0ciA9IC1FUEVSTTtcXG4tXFx0XFx0aWYgKCFrdm1fYXJtX3ZjcHVfaXNfZmluYWxpemVkKHZjcHUpKVxcbitcXHRcXHRpZiAoIWt2bV9hcm1fdmNwdV9yZWdfbGlzdF9hbGxvd2VkKHZjcHUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdHIgPSAtRUZBVUxUO1xcbkBAIC0yMTA1LDYgKzIyNDUsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHZoZV92Y3B1X29wcyA9IHtcXG4rXFx0LnZjcHVfbG9hZCA9IHZoZV92Y3B1X2xvYWQsXFxuK1xcdC52Y3B1X3B1dCA9IHZoZV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIG52aGVfdmNwdV9vcHMgPSB7XFxuK1xcdC52Y3B1X2xvYWQgPSBudmhlX3ZjcHVfbG9hZCxcXG4rXFx0LnZjcHVfcHV0ID0gbnZoZV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHBrdm1fdmNwdV9vcHMgPSB7XFxuK1xcdC52Y3B1X2xvYWQgPSBwa3ZtX3ZjcHVfbG9hZCxcXG4rXFx0LnZjcHVfcHV0ID0gcGt2bV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHJlYWxtX3ZjcHVfb3BzID0ge1xcbitcXHQudmNwdV9sb2FkID0gcmVhbG1fdmNwdV9sb2FkLFxcbitcXHQudmNwdV9wdXQgPSByZWFsbV92Y3B1X3B1dCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tdID0ge1xcbitcXHRbVk1fVkhFXSA9IFxcdTAwMjZ2aGVfdmNwdV9vcHMsXFxuK1xcdFtWTV9OVkhFXSA9IFxcdTAwMjZudmhlX3ZjcHVfb3BzLFxcbitcXHRbVk1fUEtWTV0gPSBcXHUwMDI2cGt2bV92Y3B1X29wcyxcXG4rXFx0W1ZNX1BST1RFQ1RFRF9QS1ZNXSA9IFxcdTAwMjZwa3ZtX3ZjcHVfb3BzLFxcbitcXHRbVk1fUkVBTE1dID0gXFx1MDAyNnJlYWxtX3ZjcHVfb3BzLFxcbit9O1xcbitcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbnZoZV9wZXJjcHVfc2l6ZSh2b2lkKVxcbiB7XFxuIFxcdHJldHVybiAodW5zaWduZWQgbG9uZylDSE9PU0VfTlZIRV9TWU0oX19wZXJfY3B1X2VuZCkgLVxcbkBAIC0zMDUwLDYgKzMyMTgsOCBAQCBzdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZClcXG4gXFxuIFxcdGluX2h5cF9tb2RlID0gaXNfa2VybmVsX2luX2h5cF9tb2RlKCk7XFxuIFxcbitcXHRrdm1faW5pdF9ybWkoKTtcXG4rXFxuIFxcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkgfHxcXG4gXFx0ICAgIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfV09SS0FST1VORF8xNTA4NDEyKSlcXG4gXFx0XFx0a3ZtX2luZm8oXFxcIkd1ZXN0cyB3aXRob3V0IHJlcXVpcmVkIENQVSBlcnJhdHVtIHdvcmthcm91bmRzIGNhbiBkZWFkbG9jayBzeXN0ZW0hXFxcXG5cXFwiIFxcXFxcXG5AQCAtMzE1NSw2ICszMzI1LDExIEBAIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2t2bV9tb2RlX2NmZyhjaGFyICphcmcpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoc3RyY21wKGFyZywgXFxcInJtbVxcXCIpID09IDAgXFx1MDAyNlxcdTAwMjYgIVdBUk5fT04oIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKSkge1xcbitcXHRcXHRrdm1fbW9kZSA9IEtWTV9NT0RFX1JNTTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIGVhcmx5X3BhcmFtKFxcXCJrdm0tYXJtLm1vZGVcXFwiLCBlYXJseV9rdm1fbW9kZV9jZmcpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ndWVzdC5jIGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xcbmluZGV4IGIwMWQ2NjIyYjg3MjAuLjZiZWM3M2QxZWUwNTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmNcXG5AQCAtNTk4LDggKzU5OCwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fc3ZlX3JlZ3MoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAoIXZjcHVfaGFzX3N2ZSh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHQvKiBQb2xpY2VkIGJ5IEtWTV9HRVRfUkVHX0xJU1Q6ICovXFxuLVxcdFdBUk5fT04oIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKTtcXG4rXFx0aWYgKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSlcXG4rXFx0XFx0cmV0dXJuIDE7IC8qIEtWTV9SRUdfQVJNNjRfU1ZFX1ZMUyAqL1xcbitcXG4rXFx0aWYgKGt2bV92bV9pc19yZWFsbSh2Y3B1LVxcdTAwM2Vrdm0pKVxcbitcXHRcXHRyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXFxuIFxcbiBcXHRyZXR1cm4gc2xpY2VzICogKFNWRV9OVU1fUFJFR1MgKyBTVkVfTlVNX1pSRUdTICsgMSAvKiBGRlIgKi8pXFxuIFxcdFxcdCsgMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXFxuQEAgLTYxNiw5ICs2MTksNiBAQCBzdGF0aWMgaW50IGNvcHlfc3ZlX3JlZ19pbmRpY2VzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0aWYgKCF2Y3B1X2hhc19zdmUodmNwdSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogUG9saWNlZCBieSBLVk1fR0VUX1JFR19MSVNUOiAqL1xcbi1cXHRXQVJOX09OKCFrdm1fYXJtX3ZjcHVfc3ZlX2ZpbmFsaXplZCh2Y3B1KSk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBFbnVtZXJhdGUgdGhpcyBmaXJzdCwgc28gdGhhdCB1c2Vyc3BhY2UgY2FuIHNhdmUvcmVzdG9yZSBpblxcbiBcXHQgKiB0aGUgb3JkZXIgcmVwb3J0ZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDpcXG5AQCAtNjI4LDYgKzYyOCwxMiBAQCBzdGF0aWMgaW50IGNvcHlfc3ZlX3JlZ19pbmRpY2VzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdCsrbnVtX3JlZ3M7XFxuIFxcbitcXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKVxcbitcXHRcXHRyZXR1cm4gbnVtX3JlZ3M7XFxuK1xcbitcXHRpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiBudW1fcmVncztcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzbGljZXM7IGkrKykge1xcbiBcXHRcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2MgU1ZFX05VTV9aUkVHUzsgbisrKSB7XFxuIFxcdFxcdFxcdHJlZyA9IEtWTV9SRUdfQVJNNjRfU1ZFX1pSRUcobiwgaSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uY1xcbmluZGV4IDQ1OWJkOWViN2U0YmMuLjA5OTYxYzAwNTZmMmIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jXFxuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3Brdm1faHlwX3ZtKHN0cnVjdCBrdm0gKmhvc3Rfa3ZtLCBzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSxcXG4gXFxuIFxcdGh5cF92bS1cXHUwMDNlaG9zdF9rdm0gPSBob3N0X2t2bTtcXG4gXFx0aHlwX3ZtLVxcdTAwM2Vrdm0uY3JlYXRlZF92Y3B1cyA9IG5yX3ZjcHVzO1xcbi1cXHRoeXBfdm0tXFx1MDAzZWt2bS5hcmNoLnBrdm0uaXNfcHJvdGVjdGVkID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLVxcdTAwM2VhcmNoLnBrdm0uaXNfcHJvdGVjdGVkKTtcXG4rXFx0aHlwX3ZtLVxcdTAwM2Vrdm0uYXJjaC52bV9mbGF2b3IgPSBSRUFEX09OQ0UoaG9zdF9rdm0tXFx1MDAzZWFyY2gudm1fZmxhdm9yKTtcXG4gXFx0aHlwX3ZtLVxcdTAwM2Vrdm0uYXJjaC5mbGFncyA9IDA7XFxuIFxcdHBrdm1faW5pdF9mZWF0dXJlc19mcm9tX2hvc3QoaHlwX3ZtLCBob3N0X2t2bSk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xcbmluZGV4IGI3NGRkNWNlMWVmZDMuLmY0ODI1M2I5ZDg4YjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BndGFibGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zdGFnZTJfcGd0YWJsZS5oXFx1MDAzZVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jIGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXFxuaW5kZXggYjExYjg4MjFjOWZiYy4uMmIxZTZmZGViNGQ1YyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmNcXG5AQCAtNDE0LDE0ICs0MTQsMTQgQEAgdm9pZCBrdm1fYXJtX3RlYXJkb3duX2h5cGVyY2FsbHMoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gaW50IGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4gQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpO1xcbitcXHRyZXR1cm4gdmNwdV9pc19yZWModmNwdSkgPyAwIDogQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpO1xcbiB9XFxuIFxcbiBpbnQga3ZtX2FybV9jb3B5X2Z3X3JlZ19pbmRpY2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpKyspIHtcXG4gXFx0XFx0aWYgKHB1dF91c2VyKGt2bV9hcm1fZndfcmVnX2lkc1tpXSwgdWluZGljZXMrKykpXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcXG5pbmRleCBkNmM0ZmMxNmY4Nzk1Li5kNjFhM2ZmMDRmYWJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmNcXG5AQCAtMzE3LDYgKzMxNyw3IEBAIHZvaWQga3ZtX2luamVjdF9zaXplX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gICovXFxuIHZvaWQga3ZtX2luamVjdF91bmRlZmluZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuK1xcdEtWTV9CVUcodmNwdV9pc19yZWModmNwdSksIHZjcHUtXFx1MDAzZWt2bSwgXFxcIlVuZXhwZWN0ZWQgdW5kZWZpbmVkIGV4Y2VwdGlvbiBpbmplY3Rpb24gdG8gUkVDXFxcIik7XFxuIFxcdGlmICh2Y3B1X2VsMV9pc18zMmJpdCh2Y3B1KSlcXG4gXFx0XFx0aW5qZWN0X3VuZGVmMzIodmNwdSk7XFxuIFxcdGVsc2VcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW1pby5jIGIvYXJjaC9hcm02NC9rdm0vbW1pby5jXFxuaW5kZXggZDFjM2EzNTJkNWEyMi4uYmJjZjUyZjAxZTkxMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbWlvLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9tbWlvLmNcXG5AQCAtMTY4LDE0ICsxNjgsMTQgQEAgaW50IGlvX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGZhdWx0X2lwYSlcXG4gXFx0ICogTm8gdmFsaWQgc3luZHJvbWU/IEFzayB1c2Vyc3BhY2UgZm9yIGhlbHAgaWYgaXQgaGFzXFxuIFxcdCAqIHZvbHVudGVlcmVkIHRvIGRvIHNvLCBhbmQgYmFpbCBvdXQgb3RoZXJ3aXNlLlxcbiBcXHQgKlxcbi1cXHQgKiBJbiB0aGUgcHJvdGVjdGVkIFZNIGNhc2UsIHRoZXJlIGlzbid0IG11Y2ggdXNlcnNwYWNlIGNhbiBkb1xcbitcXHQgKiBJbiB0aGUgcHJvdGVjdGVkL1JlYWxtIFZNIGNhc2UsIHRoZXJlIGlzbid0IG11Y2ggdXNlcnNwYWNlIGNhbiBkb1xcbiBcXHQgKiB0aG91Z2gsIHNvIGRpcmVjdGx5IGRlbGl2ZXIgYW4gZXhjZXB0aW9uIHRvIHRoZSBndWVzdC5cXG4gXFx0ICovXFxuIFxcdGlmICgha3ZtX3ZjcHVfZGFidF9pc3ZhbGlkKHZjcHUpKSB7XFxuIFxcdFxcdHRyYWNlX2t2bV9tbWlvX25pc3YoKnZjcHVfcGModmNwdSksIGVzcixcXG4gXFx0XFx0XFx0XFx0ICAgIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpLCBmYXVsdF9pcGEpO1xcbiBcXG4tXFx0XFx0aWYgKHZjcHVfaXNfcHJvdGVjdGVkKHZjcHUpKVxcbitcXHRcXHRpZiAodmNwdV9pc19jb25maWRlbnRpYWwodmNwdSkpXFxuIFxcdFxcdFxcdHJldHVybiBrdm1faW5qZWN0X3NlYV9kYWJ0KHZjcHUsIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpKTtcXG4gXFxuIFxcdFxcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1JFVFVSTl9OSVNWX0lPX0FCT1JUX1RPX1VTRVIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5pbmRleCA5YmE4NjQ1MGZlNGFmLi41ZTdjZGJlMzEwZmM4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcXG5AQCAtMzcsNiArMzcsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19yb19hZnRlcl9pbml0IGlvX21hcF9iYXNlO1xcbiBcXG4gI2RlZmluZSBLVk1fUEdUX0ZOKGZuKVxcdFxcdCghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgPyBmbiA6IHAgIyMgZm4pXFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgcHJvdGVjdGVkX3Brdm1fczJfb3BzO1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgdW5wcm90ZWN0ZWRfcGt2bV9zMl9vcHM7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBrdm1fZGVmYXVsdF92bV9zMl9vcHM7XFxuK1xcbiBzdGF0aWMgcGh5c19hZGRyX3QgX19zdGFnZTJfcmFuZ2VfYWRkcl9lbmQocGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBwaHlzX2FkZHJfdCBzaXplKVxcbiB7XFxuQEAgLTE2Niw2ICsxNzAsMTggQEAgc3RhdGljIGJvb2wgbWVtc2xvdF9pc19sb2dnaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpXFxuIFxcdHJldHVybiBtZW1zbG90LVxcdTAwM2VkaXJ0eV9iaXRtYXAgXFx1MDAyNlxcdTAwMjYgIShtZW1zbG90LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fUkVBRE9OTFkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVxcdTAwM2VhcmNoLnBrdm0uaGFuZGxlKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcXG4re1xcbitcXHRrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsIFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gubW11KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicygpIC0gZmx1c2ggYWxsIFZNIFRMQiBlbnRyaWVzIGZvciB2Ny84XFxuICAqIEBrdm06XFx0cG9pbnRlciB0byBrdm0gc3RydWN0dXJlLlxcbkBAIC0xNzQsMjYgKzE5MCwzNiBAQCBzdGF0aWMgYm9vbCBtZW1zbG90X2lzX2xvZ2dpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcXG4gICovXFxuIGludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxicyhzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4tXFx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxcbi1cXHRcXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdGxiX2ZsdXNoX3ZtaWQsIGt2bS1cXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0a3ZtX2NhbGxfaHlwKF9fa3ZtX3RsYl9mbHVzaF92bWlkLCBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSk7XFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XFxuIH1cXG4gXFxuLWludCBrdm1fYXJjaF9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXFxuLVxcdFxcdFxcdFxcdCAgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxcbitzdGF0aWMgaW50IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHRnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm4gcGt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGt2bV92bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdFxcdFxcdCBnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcXG4ge1xcbiBcXHR1NjQgc2l6ZSA9IG5yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcdHU2NCBhZGRyID0gZ2ZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcbi1cXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXFxuLVxcdFxcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVxcdTAwM2VhcmNoLnBrdm0uaGFuZGxlKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5tbXUsIGFkZHIsIHNpemUpO1xcbitcXHRrdm1fdGxiX2ZsdXNoX3ZtaWRfcmFuZ2UoXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC5tbXUsIGFkZHIsIHNpemUpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0ICAgICBnZm5fdCBnZm4sIHU2NCBucl9wYWdlcylcXG4re1xcbitcXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGdmbiwgbnJfcGFnZXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCAqc3RhZ2UyX21lbWNhY2hlX3phbGxvY19wYWdlKHZvaWQgKmFyZylcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jID0gYXJnO1xcbkBAIC0zMzcsMTMgKzM2MywyMCBAQCBzdGF0aWMgdm9pZCBfX3VubWFwX3N0YWdlMl9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCBwaHlzX2FkZHJfdCBzdGFydCwgdTY0XFxuIFxcdFxcdFxcdFxcdCAgIG1heV9ibG9jaykpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHQgICAgICB1NjQgc2l6ZSwgYm9vbCBtYXlfYmxvY2spXFxuK3tcXG4rXFx0X191bm1hcF9zdGFnZTJfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcXG4rfVxcbitcXG4gdm9pZCBrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LFxcbiBcXHRcXHRcXHQgICAgdTY0IHNpemUsIGJvb2wgbWF5X2Jsb2NrKVxcbiB7XFxuLVxcdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKGt2bV9zMl9tbXVfdG9fa3ZtKG1tdSkpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9zMl9tbXVfdG9fa3ZtKG1tdSk7XFxuIFxcbi1cXHRfX3VubWFwX3N0YWdlMl9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spO1xcbitcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnZtX3MyX29wcy1cXHUwMDNldm1fc3RhZ2UyX3VubWFwX3JhbmdlKVxcbitcXHRcXHRrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9zdGFnZTJfdW5tYXBfcmFuZ2UobW11LCBzdGFydCwgc2l6ZSwgbWF5X2Jsb2NrKTtcXG4gfVxcbiBcXG4gdm9pZCBrdm1fc3RhZ2UyX2ZsdXNoX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZClcXG5AQCAtOTYzLDYgKzk5NiwxOCBAQCBzdGF0aWMgdm9pZCBrdm1fc3RhZ2UyX2Rlc3Ryb3koc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QpXFxuIFxcdEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX2Rlc3Ryb3lfcGdkKShwZ3QpO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgKmFybTY0X3ZtX3MyX29wc1tWTV9GTEFWT1JfTUFYXSA9IHtcXG4rXFx0W1ZNX1ZIRV0gPSBcXHUwMDI2a3ZtX2RlZmF1bHRfdm1fczJfb3BzLFxcbitcXHRbVk1fTlZIRV0gPSBcXHUwMDI2a3ZtX2RlZmF1bHRfdm1fczJfb3BzLFxcbitcXHRbVk1fUEtWTV0gPSBcXHUwMDI2dW5wcm90ZWN0ZWRfcGt2bV9zMl9vcHMsXFxuK1xcdFtWTV9QUk9URUNURURfUEtWTV0gPSBcXHUwMDI2cHJvdGVjdGVkX3Brdm1fczJfb3BzLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQga3ZtX3ZtX2luaXRfdm1fczJfb3BzKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbit7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMgPSBhcm02NF92bV9zMl9vcHNba3ZtLVxcdTAwM2VhcmNoLnZtX2ZsYXZvcl07XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrdm1faW5pdF9zdGFnZTJfbW11IC0gSW5pdGlhbGlzZSBhIFMyIE1NVSBzdHJ1Y3R1cmVcXG4gICogQGt2bTpcXHRUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdHVyZVxcbkBAIC05ODMsNiArMTAyOCw5IEBAIGludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0XFxuIFxcdGludCBjcHUsIGVycjtcXG4gXFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7XFxuIFxcbitcXHQvKiBJbml0aWFsaXplIHRoZSBWTSBvcHMgZm9yIHRoZSBWTSBpbnN0YW5jZSBmb3IgdGhlIGZpcnN0IHRpbWUgKi9cXG4rXFx0aWYgKG1tdSA9PSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSlcXG4rXFx0XFx0a3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7XFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGFscmVhZHkgaGF2ZSBvdXIgcGFnZSB0YWJsZXMgaW4gcGxhY2UsIGFuZCB0aGF0IHRoZVxcbiBcXHQgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsXFxuQEAgLTE3MDUsNyArMTc1Myw3IEBAIHN0cnVjdCBrdm1fczJfZmF1bHRfdm1hX2luZm8ge1xcbiBcXHRib29sXFx0XFx0bWFwX25vbl9jYWNoZWFibGU7XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBrdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4rc3RhdGljIGludCBwcm90ZWN0ZWRfdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGT0xMX0hXUE9JU09OIHwgRk9MTF9MT05HVEVSTSB8IEZPTExfV1JJVEU7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHMyZmQtXFx1MDAzZXZjcHU7XFxuQEAgLTIxNDMsNiArMjE5MSwyMiBAQCBzdGF0aWMgaW50IHVzZXJfbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4gXFx0cmV0dXJuIGt2bV9zMl9mYXVsdF9tYXAoczJmZCwgXFx1MDAyNnMydmksIHByb3QsIG1lbWNhY2hlKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1fdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLVxcdTAwM2V2Y3B1O1xcbitcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGt2bV92Y3B1X3RyYXBfaXNfcGVybWlzc2lvbl9mYXVsdCh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQha3ZtX2lzX3dyaXRlX2ZhdWx0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCFrdm1fdmNwdV90cmFwX2lzX2V4ZWNfZmF1bHQodmNwdSkpO1xcbitcXG4rXFx0aWYgKGt2bV9zbG90X2hhc19nbWVtKHMyZmQtXFx1MDAzZW1lbXNsb3QpKVxcbitcXHRcXHRyZXQgPSBnbWVtX2Fib3J0KHMyZmQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHVzZXJfbWVtX2Fib3J0KHMyZmQpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKiBSZXNvbHZlIHRoZSBhY2Nlc3MgZmF1bHQgYnkgbWFraW5nIHRoZSBwYWdlIHlvdW5nIGFnYWluLiAqL1xcbiBzdGF0aWMgdm9pZCBoYW5kbGVfYWNjZXNzX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZmF1bHRfaXBhKVxcbiB7XFxuQEAgLTIyNTAsNiArMjMxNCw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIGludCBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3MyX3RyYW5zIG5lc3RlZF90cmFucywgKm5lc3RlZCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0dW5zaWduZWQgbG9uZyBlc3I7XFxuIFxcdHBoeXNfYWRkcl90IGZhdWx0X2lwYTsgLyogVGhlIGFkZHJlc3Mgd2UgZmF1bHRlZCBvbiAqL1xcbiBcXHRwaHlzX2FkZHJfdCBpcGE7IC8qIEFsd2F5cyB0aGUgSVBBIGluIHRoZSBMMSBndWVzdCBwaHlzIHNwYWNlICovXFxuQEAgLTI0MTEsMTkgKzI0NzYsNyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdC5odmFcXHRcXHQ9IGh2YSxcXG4gXFx0fTtcXG4gXFxuLVxcdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXFx1MDAzZWt2bSkpIHtcXG4tXFx0XFx0cmV0ID0gcGt2bV9tZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCF3cml0ZV9mYXVsdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHQha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTtcXG4tXFxuLVxcdFxcdGlmIChrdm1fc2xvdF9oYXNfZ21lbShtZW1zbG90KSlcXG4tXFx0XFx0XFx0cmV0ID0gZ21lbV9hYm9ydChcXHUwMDI2czJmZCk7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0ID0gdXNlcl9tZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbi1cXHR9XFxuLVxcbitcXHRyZXQgPSBrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9tZW1fYWJvcnQoXFx1MDAyNnMyZmQpO1xcbiBcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdHJldCA9IDE7XFxuIG91dDpcXG5AQCAtMjQzNiwzOCArMjQ4OSw0MyBAQCBpbnQga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiBib29sIGt2bV91bm1hcF9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXFxuIHtcXG4tXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdF9fdW5tYXBfc3RhZ2UyX3JhbmdlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gubW11LCByYW5nZS1cXHUwMDNlc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0ICAgICAocmFuZ2UtXFx1MDAzZWVuZCAtIHJhbmdlLVxcdTAwM2VzdGFydCkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0ICAgICByYW5nZS1cXHUwMDNlbWF5X2Jsb2NrKTtcXG4rXFx0a3ZtX3N0YWdlMl91bm1hcF9yYW5nZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSwgcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuK1xcdFxcdFxcdFxcdChyYW5nZS1cXHUwMDNlZW5kIC0gcmFuZ2UtXFx1MDAzZXN0YXJ0KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRyYW5nZS1cXHUwMDNlbWF5X2Jsb2NrKTtcXG4gXFxuIFxcdGt2bV9uZXN0ZWRfczJfdW5tYXAoa3ZtLCByYW5nZS1cXHUwMDNlbWF5X2Jsb2NrKTtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1ib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbitzdGF0aWMgYm9vbCBrdm1fdm1fYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4ge1xcbiBcXHR1NjQgc2l6ZSA9IChyYW5nZS1cXHUwMDNlZW5kIC0gcmFuZ2UtXFx1MDAzZXN0YXJ0KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiBcXG4tXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuIFxcdHJldHVybiBLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKShrdm0tXFx1MDAzZWFyY2gubW11LnBndCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgcmFuZ2UtXFx1MDAzZXN0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpemUsIHRydWUpO1xcbit9XFxuK1xcbitib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdGlmICgha3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QgfHwgIWt2bS1cXHUwMDNlYXJjaC52bV9zMl9vcHMtXFx1MDAzZXZtX2FnZV9nZm4pXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBrdm0tXFx1MDAzZWFyY2gudm1fczJfb3BzLVxcdTAwM2V2bV9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xcbiBcXHQvKlxcbiBcXHQgKiBUT0RPOiBIYW5kbGUgbmVzdGVkX21tdSBzdHJ1Y3R1cmVzIGhlcmUgdXNpbmcgdGhlIHJldmVyc2UgbWFwcGluZyBpblxcbiBcXHQgKiBhIGxhdGVyIHZlcnNpb24gb2YgcGF0Y2ggc2VyaWVzLlxcbiBcXHQgKi9cXG4gfVxcbiBcXG4tYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbitzdGF0aWMgYm9vbCBrdm1fdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiB7XFxuIFxcdHU2NCBzaXplID0gKHJhbmdlLVxcdTAwM2VlbmQgLSByYW5nZS1cXHUwMDNlc3RhcnQpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcbi1cXHRpZiAoIWt2bS1cXHUwMDNlYXJjaC5tbXUucGd0IHx8IGt2bV92bV9pc19wcm90ZWN0ZWQoa3ZtKSlcXG4rXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0cmV0dXJuIEtWTV9QR1RfRk4oa3ZtX3BndGFibGVfc3RhZ2UyX3Rlc3RfY2xlYXJfeW91bmcpKGt2bS1cXHUwMDNlYXJjaC5tbXUucGd0LFxcbkBAIC0yNDc1LDYgKzI1MzMsMTUgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBzaXplLCBmYWxzZSk7XFxuIH1cXG4gXFxuK2Jvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4re1xcbitcXG4rXFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gubW11LnBndCB8fCAha3ZtLVxcdTAwM2VhcmNoLnZtX3MyX29wcy1cXHUwMDNldm1fdGVzdF9hZ2VfZ2ZuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4ga3ZtLVxcdTAwM2VhcmNoLnZtX3MyX29wcy1cXHUwMDNldm1fdGVzdF9hZ2VfZ2ZuKGt2bSwgcmFuZ2UpO1xcbit9XFxuK1xcbiBwaHlzX2FkZHJfdCBrdm1fbW11X2dldF9odHRicih2b2lkKVxcbiB7XFxuIFxcdHJldHVybiBfX3BhKGh5cF9wZ3RhYmxlLVxcdTAwM2VwZ2QpO1xcbkBAIC0yNzk2LDMgKzI4NjMsMzMgQEAgdm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YXNfZW5hYmxlZClcXG4gXFxuIFxcdHRyYWNlX2t2bV90b2dnbGVfY2FjaGUoKnZjcHVfcGModmNwdSksIHdhc19lbmFibGVkLCBub3dfZW5hYmxlZCk7XFxuIH1cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwcm90ZWN0ZWRfdm1fczJfb3BzID0ge1xcbitcXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNcXHRcXHQ9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMsXFxuK1xcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVxcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcXG4rXFx0LypcXG4rXFx0ICogTm90IHN1cHBvcnRlZCBmb3IgUHJvdGVjdGVkIFZNcyB1bmRlciBwS1ZNXFxuK1xcdCAqIC52bV9hZ2VfZ2ZuXFxuK1xcdCAqIC52bV90ZXN0X2FnZV9nZm5cXG4rXFx0ICogLnZtX3N0YWdlMl91bm1hcF9yYW5nZVxcbitcXHQgKi9cXG4rXFx0LnZtX21lbV9hYm9ydFxcdFxcdFxcdD0gcHJvdGVjdGVkX3ZtX21lbV9hYm9ydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwa3ZtX3ZtX3MyX29wcyA9IHtcXG4rXFx0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXFx0XFx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxcbitcXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcXHQ9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsXFxuK1xcdC52bV9hZ2VfZ2ZuXFx0XFx0XFx0PSBrdm1fdm1fYWdlX2dmbixcXG4rXFx0LnZtX3Rlc3RfYWdlX2dmblxcdFxcdD0ga3ZtX3ZtX3Rlc3RfYWdlX2dmbixcXG4rXFx0LnZtX3N0YWdlMl91bm1hcF9yYW5nZVxcdFxcdD0ga3ZtX3ZtX3N0YWdlMl91bm1hcF9yYW5nZSxcXG4rXFx0LnZtX21lbV9hYm9ydFxcdFxcdFxcdD0ga3ZtX3ZtX21lbV9hYm9ydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBrdm1fZGVmYXVsdF92bV9zMl9vcHMgPSB7XFxuK1xcdC52bV9mbHVzaF9yZW1vdGVfdGxic1xcdFxcdD0ga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzLFxcbitcXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcXHQ9IGt2bV92bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcXG4rXFx0LnZtX2FnZV9nZm5cXHRcXHRcXHQ9IGt2bV92bV9hZ2VfZ2ZuLFxcbitcXHQudm1fdGVzdF9hZ2VfZ2ZuXFx0XFx0PSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLFxcbitcXHQudm1fc3RhZ2UyX3VubWFwX3JhbmdlXFx0XFx0PSBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlLFxcbitcXHQudm1fbWVtX2Fib3J0XFx0XFx0XFx0PSBrdm1fdm1fbWVtX2Fib3J0LFxcbit9O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9wa3ZtLmNcXG5pbmRleCA4ZTRjNmU0YmVjMTIzLi4zOTQ4ZmE0NmY0ZDc1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xcbkBAIC0yNDAsNyArMjQwLDYgQEAgaW50IHBrdm1faW5pdF9ob3N0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnBrdm0uaGFuZGxlID0gcmV0O1xcbi1cXHRrdm0tXFx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7XFxuIFxcdGlmIChwcm90ZWN0ZWQpIHtcXG4gXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJrdm06IHByb3RlY3RlZCBWTXMgYXJlIGV4cGVyaW1lbnRhbCBhbmQgZm9yIGRldmVsb3BtZW50IG9ubHksIHRhaW50aW5nIGtlcm5lbFxcXFxuXFxcIik7XFxuIFxcdFxcdGFkZF90YWludChUQUlOVF9VU0VSLCBMT0NLREVQX1NUSUxMX09LKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xcbmluZGV4IDRjZWFiYWE0YzMwYmQuLjQxZmJmZDkyY2QyOTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xcbkBAIC02Nyw5ICs2Nyw5IEBAIGdwYV90IGt2bV9pbml0X3N0b2xlbl90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0cmV0dXJuIGJhc2U7XFxuIH1cXG4gXFxuLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpXFxuK2Jvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHN0cnVjdCBrdm0gKmt2bSlcXG4ge1xcbi1cXHRyZXR1cm4gISFzY2hlZF9pbmZvX29uKCk7XFxuK1xcdHJldHVybiAhIXNjaGVkX2luZm9fb24oKSBcXHUwMDI2XFx1MDAyNiAoIWt2bSB8fCAha3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKTtcXG4gfVxcbiBcXG4gaW50IGt2bV9hcm1fcHZ0aW1lX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5AQCAtODEsNyArODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IGlkeDtcXG4gXFxuLVxcdGlmICgha3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKCkgfHxcXG4rXFx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoa3ZtKSB8fFxcbiBcXHQgICAgYXR0ci1cXHUwMDNlYXR0ciAhPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSlcXG4gXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gXFxuQEAgLTExMCw3ICsxMTAsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHR1NjQgX191c2VyICp1c2VyID0gKHU2NCBfX3VzZXIgKilhdHRyLVxcdTAwM2VhZGRyO1xcbiBcXHR1NjQgaXBhO1xcbiBcXG4tXFx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSB8fFxcbitcXHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVxcdTAwM2Vrdm0pIHx8XFxuIFxcdCAgICBhdHRyLVxcdTAwM2VhdHRyICE9IEtWTV9BUk1fVkNQVV9QVlRJTUVfSVBBKVxcbiBcXHRcXHRyZXR1cm4gLUVOWElPO1xcbiBcXG5AQCAtMTI2LDcgKzEyNiw3IEBAIGludCBrdm1fYXJtX3B2dGltZV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3dpdGNoIChhdHRyLVxcdTAwM2VhdHRyKSB7XFxuIFxcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEE6XFxuLVxcdFxcdGlmIChrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSlcXG4rXFx0XFx0aWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVxcdTAwM2Vrdm0pKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gLUVOWElPO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9ybWkuYyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi41ZWNjOGIzNDk4Njk4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL3JtaS5jXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS92aXJ0LmhcXHUwMDNlXFxuK1xcbit2b2lkIGt2bV9pbml0X3JtaSh2b2lkKVxcbit7XFxuK1xcdGlmIChrdm1fZ2V0X21vZGUoKSAhPSBLVk1fTU9ERV9STU0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIFRPRE86IENoZWNrIGlmIHRoZSBSTUkgaXMgYXZhaWxhYmxlICovXFxuK1xcbitcXHQvKiBGdXR1cmUgcGF0Y2ggd2lsbCBlbmFibGUgc3RhdGljIGJyYW5jaCBrdm1fcm1pX2lzX2F2YWlsYWJsZSAqL1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuaW5kZXggNDRhYWU1MmM0NzNkNy4uYTU4YzFmYzEzZWExNyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuY1xcbkBAIC01NjM4LDE4ICs1NjM4LDE4IEBAIGludCBrdm1fYXJtX3N5c19yZWdfc2V0X3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHN0cnVjdCBrdm1fb25lX3JlZyAqcmVnXFxuIFxcdFxcdFxcdFxcdCAgICBzeXNfcmVnX2Rlc2NzLCBBUlJBWV9TSVpFKHN5c19yZWdfZGVzY3MpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyh2b2lkKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1fZGVtdXhfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0cmV0dXJuIENTU0VMUl9NQVg7XFxuK1xcdHJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KSA/IDAgOiBDU1NFTFJfTUFYO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHdyaXRlX2RlbXV4X3JlZ2lkcyh1NjQgX191c2VyICp1aW5kaWNlcylcXG4rc3RhdGljIGludCB3cml0ZV9kZW11eF9yZWdpZHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kaWNlcylcXG4ge1xcbiBcXHR1NjQgdmFsID0gS1ZNX1JFR19BUk02NCB8IEtWTV9SRUdfU0laRV9VMzIgfCBLVk1fUkVHX0FSTV9ERU1VWDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbiBcXHR2YWwgfD0gS1ZNX1JFR19BUk1fREVNVVhfSURfQ0NTSURSO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ1NTRUxSX01BWDsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZGVtdXhfcmVncyh2Y3B1KTsgaSsrKSB7XFxuIFxcdFxcdGlmIChwdXRfdXNlcih2YWwgfCBpLCB1aW5kaWNlcykpXFxuIFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHR1aW5kaWNlcysrO1xcbkBAIC01NjkzLDExICs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fcmVhbG1fc3lzX3JlZ19oaWRkZW5fdXNlcihjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1NjQgcmVnKVxcbit7XFxuK1xcdHN3aXRjaCAocmVnKSB7XFxuK1xcdGNhc2UgU1lTX0lEX0FBNjRERlIwX0VMMTpcXG4rXFx0Y2FzZSBTWVNfUE1DUl9FTDA6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB3YWxrX29uZV9zeXNfcmVnKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxcbiBcXHRcXHRcXHQgICAgdTY0IF9fdXNlciAqKnVpbmQsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgKnRvdGFsKVxcbiB7XFxuK1xcdGlmICh2Y3B1X2lzX3JlYyh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAga3ZtX3JlYWxtX3N5c19yZWdfaGlkZGVuX3VzZXIodmNwdSwgcmVnX3RvX2VuY29kaW5nKHJkKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWdub3JlIHJlZ2lzdGVycyB3ZSB0cmFwIGJ1dCBkb24ndCBzYXZlLFxcbiBcXHQgKiBhbmQgZm9yIHdoaWNoIG5vIGN1c3RvbSB1c2VyIGFjY2Vzc29yIGlzIHByb3ZpZGVkLlxcbkBAIC01NzM1LDcgKzU3NTAsNyBAQCBzdGF0aWMgaW50IHdhbGtfc3lzX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgX191c2VyICp1aW5kKVxcbiBcXG4gdW5zaWduZWQgbG9uZyBrdm1fYXJtX251bV9zeXNfcmVnX2Rlc2NzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3MoKVxcbitcXHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSlcXG4gXFx0XFx0KyB3YWxrX3N5c19yZWdzKHZjcHUsICh1NjQgX191c2VyICopTlVMTCk7XFxuIH1cXG4gXFxuQEAgLTU3NDgsNyArNTc2Myw3IEBAIGludCBrdm1fYXJtX2NvcHlfc3lzX3JlZ19pbmRpY2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdHVpbmRpY2VzICs9IGVycjtcXG4gXFxuLVxcdHJldHVybiB3cml0ZV9kZW11eF9yZWdpZHModWluZGljZXMpO1xcbitcXHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHZjcHUsIHVpbmRpY2VzKTtcXG4gfVxcbiBcXG4gI2RlZmluZSBLVk1fQVJNX0ZFQVRVUkVfSURfUkFOR0VfSU5ERVgocilcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva3ZtL2FybV9wc2NpLmggYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXFxuaW5kZXggZjg2YTAwNmQ2NzEzNi4uMDZjMjA2MTJlOWU3ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXFxuKysrIGIvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaFxcbkBAIC0xMCw2ICsxMCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1faG9zdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9wc2NpLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9lbXVsYXRlLmhcXHUwMDNlXFxuK1xcbiAjZGVmaW5lIEtWTV9BUk1fUFNDSV8wXzFcXHRQU0NJX1ZFUlNJT04oMCwgMSlcXG4gI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8yXFx0UFNDSV9WRVJTSU9OKDAsIDIpXFxuICNkZWZpbmUgS1ZNX0FSTV9QU0NJXzFfMFxcdFBTQ0lfVkVSU0lPTigxLCAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMjo1Mi4yODI3OTk3MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NTAzOTU3MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgQVJNNjQgS1ZNIGFuZCBBcm0gQ29uZmlkZW50aWFsIENvbXB1dGUgQXJjaGl0ZWN0dXJlIChDQ0EgLyBSZWFsbSBNYW5hZ2VtZW50IEV4dGVuc2lvbikgY29kZSBleGNsdXNpdmVseSwgYXMgd2VsbCBhcyBkb2N1bWVudGF0aW9uLiBTaW5jZSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgYWxsIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGV4Y2x1c2l2ZSB0byBhcm02NCBhbmQgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFmOTVkZTk1NGQ0MTNkZjYxZjgzODI3NTg5ZGUwYjJkY2Q1ZWFkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIwOjEyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggNjg2NDdmZjRiZGQyNC4uMWFmZTNkZjNiOTIzZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTMyNTYsNiArMzI1Niw5IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0bmVzdGVkOiBWSEUtYmFzZWQgbW9kZSB3aXRoIHN1cHBvcnQgZm9yIG5lc3RlZFxuIFx0XHRcdFx0dmlydHVhbGl6YXRpb24uIFJlcXVpcmVzIGF0IGxlYXN0IEFSTXY4LjRcbiBcdFx0XHRcdGhhcmR3YXJlICh3aXRoIEZFQVRfTlYyKS5cbitcdFx0XHRybW06IFN1cHBvcnQgZm9yIHJ1bm5pbmcgY29uZmlkZW50aWFsIGd1ZXN0cyBpbiBSZWFsbVxuK1x0XHRcdCAgICAgd29ybGQgdXNpbmcgUk1NLCBhcyBkZWZpbmVkIGJ5IEFybSBDb25maWRlbnRpYWxcbitcdFx0XHQgICAgIENvbXB1dGUgQXJjaGl0ZWN0dXJlIChDQ0EpXG4gXG4gXHRcdFx0RGVmYXVsdHMgdG8gVkhFL25WSEUgYmFzZWQgb24gaGFyZHdhcmUgc3VwcG9ydC4gU2V0dGluZ1xuIFx0XHRcdG1vZGUgdG8gXCJwcm90ZWN0ZWRcIiB3aWxsIGRpc2FibGUga2V4ZWMgYW5kIGhpYmVybmF0aW9uXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG5pbmRleCBhM2MxOTI4YmRmNzQzLi5kMzYwYThiMDViOGJmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmhcbkBAIC03OTMsNCArNzkzLDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcmVzZXRfdmNwdV9wc2NpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCAwLCByZXNldF9zdGF0ZS1cdTAwM2VyMCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgZW51bSByZWFsbV9zdGF0ZSBrdm1fcmVhbG1fc3RhdGUoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0Uoa3ZtLVx1MDAzZWFyY2gucmVhbG0uc3RhdGUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3NldF9yZWFsbV9zdGF0ZShzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHQgICAgICAgZW51bSByZWFsbV9zdGF0ZSBuZXdfc3RhdGUpXG4re1xuK1x0V1JJVEVfT05DRShrdm0tXHUwMDNlYXJjaC5yZWFsbS5zdGF0ZSwgbmV3X3N0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9yZWFsbV9pc19jcmVhdGVkKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRyZXR1cm4ga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXHUwMDI2XHUwMDI2IGt2bV9yZWFsbV9zdGF0ZShrdm0pICE9IFJFQUxNX1NUQVRFX05PTkU7XG4rfVxuK1xuICNlbmRpZiAvKiBfX0FSTTY0X0tWTV9FTVVMQVRFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjdmZTBjZDViMmQ3YS4uZmJmZDg1ZGM5OTllZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjcsNiArMjcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9mcHNpbWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fYXNtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3JtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3ZuY3JfbWFwcGluZy5oXHUwMDNlXG4gXG4gI2RlZmluZSBfX0tWTV9IQVZFX0FSQ0hfSU5UQ19JTklUSUFMSVpFRFxuQEAgLTY5LDYgKzcwLDcgQEAgZW51bSBrdm1fbW9kZSB7XG4gXHRLVk1fTU9ERV9ERUZBVUxULFxuIFx0S1ZNX01PREVfUFJPVEVDVEVELFxuIFx0S1ZNX01PREVfTlYsXG4rXHRLVk1fTU9ERV9STU0sXG4gXHRLVk1fTU9ERV9OT05FLFxuIH07XG4gI2lmZGVmIENPTkZJR19LVk1cbkBAIC0xNTAsNiArMTUyLDI2IEBAIHN0cnVjdCBrdm1fdm1pZCB7XG4gXHRhdG9taWM2NF90IGlkO1xuIH07XG4gXG4rc3RydWN0IGt2bV92Y3B1X29wcyB7XG4rXHR2b2lkICgqdmNwdV9sb2FkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuK1x0dm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK307XG4rXG4rc3RydWN0IGt2bV9nZm5fcmFuZ2U7XG4rc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjO1xuK1xuK3N0cnVjdCBrdm1fdm1fczJfb3BzIHtcbitcdGJvb2wgKCp2bV9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rXHRib29sICgqdm1fdGVzdF9hZ2VfZ2ZuKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSk7XG4rXHRpbnQgKCp2bV9mbHVzaF9yZW1vdGVfdGxicykoc3RydWN0IGt2bSAqa3ZtKTtcbitcdGludCAoKnZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbitcdFx0XHRcdFx0ICB1NjQgbnJfcGFnZXMpO1xuK1x0dm9pZCAoKnZtX3N0YWdlMl91bm1hcF9yYW5nZSkoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSxcbitcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjQgc2l6ZSxcbitcdFx0XHRcdCAgICAgIGJvb2wgbWF5X2Jsb2NrKTtcbitcdGludCAoKnZtX21lbV9hYm9ydCkoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKTtcbit9O1xuK1xuIHN0cnVjdCBrdm1fczJfbW11IHtcbiBcdHN0cnVjdCBrdm1fdm1pZCB2bWlkO1xuIFxuQEAgLTI1Nyw3ICsyNzksNiBAQCBzdHJ1Y3Qga3ZtX3Byb3RlY3RlZF92bSB7XG4gXHRwa3ZtX2hhbmRsZV90IGhhbmRsZTtcbiBcdHN0cnVjdCBrdm1faHlwX21lbWNhY2hlIHRlYXJkb3duX21jO1xuIFx0c3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgc3RhZ2UyX3RlYXJkb3duX21jO1xuLVx0Ym9vbCBpc19wcm90ZWN0ZWQ7XG4gXHRib29sIGlzX2NyZWF0ZWQ7XG4gXG4gXHQvKlxuQEAgLTMwNiw5ICszMjcsMjAgQEAgZW51bSBmZ3RfZ3JvdXBfaWQge1xuIFx0X19OUl9GR1RfR1JPVVBfSURTX19cbiB9O1xuIFxuK2VudW0ga3ZtX2FybV92bV9mbGF2b3Ige1xuK1x0Vk1fTlZIRSxcbitcdFZNX1ZIRSxcbitcdFZNX1BLVk0sXHRcdC8qIE5vcm1hbCBndWVzdHMgb24gUEtWTSAqL1xuK1x0TUFSS0VSKF9fVk1fQ09ORklERU5USUFMKSxcbitcdFZNX1BST1RFQ1RFRF9QS1ZNLFx0LyogUHJvdGVjdGVkIFZNICovXG4rXHRWTV9SRUFMTSxcdFx0LyogQ0NBICovXG4rXHRWTV9GTEFWT1JfTUFYLFxuK307XG4rXG4gc3RydWN0IGt2bV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11IG1tdTtcbiBcbitcdGVudW0ga3ZtX2FybV92bV9mbGF2b3Igdm1fZmxhdm9yO1xuIFx0LypcbiBcdCAqIEZpbmUtR3JhaW5lZCBVTkRFRiwgbWltaWNraW5nIHRoZSBGR1QgbGF5b3V0IGRlZmluZWQgYnkgdGhlXG4gXHQgKiBhcmNoaXRlY3R1cmUuIFdlIHRyYWNrIHRoZW0gZ2xvYmFsbHksIGFzIHdlIHByZXNlbnQgdGhlXG5AQCAtMzE4LDYgKzM1MCw4IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHQgKi9cbiBcdHU2NCBmZ3VbX19OUl9GR1RfR1JPVVBfSURTX19dO1xuIFxuK1x0Y29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgKnZtX3MyX29wcztcbitcbiBcdC8qXG4gXHQgKiBTdGFnZSAyIHBhZ2luZyBzdGF0ZSBmb3IgVk1zIHdpdGggbmVzdGVkIFMyIHVzaW5nIGEgdmlydHVhbFxuIFx0ICogVk1JRC5cbkBAIC00MTcsMTEgKzQ1MSwxNCBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4gXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbi1cdC8qXG4tXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcbi1cdCAqIHRoZSBhc3NvY2lhdGVkIHBLVk0gaW5zdGFuY2UgaW4gdGhlIGh5cGVydmlzb3IuXG4tXHQgKi9cbi1cdHN0cnVjdCBrdm1fcHJvdGVjdGVkX3ZtIHBrdm07XG4rXHR1bmlvbiB7XG4rXHRcdC8qXG4rXHRcdCAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJ3Brdm0uaGFuZGxlJyBpcyB1c2VkIHRvIGxvb2t1cFxuK1x0XHQgKiB0aGUgYXNzb2NpYXRlZCBwS1ZNIGluc3RhbmNlIGluIHRoZSBoeXBlcnZpc29yLlxuK1x0XHQgKi9cbitcdFx0c3RydWN0IGt2bV9wcm90ZWN0ZWRfdm0gcGt2bTtcbitcdFx0c3RydWN0IHJlYWxtIHJlYWxtO1xuK1x0fTtcbiBcbiAjaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuIFx0LyogTmVzdGVkIHZpcnR1YWxpemF0aW9uIGluZm8gKi9cbkBAIC04NDYsNiArODgzLDcgQEAgc3RydWN0IHZuY3JfdGxiO1xuIFxuIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdHN0cnVjdCBrdm1fY3B1X2NvbnRleHQgY3R4dDtcbitcdGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgKnZjcHVfb3BzO1xuIFxuIFx0LypcbiBcdCAqIEd1ZXN0IGZsb2F0aW5nIHBvaW50IHN0YXRlXG5AQCAtMTM0Niw3ICsxMzg0LDcgQEAgbG9uZyBrdm1faHlwZXJjYWxsX3B2X2ZlYXR1cmVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV91cGRhdGVfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1ib29sIGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2b2lkKTtcbitib29sIGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZChzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIgKmF0dHIpO1xuIGludCBrdm1fYXJtX3B2dGltZV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtMTUwNCw5ICsxNTQyLDEzIEBAIHN0cnVjdCBrdm0gKmt2bV9hcmNoX2FsbG9jX3ZtKHZvaWQpO1xuIFxuICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX0ZMVVNIX1JFTU9URV9UTEJTX1JBTkdFXG4gXG4tI2RlZmluZSBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSlcdChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGt2bSktXHUwMDNlYXJjaC5wa3ZtLmlzX3Byb3RlY3RlZClcbisjZGVmaW5lIGt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKVx0KChrdm0pLVx1MDAzZWFyY2gudm1fZmxhdm9yIFx1MDAzZT0gX19WTV9DT05GSURFTlRJQUwpXG4rI2RlZmluZSBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSlcdCgoa3ZtKS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9PSBWTV9QUk9URUNURURfUEtWTSlcbisjZGVmaW5lIGt2bV92bV9pc19yZWFsbShrdm0pXHRcdCgoa3ZtKS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9PSBWTV9SRUFMTSlcbiBcbisjZGVmaW5lIHZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpXHRrdm1fdm1faXNfY29uZmlkZW50aWFsKCh2Y3B1KS1cdTAwM2Vrdm0pXG4gI2RlZmluZSB2Y3B1X2lzX3Byb3RlY3RlZCh2Y3B1KVx0XHRrdm1fdm1faXNfcHJvdGVjdGVkKCh2Y3B1KS1cdTAwM2Vrdm0pXG4rI2RlZmluZSB2Y3B1X2lzX3JlYyh2Y3B1KVx0XHRrdm1fdm1faXNfcmVhbG0oKHZjcHUpLVx1MDAzZWt2bSlcbiBcbiBpbnQga3ZtX2FybV92Y3B1X2ZpbmFsaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGZlYXR1cmUpO1xuIGJvb2wga3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuaW5kZXggNDFhODY4NzkzOGViNi4uYzJlNGIyOWU2MDVmYyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG5AQCAtOCw5ICs4LDEzIEBAXG4gI2RlZmluZSBfX0FSTTY0X0tWTV9QR1RBQkxFX0hfX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JidHJlZV90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbitzdHJ1Y3Qga3ZtX3MyX21tdTtcbitcbiAjZGVmaW5lIEtWTV9QR1RBQkxFX0ZJUlNUX0xFVkVMXHRcdC0xXG4gI2RlZmluZSBLVk1fUEdUQUJMRV9MQVNUX0xFVkVMXHRcdDNcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcbmluZGV4IGJlZWEwMGU2OTNhMGEuLjU0YTYxOGQ4ODdmYTQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3Brdm0uaFxuQEAgLTcsOSArNyw5IEBAXG4gI2RlZmluZSBfX0FSTTY0X0tWTV9QS1ZNX0hfX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FybV9mZmEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2FzbS9rdm1faG9zdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wZ3RhYmxlLmhcdTAwM2VcbiBcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBWTXMgdGhhdCBjYW4gY28tZXhpc3QgdW5kZXIgcEtWTS4gKi9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ybWkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3JtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDRmNWM3NWEyN2I1YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcm1pLmhcbkBAIC0wLDAgKzEsNjEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDIzLTIwMjYgQVJNIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9fQVNNX0tWTV9STUlfSFxuKyNkZWZpbmUgX19BU01fS1ZNX1JNSV9IXG4rXG4rLyoqXG4rICogZW51bSByZWFsbV9zdGF0ZSAtIFN0YXRlIG9mIGEgUmVhbG1cbisgKlxuKyAqIE1pcnJvcnMgdGhlIFJNTSdzIFJlYWxtIGxpZmVjeWNsZSBzdGF0ZXMgd2hlcmUgdGhleSBhcmUgbWVhbmluZ2Z1bCB0byBLVk0sXG4rICogd2l0aCBSRUFMTV9TVEFURV9EWUlORyBiZWluZyBhIEtWTS1pbnRlcm5hbCBzdGF0ZSB1c2VkIHRvIHByZXZlbnQgZnVydGhlclxuKyAqIHJlcXVlc3RzIHdoaWxlIHRlYXJkb3duIGlzIGluIHByb2dyZXNzLiBLVk0gZG9lcyBub3QgdHJhY2sgUkVBTE1fU1lTVEVNX09GRlxuKyAqIG9yIFJFQUxNX1pPTUJJRSBzZXBhcmF0ZWx5IGFzIHRoZXkgbmF0dXJhbGx5IGxlYWQgdG8gdGVhcmRvd24uXG4rICovXG4rZW51bSByZWFsbV9zdGF0ZSB7XG4rXHQvKipcbitcdCAqIEBSRUFMTV9TVEFURV9OT05FOlxuK1x0ICogICAgICBSZWFsbSBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQuIHJtaV9yZWFsbV9jcmVhdGUoKSBoYXMgbm90XG4rXHQgKiAgICAgIHlldCBiZWVuIGNhbGxlZC5cbitcdCAqL1xuK1x0UkVBTE1fU1RBVEVfTk9ORSxcbitcdC8qKlxuK1x0ICogQFJFQUxNX1NUQVRFX05FVzpcbitcdCAqICAgICAgUmVhbG0gaXMgdW5kZXIgY29uc3RydWN0aW9uLCBybWlfcmVhbG1fY3JlYXRlKCkgaGFzIGJlZW5cbitcdCAqICAgICAgY2FsbGVkLCBidXQgaXQgaXMgbm90IHlldCBhY3RpdmF0ZWQuIFBhZ2VzIG1heSBiZSBwb3B1bGF0ZWQuXG4rXHQgKi9cbitcdFJFQUxNX1NUQVRFX05FVyxcbitcdC8qKlxuK1x0ICogQFJFQUxNX1NUQVRFX0FDVElWRTpcbitcdCAqICAgICAgUmVhbG0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgaXMgZWxpZ2libGUgZm9yIGV4ZWN1dGlvbiB3aXRoXG4rXHQgKiAgICAgIHJtaV9yZWNfZW50ZXIoKS4gUGFnZXMgbWF5IG5vIGxvbmdlciBiZSBwb3B1bGF0ZWQgd2l0aFxuK1x0ICogICAgICBybWlfZGF0YV9jcmVhdGUoKS5cbitcdCAqL1xuK1x0UkVBTE1fU1RBVEVfQUNUSVZFLFxuK1x0LyoqXG4rXHQgKiBAUkVBTE1fU1RBVEVfRFlJTkc6XG4rXHQgKiAgICAgIFJlYWxtIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZCBvciBoYXMgYWxyZWFkeSBiZWVuXG4rXHQgKiAgICAgIGRlc3Ryb3llZC5cbitcdCAqL1xuK1x0UkVBTE1fU1RBVEVfRFlJTkcsXG4rXHQvKipcbitcdCAqIEBSRUFMTV9TVEFURV9ERUFEOlxuK1x0ICogICAgICBSZWFsbSBoYXMgYmVlbiBkZXN0cm95ZWQuXG4rXHQgKi9cbitcdFJFQUxNX1NUQVRFX0RFQURcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCByZWFsbSAtIEFkZGl0aW9uYWwgcGVyIFZNIGRhdGEgZm9yIGEgUmVhbG1cbisgKlxuKyAqIEBzdGF0ZTogVGhlIGxpZmV0aW1lIHN0YXRlIG1hY2hpbmUgZm9yIHRoZSByZWFsbVxuKyAqL1xuK3N0cnVjdCByZWFsbSB7XG4rXHRlbnVtIHJlYWxtX3N0YXRlIHN0YXRlO1xuK307XG4rXG4rdm9pZCBrdm1faW5pdF9ybWkodm9pZCk7XG4rXG4rI2VuZGlmIC8qIF9fQVNNX0tWTV9STUlfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmlydC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbmluZGV4IGI1NDY3MDNjM2FiOWEuLjkyY2VjNDI5NTJmNDIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3ZpcnQuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS92aXJ0LmhcbkBAIC04Nyw2ICs4Nyw3IEBAIHZvaWQgX19oeXBfcmVzZXRfdmVjdG9ycyh2b2lkKTtcbiBib29sIGlzX2t2bV9hcm1faW5pdGlhbGlzZWQodm9pZCk7XG4gXG4gREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9wcm90ZWN0ZWRfbW9kZV9pbml0aWFsaXplZCk7XG4rREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9ybWlfaXNfYXZhaWxhYmxlKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGt2bV9pbml0aWFsaXplZCh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5pbmRleCA1OTYxMmQyZjI3N2MxLi5lZDNjZjMwZWIwNmU3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5AQCAtMTYsNyArMTYsNyBAQCBDRkxBR1NfaGFuZGxlX2V4aXQubyArPSAtV25vLW92ZXJyaWRlLWluaXRcbiBrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuIFx0IGluamVjdF9mYXVsdC5vIHZhX2xheW91dC5vIGhhbmRsZV9leGl0Lm8gY29uZmlnLm8gXFxcbiBcdCBndWVzdC5vIGRlYnVnLm8gcmVzZXQubyBzeXNfcmVncy5vIHN0YWNrdHJhY2UubyBcXFxuLVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuK1x0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBybWkubyBcXFxuIFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxuIFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcbiBcdCB2Z2ljL3ZnaWMtaXJxZmQubyB2Z2ljL3ZnaWMtdjIubyBcXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuYyBiL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuaW5kZXggNmFjMzMyMWY0YzU3NS4uM2VkZGY0NGY3YjFkZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FyY2hfdGltZXIuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJjaF90aW1lci5jXG5AQCAtNTYsMTEgKzU2LDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9hcmNoX3RpbWVyX2dldF9pcnFfZmxhZ3Modm9pZClcbiBcdHJldHVybiBrdm1fdmdpY19nbG9iYWxfc3RhdGUubm9faHdfZGVhY3RpdmF0aW9uID8gVkdJQ19JUlFfU1dfUkVTQU1QTEUgOiAwO1xuIH1cbiBcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fcmVhbG1fdGltZXJfZ2V0X2lycV9mbGFncyh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBSTUlfUkVDX0VOVEVSIHJlamVjdHMgTFJzIHdpdGggdGhlIEhXIGJpdCBzZXQsIHNvIHVzZSB0aGUgZXhpc3RpbmdcbitcdCAqIHNvZnR3YXJlIHJlc2FtcGxpbmcgbWVjaGFuaXNtIGZvciBSZWFsbSB0aW1lciBpbnRlcnJ1cHRzLlxuK1x0ICovXG4rXHRyZXR1cm4gVkdJQ19JUlFfU1dfUkVTQU1QTEU7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX29wcyBhcmNoX3RpbWVyX2lycV9vcHMgPSB7XG4gXHQuZ2V0X2ZsYWdzXHQgPSBrdm1fYXJjaF90aW1lcl9nZXRfaXJxX2ZsYWdzLFxuIFx0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX29wcyByZWFsbV90aW1lcl9pcnFfb3BzID0ge1xuK1x0LmdldF9mbGFnc1x0ID0ga3ZtX3JlYWxtX3RpbWVyX2dldF9pcnFfZmxhZ3MsXG4rXHQuZ2V0X2lucHV0X2xldmVsID0ga3ZtX2FyY2hfdGltZXJfZ2V0X2lucHV0X2xldmVsLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfb3BzIGFyY2hfdGltZXJfaXJxX29wc192Z2ljX3Y1ID0ge1xuIFx0LmdldF9pbnB1dF9sZXZlbCA9IGt2bV9hcmNoX3RpbWVyX2dldF9pbnB1dF9sZXZlbCxcbiBcdC5xdWV1ZV9pcnFfdW5sb2NrID0gdmdpY192NV9wcGlfcXVldWVfaXJxX3VubG9jayxcbkBAIC0xMDc5LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCB0aW1lcl9jb250ZXh0X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdGltZXJpZClcbiBcbiBcdGN0eHQtXHUwMDNldGltZXJfaWQgPSB0aW1lcmlkO1xuIFxuLVx0aWYgKCFrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0aWYgKCF2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSkge1xuIFx0XHRpZiAodGltZXJpZCA9PSBUSU1FUl9WVElNRVIpXG4gXHRcdFx0Y3R4dC1cdTAwM2VvZmZzZXQudm1fb2Zmc2V0ID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gudGltZXJfZGF0YS52b2Zmc2V0O1xuIFx0XHRlbHNlXG5AQCAtMTExMCw3ICsxMTI0LDcgQEAgdm9pZCBrdm1fdGltZXJfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dGltZXJfY29udGV4dF9pbml0KHZjcHUsIGkpO1xuIFxuIFx0LyogU3luY2hyb25pemUgb2Zmc2V0cyBhY3Jvc3MgdGltZXJzIG9mIGEgVk0gaWYgbm90IGFscmVhZHkgcHJvdmlkZWQgKi9cbi1cdGlmICghdmNwdV9pc19wcm90ZWN0ZWQodmNwdSkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIXZjcHVfaXNfY29uZmlkZW50aWFsKHZjcHUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICF0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1ZNX0NPVU5URVJfT0ZGU0VULCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmZsYWdzKSkge1xuIFx0XHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfdnRpbWVyKHZjcHUpLCBrdm1fcGh5c190aW1lcl9yZWFkKCkpO1xuIFx0XHR0aW1lcl9zZXRfb2Zmc2V0KHZjcHVfcHRpbWVyKHZjcHUpLCAwKTtcbkBAIC0xNjA5LDggKzE2MjMsMTIgQEAgaW50IGt2bV90aW1lcl9lbmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0Z2V0X3RpbWVyX21hcCh2Y3B1LCBcdTAwMjZtYXApO1xuIFxuLVx0b3BzID0gdmdpY19pc192NSh2Y3B1LVx1MDAzZWt2bSkgPyBcdTAwMjZhcmNoX3RpbWVyX2lycV9vcHNfdmdpY192NSA6XG4tXHRcdFx0XHQgICAgICBcdTAwMjZhcmNoX3RpbWVyX2lycV9vcHM7XG4rXHRpZiAodmNwdV9pc19yZWModmNwdSkpXG4rXHRcdG9wcyA9IFx1MDAyNnJlYWxtX3RpbWVyX2lycV9vcHM7XG4rXHRlbHNlIGlmICh2Z2ljX2lzX3Y1KHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0b3BzID0gXHUwMDI2YXJjaF90aW1lcl9pcnFfb3BzX3ZnaWNfdjU7XG4rXHRlbHNlXG4rXHRcdG9wcyA9IFx1MDAyNmFyY2hfdGltZXJfaXJxX29wcztcbiBcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBucl90aW1lcnModmNwdSk7IGkrKylcbiBcdFx0a3ZtX3ZnaWNfc2V0X2lycV9vcHModmNwdSwgdGltZXJfaXJxKHZjcHVfZ2V0X3RpbWVyKHZjcHUsIGkpKSwgb3BzKTtcbkBAIC0xNzM2LDcgKzE3NTQsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX3NldF9jb3VudGVyX29mZnNldChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRpZiAob2Zmc2V0LVx1MDAzZXJlc2VydmVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXG4rXHRpZiAoa3ZtX3ZtX2lzX2NvbmZpZGVudGlhbChrdm0pKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDhiMDgwODA0YmM5MGIuLjNmZTVhNGY3NzczOGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC00Miw2ICs0Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3JtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhY2t0cmFjZS9udmhlLmhcdTAwM2VcbiBcbkBAIC03NCw2ICs3NSw4IEBAIHN0cnVjdCBrdm1faW9jdGxfY2FwX21hcCB7XG4gXHRsb25nIGV4dDtcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzICphcm02NF92Y3B1X29wc1tWTV9GTEFWT1JfTUFYXTtcbitcbiAvKiBNYWtlIEtWTV9DQVBfTlJfVkNQVVMgdGhlIHJlZmVyZW5jZSBmb3IgZmVhdHVyZXMgd2UgYWx3YXlzIHN1cHBvcnRlZCAqL1xuICNkZWZpbmUgS1ZNX0NBUF9BUk1fQkFTSUNcdEtWTV9DQVBfTlJfVkNQVVNcbiBcbkBAIC0xMTEsNiArMTE0LDggQEAgbG9uZyBrdm1fZ2V0X2NhcF9mb3Jfa3ZtX2lvY3RsKHVuc2lnbmVkIGludCBpb2N0bCwgbG9uZyAqZXh0KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9ybWlfaXNfYXZhaWxhYmxlKTtcbitcbiBERUNMQVJFX0tWTV9IWVBfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBrdm1faHlwX3ZlY3Rvcik7XG4gXG4gREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywga3ZtX2FybV9oeXBfc3RhY2tfYmFzZSk7XG5AQCAtMTMyLDYgKzEzNywyNSBAQCBpbnQga3ZtX2FyY2hfdmNwdV9zaG91bGRfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4ga3ZtX3ZjcHVfZXhpdGluZ19ndWVzdF9tb2RlKHZjcHUpID09IElOX0dVRVNUX01PREU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGt2bV9yZWFsbV9leHRfYWxsb3dlZChsb25nIGV4dClcbit7XG4rXHRzd2l0Y2ggKGV4dCkge1xuK1x0Y2FzZSBLVk1fQ0FQX0lSUUNISVA6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0k6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1BTQ0lfMF8yOlxuK1x0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuK1x0Y2FzZSBLVk1fQ0FQX01BWF9WQ1BVUzpcbitcdGNhc2UgS1ZNX0NBUF9NQVhfVkNQVV9JRDpcbitcdGNhc2UgS1ZNX0NBUF9NU0lfREVWSUQ6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1ZNX0lQQV9TSVpFOlxuK1x0Y2FzZSBLVk1fQ0FQX0FSTV9QVFJBVVRIX0FERFJFU1M6XG4rXHRjYXNlIEtWTV9DQVBfQVJNX1BUUkFVVEhfR0VORVJJQzpcbitcdGNhc2UgS1ZNX0NBUF9TWU5DX01NVTpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIGludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0ICAgIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCAqY2FwKVxuIHtcbkBAIC0xNDMsNiArMTY3LDkgQEAgaW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWt2bV9wa3ZtX2V4dF9hbGxvd2VkKGt2bSwgY2FwLVx1MDAzZWNhcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKGt2bSBcdTAwMjZcdTAwMjYga3ZtX3ZtX2lzX3JlYWxtKGt2bSkgXHUwMDI2XHUwMDI2ICFrdm1fcmVhbG1fZXh0X2FsbG93ZWQoY2FwLVx1MDAzZWNhcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3dpdGNoIChjYXAtXHUwMDNlY2FwKSB7XG4gXHRjYXNlIEtWTV9DQVBfQVJNX05JU1ZfVE9fVVNFUjpcbiBcdFx0ciA9IDA7XG5AQCAtMjE0LDYgKzI0MSwyNiBAQCBzdGF0aWMgaW50IGt2bV9hcm1fZGVmYXVsdF9tYXhfdmNwdXModm9pZClcbiBcdHJldHVybiB2Z2ljX3ByZXNlbnQgPyBrdm1fdmdpY19nZXRfbWF4X3ZjcHVzKCkgOiBLVk1fTUFYX1ZDUFVTO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV9pbml0X3ZtX2ZsYXZvcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbit7XG4rXHRib29sIHByb3RlY3RlZCA9IHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQ7XG4rXG4rXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpIHtcbitcdFx0aWYgKHByb3RlY3RlZClcbitcdFx0XHRrdm0tXHUwMDNlYXJjaC52bV9mbGF2b3IgPSBWTV9QUk9URUNURURfUEtWTTtcbitcdFx0ZWxzZVxuK1x0XHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1BLVk07XG4rXHR9IGVsc2UgaWYgKHByb3RlY3RlZCkge1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH0gZWxzZSBpZiAoaGFzX3ZoZSgpKSB7XG4rXHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX1ZIRTtcbitcdH0gZWxzZSB7XG4rXHRcdGt2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvciA9IFZNX05WSEU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICoga3ZtX2FyY2hfaW5pdF92bSAtIGluaXRpYWxpemVzIGEgVk0gZGF0YSBzdHJ1Y3R1cmVcbiAgKiBAa3ZtOlx0cG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdFxuQEAgLTIzNiw2ICsyODMsMTAgQEAgaW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWxvY2spO1xuICNlbmRpZlxuIFxuK1x0cmV0ID0ga3ZtX2luaXRfdm1fZmxhdm9yKGt2bSwgdHlwZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0a3ZtX2luaXRfbmVzdGVkKGt2bSk7XG4gXG4gXHRyZXQgPSBrdm1fc2hhcmVfaHlwKGt2bSwga3ZtICsgMSk7XG5AQCAtMjYwLDkgKzMxMSw2IEBAIGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuIFx0XHRyZXQgPSBwa3ZtX2luaXRfaG9zdF92bShrdm0sIHR5cGUpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3VuaW5pdF9tbXU7XG4tXHR9IGVsc2UgaWYgKHR5cGUgXHUwMDI2IEtWTV9WTV9UWVBFX0FSTV9QUk9URUNURUQpIHtcbi1cdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfdW5pbml0X21tdTtcbiBcdH1cbiBcbiBcdGt2bV92Z2ljX2Vhcmx5X2luaXQoa3ZtKTtcbkBAIC0zODEsNiArNDI5LDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWt2bV9wa3ZtX2V4dF9hbGxvd2VkKGt2bSwgZXh0KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoa3ZtIFx1MDAyNlx1MDAyNiBrdm1fdm1faXNfcmVhbG0oa3ZtKSBcdTAwMjZcdTAwMjYgIWt2bV9yZWFsbV9leHRfYWxsb3dlZChleHQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdHN3aXRjaCAoZXh0KSB7XG4gXHRjYXNlIEtWTV9DQVBfSVJRQ0hJUDpcbiBcdFx0ciA9IHZnaWNfcHJlc2VudDtcbkBAIC00NDcsNyArNDk4LDcgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdFx0ciA9IHN5c3RlbV9zdXBwb3J0c19tdGUoKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfU1RFQUxfVElNRTpcbi1cdFx0ciA9IGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpO1xuK1x0XHRyID0ga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX0FSTV9FTDFfMzJCSVQ6XG4gXHRcdHIgPSBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU18zMkJJVF9FTDEpO1xuQEAgLTU0OCw2ICs1OTksOCBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlbXV0ZXgpO1xuICNlbmRpZlxuIFxuK1x0dmNwdS1cdTAwM2VhcmNoLnZjcHVfb3BzID0gYXJtNjRfdmNwdV9vcHNbdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bV9mbGF2b3JdO1xuK1xuIFx0LyogRm9yY2UgdXNlcnMgdG8gY2FsbCBLVk1fQVJNX1ZDUFVfSU5JVCAqL1xuIFx0dmNwdV9jbGVhcl9mbGFnKHZjcHUsIFZDUFVfSU5JVElBTElaRUQpO1xuIFxuQEAgLTY2MiwxNCArNzE1LDExIEBAIHN0YXRpYyBib29sIGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIHNpbmdsZV90YXNrX3J1bm5pbmcoKTtcbiB9XG4gXG4tdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuK3N0YXRpYyB2b2lkIHZjcHVfcHJlcGFyZV9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfbW11ICptbXU7XG4gXHRpbnQgKmxhc3RfcmFuO1xuIFxuLVx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKVxuLVx0XHRnb3RvIG5vbW11O1xuLVxuIFx0aWYgKHZjcHVfaGFzX252KHZjcHUpKVxuIFx0XHRrdm1fdmNwdV9sb2FkX2h3X21tdSh2Y3B1KTtcbiBcbkBAIC02OTksMTAgKzc0OSwzMCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdGt2bV9jYWxsX2h5cChfX2t2bV9mbHVzaF9jcHVfY29udGV4dCwgbW11KTtcbiBcdFx0Kmxhc3RfcmFuID0gdmNwdS1cdTAwM2V2Y3B1X2lkeDtcbiBcdH1cbit9XG4gXG4tbm9tbXU6XG4tXHR2Y3B1LVx1MDAzZWNwdSA9IGNwdTtcbitzdGF0aWMgdm9pZCB2Y3B1X3NldF93ZnhfdHJhcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmIChrdm1fdmNwdV9zaG91bGRfY2xlYXJfdHdlKHZjcHUpKVxuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaGNyX2VsMiBcdTAwMjY9IH5IQ1JfVFdFO1xuK1x0ZWxzZVxuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaGNyX2VsMiB8PSBIQ1JfVFdFO1xuK1xuK1x0aWYgKGt2bV92Y3B1X3Nob3VsZF9jbGVhcl90d2kodmNwdSkpXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIFx1MDAyNj0gfkhDUl9UV0k7XG4rXHRlbHNlXG4rXHRcdHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyIHw9IEhDUl9UV0k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHZjcHVfbG9hZF9wdnRpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmIChrdm1fYXJtX2lzX3B2dGltZV9lbmFibGVkKFx1MDAyNnZjcHUtXHUwMDNlYXJjaCkpXG4rXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9SRUNPUkRfU1RFQUwsIHZjcHUpO1xuK31cbiBcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbit7XG4rXHR2Y3B1X3ByZXBhcmVfbW11KHZjcHUpO1xuIFx0LypcbiBcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxuIFx0ICogaW50ZXJydXB0IGRlYWN0aXZhdGlvbiBpbiBuZXN0ZWQgc3RhdGUgKGUuZy4gdGltZXIgaW50ZXJydXB0KS5cbkBAIC03MTEsMzIgKzc4MSw2OCBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuIFx0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcbiBcdGt2bV92Y3B1X2xvYWRfZmd0KHZjcHUpO1xuLVx0aWYgKGhhc192aGUoKSlcbi1cdFx0a3ZtX3ZjcHVfbG9hZF92aGUodmNwdSk7XG4rXHRrdm1fdmNwdV9sb2FkX3ZoZSh2Y3B1KTtcbiBcdGt2bV9hcmNoX3ZjcHVfbG9hZF9mcCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2d1ZXN0KHZjcHUpO1xuLVx0aWYgKGt2bV9hcm1faXNfcHZ0aW1lX2VuYWJsZWQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbi1cdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX1JFQ09SRF9TVEVBTCwgdmNwdSk7XG4gXG4tXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3ZSh2Y3B1KSlcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgXHUwMDI2PSB+SENSX1RXRTtcbi1cdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXRTtcbitcdHZjcHVfbG9hZF9wdnRpbWUodmNwdSk7XG4rXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XG4rXHR2Y3B1X3NldF9wYXV0aF90cmFwcyh2Y3B1KTtcbit9XG4gXG4tXHRpZiAoa3ZtX3ZjcHVfc2hvdWxkX2NsZWFyX3R3aSh2Y3B1KSlcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgXHUwMDI2PSB+SENSX1RXSTtcbi1cdGVsc2Vcbi1cdFx0dmNwdS1cdTAwM2VhcmNoLmhjcl9lbDIgfD0gSENSX1RXSTtcbitzdGF0aWMgdm9pZCBudmhlX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4re1xuK1x0dmNwdV9wcmVwYXJlX21tdSh2Y3B1KTtcbitcdC8qXG4rXHQgKiBUaGUgdGltZXIgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSB2Z2ljIHRvIGNvcnJlY3RseSBzZXQgdXAgcGh5c2ljYWxcbitcdCAqIGludGVycnVwdCBkZWFjdGl2YXRpb24gaW4gbmVzdGVkIHN0YXRlIChlLmcuIHRpbWVyIGludGVycnVwdCkuXG4rXHQgKi9cbitcdGt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7XG4rXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfbG9hZF9kZWJ1Zyh2Y3B1KTtcbitcdGt2bV92Y3B1X2xvYWRfZmd0KHZjcHUpO1xuK1x0a3ZtX2FyY2hfdmNwdV9sb2FkX2ZwKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfZ3Vlc3QodmNwdSk7XG4gXG4rXHR2Y3B1X2xvYWRfcHZ0aW1lKHZjcHUpO1xuK1x0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xuIFx0dmNwdV9zZXRfcGF1dGhfdHJhcHModmNwdSk7XG4rfVxuIFxuLVx0aWYgKGlzX3Byb3RlY3RlZF9rdm1fZW5hYmxlZCgpKSB7XG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X2xvYWQsXG4tXHRcdFx0XHQgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUsXG4tXHRcdFx0XHQgIHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyKTtcbi1cdFx0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19yZXN0b3JlX3ZtY3JfYXBycyxcbi1cdFx0XHQgICAgIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS52Z2ljX3YzKTtcbi1cdH1cbitzdGF0aWMgdm9pZCBwa3ZtX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4re1xuK1x0LypcbitcdCAqIFRoZSB0aW1lciBtdXN0IGJlIGxvYWRlZCBiZWZvcmUgdGhlIHZnaWMgdG8gY29ycmVjdGx5IHNldCB1cCBwaHlzaWNhbFxuK1x0ICogaW50ZXJydXB0IGRlYWN0aXZhdGlvbiBpbiBuZXN0ZWQgc3RhdGUgKGUuZy4gdGltZXIgaW50ZXJydXB0KS5cbitcdCAqL1xuK1x0a3ZtX3RpbWVyX3ZjcHVfbG9hZCh2Y3B1KTtcbitcdGt2bV92Z2ljX2xvYWQodmNwdSk7XG4rXHRrdm1fdmNwdV9sb2FkX2RlYnVnKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfbG9hZF9mZ3QodmNwdSk7XG4rXHRrdm1fYXJjaF92Y3B1X2xvYWRfZnAodmNwdSk7XG4rXHRrdm1fdmNwdV9wbXVfcmVzdG9yZV9ndWVzdCh2Y3B1KTtcbitcbitcdHZjcHVfbG9hZF9wdnRpbWUodmNwdSk7XG4rXHR2Y3B1X3NldF93ZnhfdHJhcHModmNwdSk7XG4rXG4rXHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9sb2FkLFxuK1x0XHRcdCAgdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSxcbitcdFx0XHQgIHZjcHUtXHUwMDNldmNwdV9pZHgsIHZjcHUtXHUwMDNlYXJjaC5oY3JfZWwyKTtcbitcdGt2bV9jYWxsX2h5cChfX3ZnaWNfdjNfcmVzdG9yZV92bWNyX2FwcnMsXG4rXHRcdCAgICAgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZWFsbV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KVxuK3tcbitcdGt2bV90aW1lcl92Y3B1X2xvYWQodmNwdSk7XG4rXHRrdm1fdmdpY19sb2FkKHZjcHUpO1xuK1x0dmNwdV9zZXRfd2Z4X3RyYXBzKHZjcHUpO1xuK31cbitcbit2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4re1xuK1x0dmNwdS1cdTAwM2VjcHUgPSBjcHU7XG4rXHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMtXHUwMDNldmNwdV9sb2FkKHZjcHUsIGNwdSk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnN1cHBvcnRlZF9jcHVzKSlcbiBcdFx0dmNwdV9zZXRfb25fdW5zdXBwb3J0ZWRfY3B1KHZjcHUpO1xuQEAgLTc0NCwyOCArODUwLDUwIEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdHZjcHUtXHUwMDNlYXJjaC5waWQgPSBwaWRfbnIodmNwdS1cdTAwM2VwaWQpO1xuIH1cbiBcbi12b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgdm9pZCB2aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSkge1xuLVx0XHRrdm1fY2FsbF9oeXAoX192Z2ljX3YzX3NhdmVfYXBycywgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnZnaWNfY3B1LnZnaWNfdjMpO1xuLVx0XHRrdm1fY2FsbF9oeXBfbnZoZShfX3Brdm1fdmNwdV9wdXQpO1xuLVxuLVx0XHQvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovXG4tXHRcdGlmICgha3ZtX3ZtX2lzX3Byb3RlY3RlZCh2Y3B1LVx1MDAzZWt2bSkpXG4tXHRcdFx0dmNwdV9zZXRfZmxhZyh2Y3B1LCBQS1ZNX0hPU1RfU1RBVEVfRElSVFkpO1xuLVx0fVxuLVxuIFx0a3ZtX3ZjcHVfcHV0X2RlYnVnKHZjcHUpO1xuIFx0a3ZtX2FyY2hfdmNwdV9wdXRfZnAodmNwdSk7XG4tXHRpZiAoaGFzX3ZoZSgpKVxuLVx0XHRrdm1fdmNwdV9wdXRfdmhlKHZjcHUpO1xuK1x0a3ZtX3ZjcHVfcHV0X3ZoZSh2Y3B1KTtcbiBcdGt2bV90aW1lcl92Y3B1X3B1dCh2Y3B1KTtcbiBcdGt2bV92Z2ljX3B1dCh2Y3B1KTtcbiBcdGt2bV92Y3B1X3BtdV9yZXN0b3JlX2hvc3QodmNwdSk7XG4gXHRpZiAodmNwdV9oYXNfbnYodmNwdSkpXG4gXHRcdGt2bV92Y3B1X3B1dF9od19tbXUodmNwdSk7XG4gXHRrdm1fYXJtX3ZtaWRfY2xlYXJfYWN0aXZlKCk7XG4rfVxuIFxuK3N0YXRpYyB2b2lkIG52aGVfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGt2bV92Y3B1X3B1dF9kZWJ1Zyh2Y3B1KTtcbitcdGt2bV9hcmNoX3ZjcHVfcHV0X2ZwKHZjcHUpO1xuK1x0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xuK1x0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xuK1x0a3ZtX3ZjcHVfcG11X3Jlc3RvcmVfaG9zdCh2Y3B1KTtcbitcdGt2bV9hcm1fdm1pZF9jbGVhcl9hY3RpdmUoKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGt2bV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0a3ZtX2NhbGxfaHlwKF9fdmdpY192M19zYXZlX2FwcnMsIFx1MDAyNnZjcHUtXHUwMDNlYXJjaC52Z2ljX2NwdS52Z2ljX3YzKTtcbitcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV92Y3B1X3B1dCk7XG4rXG4rXHQvKiBfX3Brdm1fdmNwdV9wdXQgaW1wbGllcyBhIHN5bmMgb2YgdGhlIHN0YXRlICovXG4rXHRpZiAoIWt2bV92bV9pc19wcm90ZWN0ZWQodmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHR2Y3B1X3NldF9mbGFnKHZjcHUsIFBLVk1fSE9TVF9TVEFURV9ESVJUWSk7XG4rXG4rXHRudmhlX3ZjcHVfcHV0KHZjcHUpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZWFsbV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0a3ZtX3RpbWVyX3ZjcHVfcHV0KHZjcHUpO1xuK1x0a3ZtX3ZnaWNfcHV0KHZjcHUpO1xuK31cbitcbit2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHR2Y3B1LVx1MDAzZWFyY2gudmNwdV9vcHMtXHUwMDNldmNwdV9wdXQodmNwdSk7XG4gXHR2Y3B1X2NsZWFyX29uX3Vuc3VwcG9ydGVkX2NwdSh2Y3B1KTtcbiBcdHZjcHUtXHUwMDNlY3B1ID0gLTE7XG4gfVxuQEAgLTE4NTIsNiArMTk4MCwxOCBAQCBzdGF0aWMgaW50IGt2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiBfX2t2bV9hcm1fdmNwdV9zZXRfZXZlbnRzKHZjcHUsIGV2ZW50cyk7XG4gfVxuIFxuKy8qXG4rICogUmVhbG0gVkNQVXMgY2FuIGJlIGZpbmFsaXplZCBhZnRlciB0aGUgUmVhbG0gZGVzY3JpcHRvciBpcyBjcmVhdGVkLlxuKyAqIEFsbG93IHRoZSByZWdpc3RlciBsaXN0IGZvciBSRUNzIGJlZm9yZSB0aGUgVkNQVXMgYXJlIGZpbmFsaXplZCwgYnV0XG4rICogYWZ0ZXIgdGhlIFNWRSBpcyBmaW5hbGl6ZWQuXG4rICovXG4rc3RhdGljIGJvb2wga3ZtX2FybV92Y3B1X3JlZ19saXN0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdGlmIChrdm1fYXJtX3ZjcHVfaXNfZmluYWxpemVkKHZjcHUpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiB2Y3B1X2lzX3JlYyh2Y3B1KTtcbit9XG4rXG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC0xOTA3LDcgKzIwNDcsNyBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdHIgPSAtRVBFUk07XG4tXHRcdGlmICgha3ZtX2FybV92Y3B1X2lzX2ZpbmFsaXplZCh2Y3B1KSlcbitcdFx0aWYgKCFrdm1fYXJtX3ZjcHVfcmVnX2xpc3RfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0ciA9IC1FRkFVTFQ7XG5AQCAtMjEwNSw2ICsyMjQ1LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgdmhlX3ZjcHVfb3BzID0ge1xuK1x0LnZjcHVfbG9hZCA9IHZoZV92Y3B1X2xvYWQsXG4rXHQudmNwdV9wdXQgPSB2aGVfdmNwdV9wdXQsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyBudmhlX3ZjcHVfb3BzID0ge1xuK1x0LnZjcHVfbG9hZCA9IG52aGVfdmNwdV9sb2FkLFxuK1x0LnZjcHVfcHV0ID0gbnZoZV92Y3B1X3B1dCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHVfb3BzIHBrdm1fdmNwdV9vcHMgPSB7XG4rXHQudmNwdV9sb2FkID0gcGt2bV92Y3B1X2xvYWQsXG4rXHQudmNwdV9wdXQgPSBwa3ZtX3ZjcHVfcHV0LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdmNwdV9vcHMgcmVhbG1fdmNwdV9vcHMgPSB7XG4rXHQudmNwdV9sb2FkID0gcmVhbG1fdmNwdV9sb2FkLFxuK1x0LnZjcHVfcHV0ID0gcmVhbG1fdmNwdV9wdXQsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92Y3B1X29wcyAqYXJtNjRfdmNwdV9vcHNbXSA9IHtcbitcdFtWTV9WSEVdID0gXHUwMDI2dmhlX3ZjcHVfb3BzLFxuK1x0W1ZNX05WSEVdID0gXHUwMDI2bnZoZV92Y3B1X29wcyxcbitcdFtWTV9QS1ZNXSA9IFx1MDAyNnBrdm1fdmNwdV9vcHMsXG4rXHRbVk1fUFJPVEVDVEVEX1BLVk1dID0gXHUwMDI2cGt2bV92Y3B1X29wcyxcbitcdFtWTV9SRUFMTV0gPSBcdTAwMjZyZWFsbV92Y3B1X29wcyxcbit9O1xuK1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG52aGVfcGVyY3B1X3NpemUodm9pZClcbiB7XG4gXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpQ0hPT1NFX05WSEVfU1lNKF9fcGVyX2NwdV9lbmQpIC1cbkBAIC0zMDUwLDYgKzMyMTgsOCBAQCBzdGF0aWMgX19pbml0IGludCBrdm1fYXJtX2luaXQodm9pZClcbiBcbiBcdGluX2h5cF9tb2RlID0gaXNfa2VybmVsX2luX2h5cF9tb2RlKCk7XG4gXG4rXHRrdm1faW5pdF9ybWkoKTtcbitcbiBcdGlmIChjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfREVWSUNFX0xPQURfQUNRVUlSRSkgfHxcbiBcdCAgICBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X1dPUktBUk9VTkRfMTUwODQxMikpXG4gXHRcdGt2bV9pbmZvKFwiR3Vlc3RzIHdpdGhvdXQgcmVxdWlyZWQgQ1BVIGVycmF0dW0gd29ya2Fyb3VuZHMgY2FuIGRlYWRsb2NrIHN5c3RlbSFcXG5cIiBcXFxuQEAgLTMxNTUsNiArMzMyNSwxMSBAQCBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9rdm1fbW9kZV9jZmcoY2hhciAqYXJnKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbitcdGlmIChzdHJjbXAoYXJnLCBcInJtbVwiKSA9PSAwIFx1MDAyNlx1MDAyNiAhV0FSTl9PTighaXNfa2VybmVsX2luX2h5cF9tb2RlKCkpKSB7XG4rXHRcdGt2bV9tb2RlID0gS1ZNX01PREVfUk1NO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBlYXJseV9wYXJhbShcImt2bS1hcm0ubW9kZVwiLCBlYXJseV9rdm1fbW9kZV9jZmcpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2d1ZXN0LmMgYi9hcmNoL2FybTY0L2t2bS9ndWVzdC5jXG5pbmRleCBiMDFkNjYyMmI4NzIwLi42YmVjNzNkMWVlMDUwIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vZ3Vlc3QuY1xuQEAgLTU5OCw4ICs1OTgsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtX3N2ZV9yZWdzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdmNwdV9oYXNfc3ZlKHZjcHUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFBvbGljZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDogKi9cbi1cdFdBUk5fT04oIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKTtcbitcdGlmICgha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpXG4rXHRcdHJldHVybiAxOyAvKiBLVk1fUkVHX0FSTTY0X1NWRV9WTFMgKi9cbitcbitcdGlmIChrdm1fdm1faXNfcmVhbG0odmNwdS1cdTAwM2Vrdm0pKVxuK1x0XHRyZXR1cm4gMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXG4gXG4gXHRyZXR1cm4gc2xpY2VzICogKFNWRV9OVU1fUFJFR1MgKyBTVkVfTlVNX1pSRUdTICsgMSAvKiBGRlIgKi8pXG4gXHRcdCsgMTsgLyogS1ZNX1JFR19BUk02NF9TVkVfVkxTICovXG5AQCAtNjE2LDkgKzYxOSw2IEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aWYgKCF2Y3B1X2hhc19zdmUodmNwdSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogUG9saWNlZCBieSBLVk1fR0VUX1JFR19MSVNUOiAqL1xuLVx0V0FSTl9PTigha3ZtX2FybV92Y3B1X3N2ZV9maW5hbGl6ZWQodmNwdSkpO1xuLVxuIFx0LypcbiBcdCAqIEVudW1lcmF0ZSB0aGlzIGZpcnN0LCBzbyB0aGF0IHVzZXJzcGFjZSBjYW4gc2F2ZS9yZXN0b3JlIGluXG4gXHQgKiB0aGUgb3JkZXIgcmVwb3J0ZWQgYnkgS1ZNX0dFVF9SRUdfTElTVDpcbkBAIC02MjgsNiArNjI4LDEyIEBAIHN0YXRpYyBpbnQgY29weV9zdmVfcmVnX2luZGljZXMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdCsrbnVtX3JlZ3M7XG4gXG4rXHRpZiAoIWt2bV9hcm1fdmNwdV9zdmVfZmluYWxpemVkKHZjcHUpKVxuK1x0XHRyZXR1cm4gbnVtX3JlZ3M7XG4rXG4rXHRpZiAoa3ZtX3ZtX2lzX3JlYWxtKHZjcHUtXHUwMDNla3ZtKSlcbitcdFx0cmV0dXJuIG51bV9yZWdzO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2xpY2VzOyBpKyspIHtcbiBcdFx0Zm9yIChuID0gMDsgbiBcdTAwM2MgU1ZFX05VTV9aUkVHUzsgbisrKSB7XG4gXHRcdFx0cmVnID0gS1ZNX1JFR19BUk02NF9TVkVfWlJFRyhuLCBpKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbmluZGV4IDQ1OWJkOWViN2U0YmMuLjA5OTYxYzAwNTZmMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uY1xuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3Brdm1faHlwX3ZtKHN0cnVjdCBrdm0gKmhvc3Rfa3ZtLCBzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSxcbiBcbiBcdGh5cF92bS1cdTAwM2Vob3N0X2t2bSA9IGhvc3Rfa3ZtO1xuIFx0aHlwX3ZtLVx1MDAzZWt2bS5jcmVhdGVkX3ZjcHVzID0gbnJfdmNwdXM7XG4tXHRoeXBfdm0tXHUwMDNla3ZtLmFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBSRUFEX09OQ0UoaG9zdF9rdm0tXHUwMDNlYXJjaC5wa3ZtLmlzX3Byb3RlY3RlZCk7XG4rXHRoeXBfdm0tXHUwMDNla3ZtLmFyY2gudm1fZmxhdm9yID0gUkVBRF9PTkNFKGhvc3Rfa3ZtLVx1MDAzZWFyY2gudm1fZmxhdm9yKTtcbiBcdGh5cF92bS1cdTAwM2Vrdm0uYXJjaC5mbGFncyA9IDA7XG4gXHRwa3ZtX2luaXRfZmVhdHVyZXNfZnJvbV9ob3N0KGh5cF92bSwgaG9zdF9rdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5pbmRleCBiNzRkZDVjZTFlZmQzLi5mNDgyNTNiOWQ4OGI1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuQEAgLTgsNiArOCw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX3BndGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFnZTJfcGd0YWJsZS5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jIGIvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXG5pbmRleCBiMTFiODgyMWM5ZmJjLi4yYjFlNmZkZWI0ZDVjIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXBlcmNhbGxzLmNcbkBAIC00MTQsMTQgKzQxNCwxNCBAQCB2b2lkIGt2bV9hcm1fdGVhcmRvd25faHlwZXJjYWxscyhzdHJ1Y3Qga3ZtICprdm0pXG4gXG4gaW50IGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRyZXR1cm4gQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpO1xuK1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IEFSUkFZX1NJWkUoa3ZtX2FybV9md19yZWdfaWRzKTtcbiB9XG4gXG4gaW50IGt2bV9hcm1fY29weV9md19yZWdfaW5kaWNlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShrdm1fYXJtX2Z3X3JlZ19pZHMpOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV9hcm1fZ2V0X2Z3X251bV9yZWdzKHZjcHUpOyBpKyspIHtcbiBcdFx0aWYgKHB1dF91c2VyKGt2bV9hcm1fZndfcmVnX2lkc1tpXSwgdWluZGljZXMrKykpXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuY1xuaW5kZXggZDZjNGZjMTZmODc5NS4uZDYxYTNmZjA0ZmFiYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuY1xuQEAgLTMxNyw2ICszMTcsNyBAQCB2b2lkIGt2bV9pbmplY3Rfc2l6ZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICovXG4gdm9pZCBrdm1faW5qZWN0X3VuZGVmaW5lZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuK1x0S1ZNX0JVRyh2Y3B1X2lzX3JlYyh2Y3B1KSwgdmNwdS1cdTAwM2Vrdm0sIFwiVW5leHBlY3RlZCB1bmRlZmluZWQgZXhjZXB0aW9uIGluamVjdGlvbiB0byBSRUNcIik7XG4gXHRpZiAodmNwdV9lbDFfaXNfMzJiaXQodmNwdSkpXG4gXHRcdGluamVjdF91bmRlZjMyKHZjcHUpO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21taW8uYyBiL2FyY2gvYXJtNjQva3ZtL21taW8uY1xuaW5kZXggZDFjM2EzNTJkNWEyMi4uYmJjZjUyZjAxZTkxMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21taW8uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW1pby5jXG5AQCAtMTY4LDE0ICsxNjgsMTQgQEAgaW50IGlvX21lbV9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGZhdWx0X2lwYSlcbiBcdCAqIE5vIHZhbGlkIHN5bmRyb21lPyBBc2sgdXNlcnNwYWNlIGZvciBoZWxwIGlmIGl0IGhhc1xuIFx0ICogdm9sdW50ZWVyZWQgdG8gZG8gc28sIGFuZCBiYWlsIG91dCBvdGhlcndpc2UuXG4gXHQgKlxuLVx0ICogSW4gdGhlIHByb3RlY3RlZCBWTSBjYXNlLCB0aGVyZSBpc24ndCBtdWNoIHVzZXJzcGFjZSBjYW4gZG9cbitcdCAqIEluIHRoZSBwcm90ZWN0ZWQvUmVhbG0gVk0gY2FzZSwgdGhlcmUgaXNuJ3QgbXVjaCB1c2Vyc3BhY2UgY2FuIGRvXG4gXHQgKiB0aG91Z2gsIHNvIGRpcmVjdGx5IGRlbGl2ZXIgYW4gZXhjZXB0aW9uIHRvIHRoZSBndWVzdC5cbiBcdCAqL1xuIFx0aWYgKCFrdm1fdmNwdV9kYWJ0X2lzdmFsaWQodmNwdSkpIHtcbiBcdFx0dHJhY2Vfa3ZtX21taW9fbmlzdigqdmNwdV9wYyh2Y3B1KSwgZXNyLFxuIFx0XHRcdFx0ICAgIGt2bV92Y3B1X2dldF9oZmFyKHZjcHUpLCBmYXVsdF9pcGEpO1xuIFxuLVx0XHRpZiAodmNwdV9pc19wcm90ZWN0ZWQodmNwdSkpXG4rXHRcdGlmICh2Y3B1X2lzX2NvbmZpZGVudGlhbCh2Y3B1KSlcbiBcdFx0XHRyZXR1cm4ga3ZtX2luamVjdF9zZWFfZGFidCh2Y3B1LCBrdm1fdmNwdV9nZXRfaGZhcih2Y3B1KSk7XG4gXG4gXHRcdGlmICh0ZXN0X2JpdChLVk1fQVJDSF9GTEFHX1JFVFVSTl9OSVNWX0lPX0FCT1JUX1RPX1VTRVIsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuaW5kZXggOWJhODY0NTBmZTRhZi4uNWU3Y2RiZTMxMGZjOCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTM3LDYgKzM3LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fcm9fYWZ0ZXJfaW5pdCBpb19tYXBfYmFzZTtcbiBcbiAjZGVmaW5lIEtWTV9QR1RfRk4oZm4pXHRcdCghaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkgPyBmbiA6IHAgIyMgZm4pXG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIHByb3RlY3RlZF9wa3ZtX3MyX29wcztcbitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV92bV9zMl9vcHMgdW5wcm90ZWN0ZWRfcGt2bV9zMl9vcHM7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIGt2bV9kZWZhdWx0X3ZtX3MyX29wcztcbitcbiBzdGF0aWMgcGh5c19hZGRyX3QgX19zdGFnZTJfcmFuZ2VfYWRkcl9lbmQocGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kLFxuIFx0XHRcdFx0XHQgICBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbkBAIC0xNjYsNiArMTcwLDE4IEBAIHN0YXRpYyBib29sIG1lbXNsb3RfaXNfbG9nZ2luZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90KVxuIFx0cmV0dXJuIG1lbXNsb3QtXHUwMDNlZGlydHlfYml0bWFwIFx1MDAyNlx1MDAyNiAhKG1lbXNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fUkVBRE9OTFkpO1xuIH1cbiBcbitzdGF0aWMgaW50IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcbit7XG4rXHRrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICoga3ZtX2FyY2hfZmx1c2hfcmVtb3RlX3RsYnMoKSAtIGZsdXNoIGFsbCBWTSBUTEIgZW50cmllcyBmb3IgdjcvOFxuICAqIEBrdm06XHRwb2ludGVyIHRvIGt2bSBzdHJ1Y3R1cmUuXG5AQCAtMTc0LDI2ICsxOTAsMzYgQEAgc3RhdGljIGJvb2wgbWVtc2xvdF9pc19sb2dnaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpXG4gICovXG4gaW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4tXHRpZiAoaXNfcHJvdGVjdGVkX2t2bV9lbmFibGVkKCkpXG4tXHRcdGt2bV9jYWxsX2h5cF9udmhlKF9fcGt2bV90bGJfZmx1c2hfdm1pZCwga3ZtLVx1MDAzZWFyY2gucGt2bS5oYW5kbGUpO1xuLVx0ZWxzZVxuLVx0XHRrdm1fY2FsbF9oeXAoX19rdm1fdGxiX2ZsdXNoX3ZtaWQsIFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSk7XG4tXHRyZXR1cm4gMDtcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2ZsdXNoX3JlbW90ZV90bGJzKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTtcbiB9XG4gXG4taW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbi1cdFx0XHRcdCAgICAgIGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuK3N0YXRpYyBpbnQgcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShzdHJ1Y3Qga3ZtICprdm0sXG4rXHRcdFx0XHRcdGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3ZtX3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0IGdmbl90IGdmbiwgdTY0IG5yX3BhZ2VzKVxuIHtcbiBcdHU2NCBzaXplID0gbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHR1NjQgYWRkciA9IGdmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdGlmIChpc19wcm90ZWN0ZWRfa3ZtX2VuYWJsZWQoKSlcbi1cdFx0a3ZtX2NhbGxfaHlwX252aGUoX19wa3ZtX3RsYl9mbHVzaF92bWlkLCBrdm0tXHUwMDNlYXJjaC5wa3ZtLmhhbmRsZSk7XG4tXHRlbHNlXG4tXHRcdGt2bV90bGJfZmx1c2hfdm1pZF9yYW5nZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5tbXUsIGFkZHIsIHNpemUpO1xuK1x0a3ZtX3RsYl9mbHVzaF92bWlkX3JhbmdlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgYWRkciwgc2l6ZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGt2bV9hcmNoX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdCAgICAgZ2ZuX3QgZ2ZuLCB1NjQgbnJfcGFnZXMpXG4re1xuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGdmbiwgbnJfcGFnZXMpO1xuK31cbitcbiBzdGF0aWMgdm9pZCAqc3RhZ2UyX21lbWNhY2hlX3phbGxvY19wYWdlKHZvaWQgKmFyZylcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jID0gYXJnO1xuQEAgLTMzNywxMyArMzYzLDIwIEBAIHN0YXRpYyB2b2lkIF9fdW5tYXBfc3RhZ2UyX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHBoeXNfYWRkcl90IHN0YXJ0LCB1NjRcbiBcdFx0XHRcdCAgIG1heV9ibG9jaykpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsXG4rXHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdCAgICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaylcbit7XG4rXHRfX3VubWFwX3N0YWdlMl9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spO1xuK31cbitcbiB2b2lkIGt2bV9zdGFnZTJfdW5tYXBfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgcGh5c19hZGRyX3Qgc3RhcnQsXG4gXHRcdFx0ICAgIHU2NCBzaXplLCBib29sIG1heV9ibG9jaylcbiB7XG4tXHRpZiAoa3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm1fczJfbW11X3RvX2t2bShtbXUpKSlcbi1cdFx0cmV0dXJuO1xuK1x0c3RydWN0IGt2bSAqa3ZtID0ga3ZtX3MyX21tdV90b19rdm0obW11KTtcbiBcbi1cdF9fdW5tYXBfc3RhZ2UyX3JhbmdlKG1tdSwgc3RhcnQsIHNpemUsIG1heV9ibG9jayk7XG4rXHRpZiAoa3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3N0YWdlMl91bm1hcF9yYW5nZSlcbitcdFx0a3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3N0YWdlMl91bm1hcF9yYW5nZShtbXUsIHN0YXJ0LCBzaXplLCBtYXlfYmxvY2spO1xuIH1cbiBcbiB2b2lkIGt2bV9zdGFnZTJfZmx1c2hfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgcGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3QgZW5kKVxuQEAgLTk2Myw2ICs5OTYsMTggQEAgc3RhdGljIHZvaWQga3ZtX3N0YWdlMl9kZXN0cm95KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0KVxuIFx0S1ZNX1BHVF9GTihrdm1fcGd0YWJsZV9zdGFnZTJfZGVzdHJveV9wZ2QpKHBndCk7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyAqYXJtNjRfdm1fczJfb3BzW1ZNX0ZMQVZPUl9NQVhdID0ge1xuK1x0W1ZNX1ZIRV0gPSBcdTAwMjZrdm1fZGVmYXVsdF92bV9zMl9vcHMsXG4rXHRbVk1fTlZIRV0gPSBcdTAwMjZrdm1fZGVmYXVsdF92bV9zMl9vcHMsXG4rXHRbVk1fUEtWTV0gPSBcdTAwMjZ1bnByb3RlY3RlZF9wa3ZtX3MyX29wcyxcbitcdFtWTV9QUk9URUNURURfUEtWTV0gPSBcdTAwMjZwcm90ZWN0ZWRfcGt2bV9zMl9vcHMsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBrdm1fdm1faW5pdF92bV9zMl9vcHMoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4re1xuK1x0a3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzID0gYXJtNjRfdm1fczJfb3BzW2t2bS1cdTAwM2VhcmNoLnZtX2ZsYXZvcl07XG4rfVxuK1xuIC8qKlxuICAqIGt2bV9pbml0X3N0YWdlMl9tbXUgLSBJbml0aWFsaXNlIGEgUzIgTU1VIHN0cnVjdHVyZVxuICAqIEBrdm06XHRUaGUgcG9pbnRlciB0byB0aGUgS1ZNIHN0cnVjdHVyZVxuQEAgLTk4Myw2ICsxMDI4LDkgQEAgaW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHRcbiBcdGludCBjcHUsIGVycjtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0O1xuIFxuK1x0LyogSW5pdGlhbGl6ZSB0aGUgVk0gb3BzIGZvciB0aGUgVk0gaW5zdGFuY2UgZm9yIHRoZSBmaXJzdCB0aW1lICovXG4rXHRpZiAobW11ID09IFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSlcbitcdFx0a3ZtX3ZtX2luaXRfdm1fczJfb3BzKGt2bSwgdHlwZSk7XG4gXHQvKlxuIFx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIG91ciBwYWdlIHRhYmxlcyBpbiBwbGFjZSwgYW5kIHRoYXQgdGhlXG4gXHQgKiBNTVUgY29udGV4dCBpcyB0aGUgY2Fub25pY2FsIG9uZSwgd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUsXG5AQCAtMTcwNSw3ICsxNzUzLDcgQEAgc3RydWN0IGt2bV9zMl9mYXVsdF92bWFfaW5mbyB7XG4gXHRib29sXHRcdG1hcF9ub25fY2FjaGVhYmxlO1xuIH07XG4gXG4tc3RhdGljIGludCBwa3ZtX21lbV9hYm9ydChjb25zdCBzdHJ1Y3Qga3ZtX3MyX2ZhdWx0X2Rlc2MgKnMyZmQpXG4rc3RhdGljIGludCBwcm90ZWN0ZWRfdm1fbWVtX2Fib3J0KGNvbnN0IHN0cnVjdCBrdm1fczJfZmF1bHRfZGVzYyAqczJmZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBGT0xMX0hXUE9JU09OIHwgRk9MTF9MT05HVEVSTSB8IEZPTExfV1JJVEU7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLVx1MDAzZXZjcHU7XG5AQCAtMjE0Myw2ICsyMTkxLDIyIEBAIHN0YXRpYyBpbnQgdXNlcl9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuIFx0cmV0dXJuIGt2bV9zMl9mYXVsdF9tYXAoczJmZCwgXHUwMDI2czJ2aSwgcHJvdCwgbWVtY2FjaGUpO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV92bV9tZW1fYWJvcnQoY29uc3Qgc3RydWN0IGt2bV9zMl9mYXVsdF9kZXNjICpzMmZkKVxuK3tcbitcdGludCByZXQ7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzMmZkLVx1MDAzZXZjcHU7XG4rXG4rXHRWTV9XQVJOX09OX09OQ0Uoa3ZtX3ZjcHVfdHJhcF9pc19wZXJtaXNzaW9uX2ZhdWx0KHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCFrdm1faXNfd3JpdGVfZmF1bHQodmNwdSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IWt2bV92Y3B1X3RyYXBfaXNfZXhlY19mYXVsdCh2Y3B1KSk7XG4rXG4rXHRpZiAoa3ZtX3Nsb3RfaGFzX2dtZW0oczJmZC1cdTAwM2VtZW1zbG90KSlcbitcdFx0cmV0ID0gZ21lbV9hYm9ydChzMmZkKTtcbitcdGVsc2VcbitcdFx0cmV0ID0gdXNlcl9tZW1fYWJvcnQoczJmZCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKiBSZXNvbHZlIHRoZSBhY2Nlc3MgZmF1bHQgYnkgbWFraW5nIHRoZSBwYWdlIHlvdW5nIGFnYWluLiAqL1xuIHN0YXRpYyB2b2lkIGhhbmRsZV9hY2Nlc3NfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBmYXVsdF9pcGEpXG4ge1xuQEAgLTIyNTAsNiArMjMxNCw3IEBAIGludCBrdm1faGFuZGxlX2d1ZXN0X3NlYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fczJfdHJhbnMgbmVzdGVkX3RyYW5zLCAqbmVzdGVkID0gTlVMTDtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0dW5zaWduZWQgbG9uZyBlc3I7XG4gXHRwaHlzX2FkZHJfdCBmYXVsdF9pcGE7IC8qIFRoZSBhZGRyZXNzIHdlIGZhdWx0ZWQgb24gKi9cbiBcdHBoeXNfYWRkcl90IGlwYTsgLyogQWx3YXlzIHRoZSBJUEEgaW4gdGhlIEwxIGd1ZXN0IHBoeXMgc3BhY2UgKi9cbkBAIC0yNDExLDE5ICsyNDc2LDcgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHQuaHZhXHRcdD0gaHZhLFxuIFx0fTtcbiBcbi1cdGlmIChrdm1fdm1faXNfcHJvdGVjdGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuLVx0XHRyZXQgPSBwa3ZtX21lbV9hYm9ydChcdTAwMjZzMmZkKTtcbi1cdH0gZWxzZSB7XG4tXHRcdFZNX1dBUk5fT05fT05DRShrdm1fdmNwdV90cmFwX2lzX3Blcm1pc3Npb25fZmF1bHQodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQhd3JpdGVfZmF1bHQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQha3ZtX3ZjcHVfdHJhcF9pc19leGVjX2ZhdWx0KHZjcHUpKTtcbi1cbi1cdFx0aWYgKGt2bV9zbG90X2hhc19nbWVtKG1lbXNsb3QpKVxuLVx0XHRcdHJldCA9IGdtZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSB1c2VyX21lbV9hYm9ydChcdTAwMjZzMmZkKTtcbi1cdH1cbi1cbitcdHJldCA9IGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV9tZW1fYWJvcnQoXHUwMDI2czJmZCk7XG4gXHRpZiAocmV0ID09IDApXG4gXHRcdHJldCA9IDE7XG4gb3V0OlxuQEAgLTI0MzYsMzggKzI0ODksNDMgQEAgaW50IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIGJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRfX3VubWFwX3N0YWdlMl9yYW5nZShcdTAwMjZrdm0tXHUwMDNlYXJjaC5tbXUsIHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuLVx0XHRcdCAgICAgKHJhbmdlLVx1MDAzZWVuZCAtIHJhbmdlLVx1MDAzZXN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbi1cdFx0XHQgICAgIHJhbmdlLVx1MDAzZW1heV9ibG9jayk7XG4rXHRrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgcmFuZ2UtXHUwMDNlc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHQocmFuZ2UtXHUwMDNlZW5kIC0gcmFuZ2UtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuK1x0XHRcdFx0cmFuZ2UtXHUwMDNlbWF5X2Jsb2NrKTtcbiBcbiBcdGt2bV9uZXN0ZWRfczJfdW5tYXAoa3ZtLCByYW5nZS1cdTAwM2VtYXlfYmxvY2spO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuK3N0YXRpYyBib29sIGt2bV92bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIHtcbiBcdHU2NCBzaXplID0gKHJhbmdlLVx1MDAzZWVuZCAtIHJhbmdlLVx1MDAzZXN0YXJ0KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcbi1cdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCBrdm1fdm1faXNfcHJvdGVjdGVkKGt2bSkpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbiBcdHJldHVybiBLVk1fUEdUX0ZOKGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKShrdm0tXHUwMDNlYXJjaC5tbXUucGd0LFxuIFx0XHRcdFx0XHRcdCAgIHJhbmdlLVx1MDAzZXN0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0XHRcdCAgIHNpemUsIHRydWUpO1xuK31cbitcbitib29sIGt2bV9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuK3tcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCAha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX2FnZV9nZm4pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBrdm0tXHUwMDNlYXJjaC52bV9zMl9vcHMtXHUwMDNldm1fYWdlX2dmbihrdm0sIHJhbmdlKTtcbiBcdC8qXG4gXHQgKiBUT0RPOiBIYW5kbGUgbmVzdGVkX21tdSBzdHJ1Y3R1cmVzIGhlcmUgdXNpbmcgdGhlIHJldmVyc2UgbWFwcGluZyBpblxuIFx0ICogYSBsYXRlciB2ZXJzaW9uIG9mIHBhdGNoIHNlcmllcy5cbiBcdCAqL1xuIH1cbiBcbi1ib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4rc3RhdGljIGJvb2wga3ZtX3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB7XG4gXHR1NjQgc2l6ZSA9IChyYW5nZS1cdTAwM2VlbmQgLSByYW5nZS1cdTAwM2VzdGFydCkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG4tXHRpZiAoIWt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QgfHwga3ZtX3ZtX2lzX3Byb3RlY3RlZChrdm0pKVxuK1x0aWYgKCFrdm0tXHUwMDNlYXJjaC5tbXUucGd0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRyZXR1cm4gS1ZNX1BHVF9GTihrdm1fcGd0YWJsZV9zdGFnZTJfdGVzdF9jbGVhcl95b3VuZykoa3ZtLVx1MDAzZWFyY2gubW11LnBndCxcbkBAIC0yNDc1LDYgKzI1MzMsMTUgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuIFx0XHRcdFx0XHRcdCAgIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4rYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuK3tcbitcbitcdGlmICgha3ZtLVx1MDAzZWFyY2gubW11LnBndCB8fCAha3ZtLVx1MDAzZWFyY2gudm1fczJfb3BzLVx1MDAzZXZtX3Rlc3RfYWdlX2dmbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIGt2bS1cdTAwM2VhcmNoLnZtX3MyX29wcy1cdTAwM2V2bV90ZXN0X2FnZV9nZm4oa3ZtLCByYW5nZSk7XG4rfVxuK1xuIHBoeXNfYWRkcl90IGt2bV9tbXVfZ2V0X2h0dGJyKHZvaWQpXG4ge1xuIFx0cmV0dXJuIF9fcGEoaHlwX3BndGFibGUtXHUwMDNlcGdkKTtcbkBAIC0yNzk2LDMgKzI4NjMsMzMgQEAgdm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YXNfZW5hYmxlZClcbiBcbiBcdHRyYWNlX2t2bV90b2dnbGVfY2FjaGUoKnZjcHVfcGModmNwdSksIHdhc19lbmFibGVkLCBub3dfZW5hYmxlZCk7XG4gfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwcm90ZWN0ZWRfdm1fczJfb3BzID0ge1xuK1x0LnZtX2ZsdXNoX3JlbW90ZV90bGJzXHRcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxicyxcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBwa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlLFxuK1x0LypcbitcdCAqIE5vdCBzdXBwb3J0ZWQgZm9yIFByb3RlY3RlZCBWTXMgdW5kZXIgcEtWTVxuK1x0ICogLnZtX2FnZV9nZm5cbitcdCAqIC52bV90ZXN0X2FnZV9nZm5cbitcdCAqIC52bV9zdGFnZTJfdW5tYXBfcmFuZ2VcbitcdCAqL1xuK1x0LnZtX21lbV9hYm9ydFx0XHRcdD0gcHJvdGVjdGVkX3ZtX21lbV9hYm9ydCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX3ZtX3MyX29wcyBwa3ZtX3ZtX3MyX29wcyA9IHtcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic1x0XHQ9IHBrdm1fZmx1c2hfcmVtb3RlX3RsYnMsXG4rXHQudm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2VcdD0gcGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZSxcbitcdC52bV9hZ2VfZ2ZuXHRcdFx0PSBrdm1fdm1fYWdlX2dmbixcbitcdC52bV90ZXN0X2FnZV9nZm5cdFx0PSBrdm1fdm1fdGVzdF9hZ2VfZ2ZuLFxuK1x0LnZtX3N0YWdlMl91bm1hcF9yYW5nZVx0XHQ9IGt2bV92bV9zdGFnZTJfdW5tYXBfcmFuZ2UsXG4rXHQudm1fbWVtX2Fib3J0XHRcdFx0PSBrdm1fdm1fbWVtX2Fib3J0LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1fdm1fczJfb3BzIGt2bV9kZWZhdWx0X3ZtX3MyX29wcyA9IHtcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic1x0XHQ9IGt2bV92bV9mbHVzaF9yZW1vdGVfdGxicyxcbitcdC52bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZVx0PSBrdm1fdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UsXG4rXHQudm1fYWdlX2dmblx0XHRcdD0ga3ZtX3ZtX2FnZV9nZm4sXG4rXHQudm1fdGVzdF9hZ2VfZ2ZuXHRcdD0ga3ZtX3ZtX3Rlc3RfYWdlX2dmbixcbitcdC52bV9zdGFnZTJfdW5tYXBfcmFuZ2VcdFx0PSBrdm1fdm1fc3RhZ2UyX3VubWFwX3JhbmdlLFxuK1x0LnZtX21lbV9hYm9ydFx0XHRcdD0ga3ZtX3ZtX21lbV9hYm9ydCxcbit9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uYyBiL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xuaW5kZXggOGU0YzZlNGJlYzEyMy4uMzk0OGZhNDZmNGQ3NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3Brdm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vcGt2bS5jXG5AQCAtMjQwLDcgKzI0MCw2IEBAIGludCBwa3ZtX2luaXRfaG9zdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGt2bS1cdTAwM2VhcmNoLnBrdm0uaGFuZGxlID0gcmV0O1xuLVx0a3ZtLVx1MDAzZWFyY2gucGt2bS5pc19wcm90ZWN0ZWQgPSBwcm90ZWN0ZWQ7XG4gXHRpZiAocHJvdGVjdGVkKSB7XG4gXHRcdHByX3dhcm5fb25jZShcImt2bTogcHJvdGVjdGVkIFZNcyBhcmUgZXhwZXJpbWVudGFsIGFuZCBmb3IgZGV2ZWxvcG1lbnQgb25seSwgdGFpbnRpbmcga2VybmVsXFxuXCIpO1xuIFx0XHRhZGRfdGFpbnQoVEFJTlRfVVNFUiwgTE9DS0RFUF9TVElMTF9PSyk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vcHZ0aW1lLmMgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuaW5kZXggNGNlYWJhYTRjMzBiZC4uNDFmYmZkOTJjZDI5MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL3B2dGltZS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9wdnRpbWUuY1xuQEAgLTY3LDkgKzY3LDkgQEAgZ3BhX3Qga3ZtX2luaXRfc3RvbGVuX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIGJhc2U7XG4gfVxuIFxuLWJvb2wga3ZtX2FybV9wdnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4rYm9vbCBrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi1cdHJldHVybiAhIXNjaGVkX2luZm9fb24oKTtcbitcdHJldHVybiAhIXNjaGVkX2luZm9fb24oKSBcdTAwMjZcdTAwMjYgKCFrdm0gfHwgIWt2bV92bV9pc19jb25maWRlbnRpYWwoa3ZtKSk7XG4gfVxuIFxuIGludCBrdm1fYXJtX3B2dGltZV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5AQCAtODEsNyArODEsNyBAQCBpbnQga3ZtX2FybV9wdnRpbWVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0aW50IHJldCA9IDA7XG4gXHRpbnQgaWR4O1xuIFxuLVx0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSB8fFxuK1x0aWYgKCFrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoa3ZtKSB8fFxuIFx0ICAgIGF0dHItXHUwMDNlYXR0ciAhPSBLVk1fQVJNX1ZDUFVfUFZUSU1FX0lQQSlcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcbkBAIC0xMTAsNyArMTEwLDcgQEAgaW50IGt2bV9hcm1fcHZ0aW1lX2dldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHU2NCBfX3VzZXIgKnVzZXIgPSAodTY0IF9fdXNlciAqKWF0dHItXHUwMDNlYWRkcjtcbiBcdHU2NCBpcGE7XG4gXG4tXHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCgpIHx8XG4rXHRpZiAoIWt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVx1MDAzZWt2bSkgfHxcbiBcdCAgICBhdHRyLVx1MDAzZWF0dHIgIT0gS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEEpXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXG5AQCAtMTI2LDcgKzEyNiw3IEBAIGludCBrdm1fYXJtX3B2dGltZV9oYXNfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3dpdGNoIChhdHRyLVx1MDAzZWF0dHIpIHtcbiBcdGNhc2UgS1ZNX0FSTV9WQ1BVX1BWVElNRV9JUEE6XG4tXHRcdGlmIChrdm1fYXJtX3B2dGltZV9zdXBwb3J0ZWQoKSlcbitcdFx0aWYgKGt2bV9hcm1fcHZ0aW1lX3N1cHBvcnRlZCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gLUVOWElPO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL3JtaS5jIGIvYXJjaC9hcm02NC9rdm0vcm1pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41ZWNjOGIzNDk4Njk4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2t2bS9ybWkuY1xuQEAgLTAsMCArMSwxOCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNiBBUk0gTHRkLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2Nhc20vdmlydC5oXHUwMDNlXG4rXG4rdm9pZCBrdm1faW5pdF9ybWkodm9pZClcbit7XG4rXHRpZiAoa3ZtX2dldF9tb2RlKCkgIT0gS1ZNX01PREVfUk1NKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBUT0RPOiBDaGVjayBpZiB0aGUgUk1JIGlzIGF2YWlsYWJsZSAqL1xuK1xuK1x0LyogRnV0dXJlIHBhdGNoIHdpbGwgZW5hYmxlIHN0YXRpYyBicmFuY2gga3ZtX3JtaV9pc19hdmFpbGFibGUgKi9cbit9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmNcbmluZGV4IDQ0YWFlNTJjNDczZDcuLmE1OGMxZmMxM2VhMTcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jXG5AQCAtNTYzOCwxOCArNTYzOCwxOCBAQCBpbnQga3ZtX2FybV9zeXNfcmVnX3NldF9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBzdHJ1Y3Qga3ZtX29uZV9yZWcgKnJlZ1xuIFx0XHRcdFx0ICAgIHN5c19yZWdfZGVzY3MsIEFSUkFZX1NJWkUoc3lzX3JlZ19kZXNjcykpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IG51bV9kZW11eF9yZWdzKHZvaWQpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtX2RlbXV4X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBDU1NFTFJfTUFYO1xuK1x0cmV0dXJuIHZjcHVfaXNfcmVjKHZjcHUpID8gMCA6IENTU0VMUl9NQVg7XG4gfVxuIFxuLXN0YXRpYyBpbnQgd3JpdGVfZGVtdXhfcmVnaWRzKHU2NCBfX3VzZXIgKnVpbmRpY2VzKVxuK3N0YXRpYyBpbnQgd3JpdGVfZGVtdXhfcmVnaWRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXG4ge1xuIFx0dTY0IHZhbCA9IEtWTV9SRUdfQVJNNjQgfCBLVk1fUkVHX1NJWkVfVTMyIHwgS1ZNX1JFR19BUk1fREVNVVg7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdHZhbCB8PSBLVk1fUkVHX0FSTV9ERU1VWF9JRF9DQ1NJRFI7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NFTFJfTUFYOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9kZW11eF9yZWdzKHZjcHUpOyBpKyspIHtcbiBcdFx0aWYgKHB1dF91c2VyKHZhbCB8IGksIHVpbmRpY2VzKSlcbiBcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0dWluZGljZXMrKztcbkBAIC01NjkzLDExICs1NjkzLDI2IEBAIHN0YXRpYyBib29sIGNvcHlfcmVnX3RvX3VzZXIoY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmVnLCB1NjQgX191c2VyICoqdWluZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3JlYWxtX3N5c19yZWdfaGlkZGVuX3VzZXIoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0XHRcdCB1NjQgcmVnKVxuK3tcbitcdHN3aXRjaCAocmVnKSB7XG4rXHRjYXNlIFNZU19JRF9BQTY0REZSMF9FTDE6XG4rXHRjYXNlIFNZU19QTUNSX0VMMDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbnQgd2Fsa19vbmVfc3lzX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkLFxuIFx0XHRcdCAgICB1NjQgX191c2VyICoqdWluZCxcbiBcdFx0XHQgICAgdW5zaWduZWQgaW50ICp0b3RhbClcbiB7XG4rXHRpZiAodmNwdV9pc19yZWModmNwdSkgXHUwMDI2XHUwMDI2XG4rXHQgICAga3ZtX3JlYWxtX3N5c19yZWdfaGlkZGVuX3VzZXIodmNwdSwgcmVnX3RvX2VuY29kaW5nKHJkKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0LypcbiBcdCAqIElnbm9yZSByZWdpc3RlcnMgd2UgdHJhcCBidXQgZG9uJ3Qgc2F2ZSxcbiBcdCAqIGFuZCBmb3Igd2hpY2ggbm8gY3VzdG9tIHVzZXIgYWNjZXNzb3IgaXMgcHJvdmlkZWQuXG5AQCAtNTczNSw3ICs1NzUwLDcgQEAgc3RhdGljIGludCB3YWxrX3N5c19yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZClcbiBcbiB1bnNpZ25lZCBsb25nIGt2bV9hcm1fbnVtX3N5c19yZWdfZGVzY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiBudW1fZGVtdXhfcmVncygpXG4rXHRyZXR1cm4gbnVtX2RlbXV4X3JlZ3ModmNwdSlcbiBcdFx0KyB3YWxrX3N5c19yZWdzKHZjcHUsICh1NjQgX191c2VyICopTlVMTCk7XG4gfVxuIFxuQEAgLTU3NDgsNyArNTc2Myw3IEBAIGludCBrdm1fYXJtX2NvcHlfc3lzX3JlZ19pbmRpY2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IF9fdXNlciAqdWluZGljZXMpXG4gXHRcdHJldHVybiBlcnI7XG4gXHR1aW5kaWNlcyArPSBlcnI7XG4gXG4tXHRyZXR1cm4gd3JpdGVfZGVtdXhfcmVnaWRzKHVpbmRpY2VzKTtcbitcdHJldHVybiB3cml0ZV9kZW11eF9yZWdpZHModmNwdSwgdWluZGljZXMpO1xuIH1cbiBcbiAjZGVmaW5lIEtWTV9BUk1fRkVBVFVSRV9JRF9SQU5HRV9JTkRFWChyKVx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9rdm0vYXJtX3BzY2kuaCBiL2luY2x1ZGUva3ZtL2FybV9wc2NpLmhcbmluZGV4IGY4NmEwMDZkNjcxMzYuLjA2YzIwNjEyZTllN2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXG4rKysgYi9pbmNsdWRlL2t2bS9hcm1fcHNjaS5oXG5AQCAtMTAsNiArMTAsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BzY2kuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZW11bGF0ZS5oXHUwMDNlXG4rXG4gI2RlZmluZSBLVk1fQVJNX1BTQ0lfMF8xXHRQU0NJX1ZFUlNJT04oMCwgMSlcbiAjZGVmaW5lIEtWTV9BUk1fUFNDSV8wXzJcdFBTQ0lfVkVSU0lPTigwLCAyKVxuICNkZWZpbmUgS1ZNX0FSTV9QU0NJXzFfMFx0UFNDSV9WRVJTSU9OKDEsIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMjo1Mi4yODI4MDEzNThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDE1MDEwMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBUk02NCBLVk0gRm9jdXMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBoZXJlIGlzIGRlZmluaXRlbHkgYW1kNjQsIHdoaWNoIGlzIG15IGJyZWFkIGFuZCBidXR0ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHBhdGNoIGFuZCB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy5cblxuVGhlIHBhdGNoIGxpc3QgdGVsbHMgbWUgaXQncyBtb2RpZnlpbmcgYSBidW5jaCBvZiBmaWxlcy4gUHJpbWFyaWx5LCBpdCdzIGhpdHRpbmcgYSBsb3Qgb2YgZmlsZXMgd2l0aGluIHRoZSBgYXJjaC9hcm02NC9gIGRpcmVjdG9yeS4gSSBzZWUgYSBsb3Qgb2YgS1ZNLXJlbGF0ZWQgZmlsZXMgaW4gdGhlcmUsIHRoaW5ncyBsaWtlIGBrdm1fZW11bGF0ZS5oYCwgYGt2bV9ob3N0LmhgLCBga3ZtX3BndGFibGUuaGAsIGFuZCBhIGdvb2QgY2h1bmsgb2YgQyBmaWxlczogYGFyY2hfdGltZXIuY2AsIGBhcm0uY2AsIGBndWVzdC5jYCwgZXRjLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgQVJNNjQgS1ZNIGltcGxlbWVudGF0aW9uOiBIWVAsIE1NSU8sIE1NVSwgUk1JLCB0aGUgd29ya3MuIFRoZSBmYWN0IHRoYXQgYGFyY2gvYXJtNjQva3ZtL3Brdm0uY2AgaXMgYmVpbmcgdG91Y2hlZCBpcyBpbnRlcmVzdGluZywgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoYXQgYXJlYS5cblxuQnV0LCBob2xkIG9uLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIEFSTTY0LXNwZWNpZmljIGNvZGUsIEkgbm90aWNlIHR3byB0aGluZ3M6IGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dGAgYW5kIGBpbmNsdWRlL2t2bS9hcm1fcHNjaS5oYCBhcmUgYWxzbyBvbiB0aGUgbGlzdC4gVGhpcyB0aHJvd3MgYSBzbGlnaHQgY3VydmViYWxsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGVzZSBkb24ndCBhY2NpZGVudGFsbHkgYWZmZWN0IG15IHRhcmdldCBhcmNoaXRlY3R1cmUuIEl0J3MgdW51c3VhbCB0byBoYXZlIEFSTTY0IGNoYW5nZXMgYmxlZWQgaW50byBvdGhlciBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgZ29vZCByZWFzb24uXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGluY2x1ZGUva3ZtL2FybV9wc2NpLmhgIGFuZCBhbnkgb2YgdGhlIG90aGVyIG1vZGlmaWVkIGNvZGUgYXJlIG5vdCB1c2VkIG9uIGFtZDY0IG9yIGNvbXBpbGVkIG9uIHg4Ni9hbWQ2NC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCBgaW5jbHVkZS9rdm0vYXJtX3BzY2kuaGAgZmlyc3QgYW5kIHRoZW4gc2VlIGlmIGFueXRoaW5nIGluIHRoZSBvdGhlciBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHg4Ni02NCBidWlsZC4gVGhpcyBtYXkgYmUgZmluZSwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJ2xsIGFsc28gaGF2ZSBhIGxvb2sgYXJvdW5kIGFuZCBzZWUgaWYgYW55IG9mIHRoZXNlIGNoYW5nZXMgYXJlIGdhdGVkIGJlaGluZCBjb25kaXRpb25hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODMyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6MTI6NTYuNjk3ODE0NjIyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDQ4NDcyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJtX3BzY2kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYy01MC0jaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wbXUuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2t2bS9hcm0uYzo1MTojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtNTItI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fdmdpYy5oXFx1MDAzZVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTE4LVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9pbmNsdWRlL2h5cC9zd2l0Y2guaDoxOTojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvaHlwL3N3aXRjaC5oLTIwLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMTQtXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1fcHNjaS5oXFx1MDAzZVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jLTE2LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYy0xNS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jOjE2OiNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX3BzY2kuaFxcdTAwM2VcXG5hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jLTE3LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTktI2luY2x1ZGUgXFx1MDAzY2t2bS9hcm1faHlwZXJjYWxscy5oXFx1MDAzZVxcbmFyY2gvYXJtNjQva3ZtL2h5cGVyY2FsbHMuYzoxMDojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vaHlwZXJjYWxscy5jLTExLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTE1LVxcbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzoxNjojaW5jbHVkZSBcXHUwMDNja3ZtL2FybV9wc2NpLmhcXHUwMDNlXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTE3LSNpbmNsdWRlIFxcdTAwM2Nrdm0vYXJtX2h5cGVyY2FsbHMuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjA6MTI6NTkuMzQyNjY3MDg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODQ0NDA2NjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGRldGVybWluaW5nIGlmIGl0J3Mgd29ydGggZnV6emluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGFtZDY0LiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYGluY2x1ZGUva3ZtL2FybV9wc2NpLmhgIGlzIG9ubHkgdXNlZCBieSBgYXJjaC9hcm02NC9rdm0vKmAuIEFuZCB0aGUgY2hhbmdlIGlzIHNpbXBseSBhZGRpbmcgYW4gaW5jbHVkZSBmb3IgYGFzbS9rdm1fZW11bGF0ZS5oYC4gU3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIGhpdCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgZnJvbSBTZWN0aW9uIDIuIFRoZSBrZXkgaGVyZSBpcyBcIlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczogLSBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIgVGhlIHRhcmdldCBpcyBhbWQ2NC4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgKmNvbXBsZXRlbHkqIGFib3V0IGBhcmNoL2FybTY0YCDigJMgQVJNNjQgS1ZNIFJlYWxtL0NDQS9STU0gc3VwcG9ydCBhbmQgcmVmYWN0b3JpbmcsIHBsdXMgc29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuIE5vIGNvZGUgdG91Y2hlZCBnZXRzIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIG9uIGFtZDY0LiBCb29tLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZmlsZXMgY2hhbmdlZDogZXZlcnl0aGluZyBsaXN0ZWQsIGZyb20gYERvY3VtZW50YXRpb24vYCB0byBgYXJjaC9hcm02NC9gIGluY2x1ZGUgZmlsZXMgYW5kIHNvdXJjZSBmaWxlcywgdGhleSBhcmUgYWxsIGNsZWFybHkgQVJNNjQtc3BlY2lmaWMuIE5vIGV4Y2VwdGlvbnMuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIE5vIG90aGVyIGZhY3RvcnMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UgYmVjYXVzZSB0aGUgcGF0Y2ggb25seSB0b3VjaGVzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBTbywgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgbnVsbC4gVGhlIGBSZWFzb25pbmdgIHdpbGwgYmUgY3J5c3RhbCBjbGVhcjogdGhpcyBwYXRjaCBpcyBhbGwgQVJNNjQtc3BlY2lmaWMgS1ZNL1JNSS9SZWFsbSBjb2RlIGFuZCBEb2N1bWVudGF0aW9uLCB3aGljaCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM0OCwiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMDoxMzowNy43ODY3MzU5OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBBUk02NCBLVk0gYW5kIEFybSBDb25maWRlbnRpYWwgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSAvIFJlYWxtIE1hbmFnZW1lbnQgRXh0ZW5zaW9uKSBjb2RlIGV4Y2x1c2l2ZWx5LCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbGwgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZXhjbHVzaXZlIHRvIGFybTY0IGFuZCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBBUk02NCBLVk0gYW5kIEFybSBDb25maWRlbnRpYWwgQ29tcHV0ZSBBcmNoaXRlY3R1cmUgKENDQSAvIFJlYWxtIE1hbmFnZW1lbnQgRXh0ZW5zaW9uKSBjb2RlIGV4Y2x1c2l2ZWx5LCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24uIFNpbmNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbGwgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgZXhjbHVzaXZlIHRvIGFybTY0IGFuZCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIwOjEzOjA3Ljc4Njc1ODY3WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2dlsv[1] Phase: Running StartedAt: 2026-09-08 20:13:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2dlsv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 20:13:18 +0000 UTC FinishedAt: 2026-09-08 20:13:23 +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,}